Ответ 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: Быстрый/эффективный способ разделить разделимые коэффициенты двумерного фильтра с двумя значениями