2016-08-08 2 views
0

В поисках примеров использования инструментов обработки изображений для «описания» изображений и форм любого типа я наткнулся на функцию .Scikit-образ и центральные моменты: в чем смысл?

Они дают пример того, как использовать эту функцию:

from skimage import measure #Package name in Enthought Canopy 
import numpy as np 

image = np.zeros((20, 20), dtype=np.double) #Square image of zeros 
image[13:17, 13:17] = 1 #Adding a square of 1s 
m = moments(image) 
cr = m[0, 1]/m[0, 0] #Row of the centroid (x coordinate) 
cc = m[1, 0]/m[0, 0] #Column of the centroid (y coordinate) 

In[1]: moments_central(image, cr, cc) 
Out[1]: 
array([[ 16., 0., 20., 0.], 
     [ 0., 0., 0., 0.], 
     [ 20., 0., 25., 0.], 
     [ 0., 0., 0., 0.]]) 

1) Что каждое из значений представляют? Поскольку элемент (0,0) равен 16, я получаю, что это число соответствует площади квадрата 1s и, следовательно, mu нуль-ноль. Но как насчет других?

2) Является ли это всегда симметричной матрицей?

3) Каковы значения, связанные со знаменитыми вторыми центральными моментами?

+1

У меня возникла проблема с улучшением документации: https://github.com/scikit-image/scikit-image/issues/2239 –

ответ

2

Массив, возвращаемый measure.moments_central, соответствует формуле https://en.wikipedia.org/wiki/Image_moment (раздел центральный момент). mu_00 действительно соответствует области объекта.

Formula from Wikipedia (Image moment)

Инертность матрица не всегда симметрично, как показано на этом примере, где объект представляет собой прямоугольник вместо квадрата.

>>> image = np.zeros((20, 20), dtype=np.double) #Square image of zeros 
>>> image[14:16, 13:17] = 1 
>>> m = measure.moments(image) 
>>> cr = m[0, 1]/m[0, 0] 
>>> cc = m[1, 0]/m[0, 0] 
>>> measure.moments_central(image, cr, cc) 
array([[ 8. , 0. , 2. , 0. ], 
     [ 0. , 0. , 0. , 0. ], 
     [ 10. , 0. , 2.5, 0. ], 
     [ 0. , 0. , 0. , 0. ]]) 

Что касается моментов второго порядка, они mu_02, mu_11 и mu_20 (коэффициенты по диагонали I + J = 1). На той же странице Википедии https://en.wikipedia.org/wiki/Image_moment объясняется, как использовать моменты второго порядка для вычисления ориентации объектов.

+0

Спасибо. Вместо того, чтобы ссылаться на Википедию, которую я уже сделал, я ожидал получить немного больше информации из самого пакета. К счастью, проблема поднята. Таким образом, согласно вашему ответу, mu_02, mu_11 и mu_20 являются, соответственно, последним элементом в первой строке и первыми двумя во втором. Верный? – FaCoffee

+1

Конечно, документация пакета должна быть улучшена. mu_ij - это элемент в i-ой строке и j_th столбце (индексирование начинается с 0), так что mu_02 - это элемент на 0-й строке и 2-й столбец (2 в моем предыдущем примере), mu_11 - элемент в первой строке и первом столбце (0) и т. Д. –

+0

Я получаю, что эти индексы также имеют смысл в 2D декартовом пространстве (например, первый индекс относится к оси x, а второй - к оси y). Верный? – FaCoffee