2D свертка: перевернуть ядро?

16

Зачем нам сначала переворачивать ядро ​​в 2D свертке? В чем выгода этого? Итак, почему мы не можем оставить это без внимания? http://www.songho.ca/dsp/convolution/convolution2d_example.html

вход вход

ядро ядро

выход выход

«Сначала переверните ядро, представляющее собой заштрихованную коробку, в горизонтальном и вертикальном направлении» http://www.songho.ca/dsp/convolution/files/conv_img16.gif

user1095332
источник

Ответы:

7

Если вы не переворачиваете ядро, вы просто получаете другую операцию, которая называется кросс-корреляцией. Когда фильтр симметричен, как гауссов или лапласиан, свертка и корреляция совпадают. Но когда фильтр не является симметричным, как производная, вы получаете разные результаты.

Причина, по которой свертка предпочтительнее корреляции, заключается в том, что она обладает более хорошими математическими свойствами. В частности, свертка ассоциативна, а корреляция в целом - нет.

Для более технического объяснения нам нужно перейти в частотную область. Основная теорема о свертках утверждает, что форма Фурье свертки двух функций и равна (с точностью до константы в зависимости от преобразования) произведению преобразований Фурье двух функций. В символах fgfg

F{fg}=kF{f}F{g}

где - преобразование Фурье. В случае корреляции вы получите умножение на комплексное сопряжение, которое менее приятно и, в частности, не ассоциативно.F

Еще одно интересное свойство свертки состоит в том, что, свернув ядро ​​с единичным импульсом (например, с матрицей с одним 1 в центре и 0 в противном случае), вы получите само ядро ​​в результате. Вместо этого корреляция перевернет ядро.

Андреа Асперти
источник