Почему мы используем массив единиц для ядра в OpenCV? - PullRequest
0 голосов
/ 16 июня 2020

Читая сегодня документы OpenCV, я наткнулся на интересную группу функций, известных как морфологические преобразования. Хотя мне кажется, что я хорошо разбираюсь в понятиях эрозии и расширения, я не могу понять, почему мы используем массив единиц при выполнении морфологического преобразования. Например, см. Приведенный ниже код (ссылка на Открытая документация CV , где автор создает ядро, заполненное единицами при выполнении эрозии.

import cv2
import numpy as np

img = cv2.imread('j.png',0)
kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(img,kernel,iterations = 1)

После некоторых исследований я понял, что основная работа эрозии - это просто двухмерная свертка, где рассматриваемый пиксель сравнивается с соседними пикселями, а локальный минимум изображения под ядром устанавливается как значение пикселя. Тем не менее, это не помогает мне прояснить, почему мы устанавливаем ядро ​​в первую очередь. Почему не 0? Почему не 255? Значения ядра никоим образом не должны влиять на свертку, верно?

1 Ответ

1 голос
/ 17 июня 2020

Вы умножаете значения ядра на значения пикселей. Если это все 0, вывод будет 0. Если он отличается от 1, вывод увеличивается на значение, которое вы вводите в ядро. Это 1, чтобы сохранить значение пикселя как есть, и ВСЕ 1, потому что это то, что делает фильтр эрозии. Ядра обычно представляют собой комбинации 1,0, -1 в зависимости от цели ядра. Итак, в вашем примере ядро ​​5x5 1s умножается на суб-изображения 5x5 (которые, я думаю, являются суммами его значений пикселей).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...