如何确定我的卷积是否可分离?

21

什么使卷积核可分离? 我如何能够确定这些可分离的部分,以便进行两个1D卷积而不是2D卷积?

谢谢

2个回答

19

如果2D滤波器核的rank值为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/ - 该文章介绍使用奇异值分解(Singular Value Decomposition,SVD)从可分离的二维核中提取两个一维核。

此外,请查看DSP.stackexchange.com上的这个问题:快速有效地分解可分离整数二维滤波器系数的方法


2
SVD是这里的最佳选择。可分离(即秩为1)的内核非常特定,而SVD允许您通过(小型)可分离内核之和来近似您的内核。 - Alexandre C.

4

您还可以将矩阵分成对称和反对称两个部分,并分别处理每个部分,这对于较大的二维卷积非常有效。


你能否举个例子来澄清吗? - mrgloom
1
如果您可以将2D矩阵排列为向量积x.y' +u.v'等,则可以进行一组1D卷积,而不是2D卷积,只需要4N次乘加运算,而不是N^2次。如果u.v'的大小较小,则减少更大。这通常假定您具有矩阵结构的先前知识以便于分离。它还取决于您的计算引擎- GPU可能会支持另一种结构。 - Philip Oakley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接