Я запутался, используя kernelC функции OpenCV sepfilter2D и kernelY - PullRequest
0 голосов
/ 26 апреля 2019

Я не знаю, как правильно использовать sepFilter2D. Я запутался, используя параметры функции, такие как kernelX, kernelY, в функции OpenCV sepFilter2D.

vector<double> filter1; //row vector

sepFilter2D(src, convolvedImg, CV_64FC3, filter1, filter1, Point(-1, -1), 0.0, BORDER_DEFAULT);


//filter1 = [0.00443305      0.0540056       0.242036        0.39905       0.242036        0.0540056       0.00443305]

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Используйте структуру данных Mat для объявления ядер. (Я не уверен насчет вектора, сейчас я не рядом с ПК. Я проверю позже.)

0 голосов
/ 26 апреля 2019

Как вы, возможно, знаете, операция свертка широко используется при обработке изображений.Он включает использование 2D-фильтра, обычно небольшого размера (например, 3x3 или 5x5), и краткое объяснение состоит в том, что вы накладываете фильтр на каждую позицию, умножаете значения в фильтре на значения в изображении и складываете все вместе.Страница wikipedia содержит более подробное описание этой операции.

Просто чтобы понять это, если у вас есть изображение MxN и фильтр UxV.Для каждого пикселя вы должны применить фильтр один раз.Поэтому вам нужно выполнить умножения и сложения M N U * V.

Некоторые фильтры имеют замечательное свойство, называемое отделимостью.Вы можете добиться того же эффекта 2D-фильтра UxV, применив один раз горизонтальный фильтр размера V, а затем вертикальный фильтр размера U. Теперь у вас есть M N U + M N V = M N (U + V) операций, поэтому это более эффективно.

sepFilter2D делает именно это: применяет вертикальный и горизонтальный 1D-фильтр.Подпись полной функции:

void sepFilter2D(InputArray src, OutputArray dst, int ddepth, InputArray kernelX, InputArray kernelY, Point anchor=Point(-1,-1), double delta=0, int borderType=BORDER_DEFAULT )

, где src - исходное изображение, отфильтрованное изображение будет в dst, ddepth - требуемый типцелевое изображение, kernelX и kernelY - это горизонтальные и вертикальные 1D-ядра, которые я описал выше, anchor представляет начало ядра (по умолчанию означает центр), delta представляет значение, которое добавляется к целевому изображению для смещения егояркость и borderType представляет метод, используемый вокруг границ.

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