2011-05-04 74 views

回答

17

如果2D濾波器內核1的rank那麼它是分開的。您可以在例如Matlab或倍頻:

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(奇異值分解)來提取可分離2D內核中的兩個一維的內核。

也這個問題參見DSP.stackexchange.comFast/efficient way to decompose separable integer 2D filter coefficients

+1

SVD是去這裏的路。可分離的(即1級)內核是非常具體的,SVD允許你用可分離的(小)和來近似內核。 – 2011-05-04 21:19:29

4

也可以分割成矩陣對稱和歪斜部件和獨立的每個部分,其可以有效地用於較大的二維卷積。

+0

你能舉個例子來澄清一下嗎? – mrgloom 2015-02-11 15:52:26

+1

如果你可以把你的2d矩陣作爲矢量乘積'xy'+ u.v''等等,你可以做一系列行和列的1d卷積而不是2d卷積,只需要4N乘/加,而不是N^2。如果'u.v''具有更小的尺寸,則縮小更大。這通常假定您已經預先了解矩陣的結構以減輕分離。它也將取決於你的計算引擎 - GPU可能偏愛另一種結構。 – 2015-02-11 23:36:55