Различия между «imfilter» и «conv2» [MATLAB] - PullRequest
4 голосов
/ 27 октября 2011

Я использую обе эти функции, чтобы найти ребра в масштабе. У вас есть входное изображение, вы применяете маску (например, prewitt) к входному изображению и получаете результирующее изображение.

mypic = imread('examplepic.jpg')
hy = fspecial('prewitt')
yimfilter = imfilter(mypic,hy) % Using imfilter
yconv2 = conv2(mypic,hy) % Using conv2

Какая теоретическая разница между этими двумя? Я знаю, что у меня разные результаты, но какая разница?

Спасибо

Ответы [ 2 ]

9 голосов
/ 27 октября 2011

conv2 выводит всю двумерную свертку, что означает, что yconv2 будет больше, чем mypic.С другой стороны, imfilter по умолчанию обрезает края свертки так, чтобы размер yimfilter был таким же, как у mypic.Вы можете сделать так, чтобы imfilter оставлял всю свертку, как это делает conv2, но это не его поведение по умолчанию.

Есть и другие различия: опция «replicate» imfilter, imfilter может свертывать произвольное число измерений (не только 2) и так далее, но я не думаю, что вы спрашивали об этом.

0 голосов
/ 27 мая 2016

Ну, imfilter по умолчанию использует корреляцию, а не свертку.Если вы позвоните

yimfilter = imfilter(mypic,hy,'conv')

, то yconv2 и yimfilter будут одинаковыми.Что касается разницы между корреляцией и сверткой, вы можете легко увидеть ее, если будете использовать 1D сверточную / корреляционную маску.Вывод будет таким же, только смещение строки / столбца (в зависимости от направления маски).

Кстати, если вы позвоните

yimfilter = imfilter(mypic,hy)
yfilter2 = filter2(hy,mypic)

, вы найдетечто yimfilter и yfilter2 одинаковы, потому что filter2 также использует корреляцию.

...