Что делает ядро свертки отделимым? Как бы я мог сказать, что это за отдельные части, чтобы сделать две одномерные свертки вместо двухмерной свертки>
Спасибо
Если ядро двумерного фильтра имеет rank, равное 1, то оно отделимо.Вы можете проверить это, например, в Matlab или Octave:
rank
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 (разложение по сингулярному значению) для извлечения двух одномерных ядер из разделяемого 2Dkernel.
SVD
См. также этот вопрос на DSP.stackexchange.com : Быстрый / эффективный способ разложения разделимых целочисленных коэффициентов 2D-фильтра
Вы также можете разбить матрицу на симметричные и наклонные части и разделить каждую часть, что может быть эффективно для больших 2-мерных сверток.