Подтвердить что ты не робот

Как я могу определить, является ли моя свертка разделимой?

Что делает изолирующее ядро ​​свертки? Как бы я мог рассказать, что эти разделимые части были для того, чтобы сделать две одномерные свертки вместо двумерной свертки >

Спасибо

4b9b3361

Ответ 1

Если ядро ​​2D-фильтра имеет rank of 1, то оно является разделимым. Вы можете проверить это, например. Matlab или Octave:

octave-3.2.3:1>     sobel = [-1 0 1 ; -2 0 2 ; -1 0 1];
octave-3.2.3:2>     rank(sobel)
ans =  1
octave-3.2.3:3> 

См. также: http://blogs.mathworks.com/steve/2006/11/28/separable-convolution-part-2/ - это охватывает использование SVD (разложение сингулярного значения) для извлечения двух ядер 1D из отделимого 2D-ядро.

См. также этот вопрос на DSP.stackexchange.com: Быстрый/эффективный способ разделить разделимые коэффициенты двумерного фильтра с двумя значениями

Ответ 2

вы также можете разбить матрицу на симметричные и перекошенные части и отделить каждую часть, что может быть эффективным для больших 2d сверток.