2014-01-30 2 views
1

У меня есть одна функция, которая расширяет/размывает функцию, предполагая, что опорная точка является верхним или первым элементом матрицы.Dilate/erode - опорная точка в матричном ядре topleft vs. middle

[ 1 1]

[1 1 1]

[1 1 1]

У меня есть другие функции, что делает расширяются/выветриться функцию, предполагая, что точки привязки является средним точка матрицы.

[1 1 1]

[1 1]

[1 1 1]

Есть ли способ, после того, как расширяется/подрывать работу, чтобы сделать первую выходную матрицу, как на выходе от второго, т. е. сдвиг изображения каким-то образом?

ответ

1

В вашем первом случае максимальный элемент (дилатация или минимальный элемент в эрозии) внутри каждой маски 3 * 3 установлен в положение [-1,-1], а во втором случае он установлен в [0,0]. Так что, если вы не считая граничный эффект, вы будете иметь

I1[0:n-1,0:m-1] == I2[1:n-2,1:m-2] 

где [n,m] является размером исходного изображения I, I1 и I2 являются морфологическими операциями I с всеми теми, ядром левой верхней узловой точки и середины якорной точки, соответственно.

Вы можете сравнить граничные значения с аналогичным анализом или просто проверить результат напрямую с помощью dilate и erode.

1

В первом случае опорная точка должна быть установлена ​​на [0,0], во втором случае должна быть установлена ​​в центре, которая равна [1,1]. Если вы используете [-1, -1] в качестве точки привязки, по умолчанию в центр маски, полезно, например, при тестировании различных размеров ядра. (См http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=dilate#dilate)

Для остальных вы можете проверить учебник: http://docs.opencv.org/doc/tutorials/imgproc/erosion_dilatation/erosion_dilatation.html

Что касается вашего конкретного вопроса, отдельно для ситуаций на границах, вы можете получить подматрица вашей выходной матрицы (с помощью оператора скобки из cv :: Mat), в котором координаты будут такими, как вам нужно.

Смежные вопросы