什么使卷积核可分离? 我如何能够确定这些可分离的部分,以便进行两个1D卷积而不是2D卷积?
谢谢
什么使卷积核可分离? 我如何能够确定这些可分离的部分,以便进行两个1D卷积而不是2D卷积?
谢谢
如果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上的这个问题:快速有效地分解可分离整数二维滤波器系数的方法
您还可以将矩阵分成对称和反对称两个部分,并分别处理每个部分,这对于较大的二维卷积非常有效。
x.y' +u.v'
等,则可以进行一组1D卷积,而不是2D卷积,只需要4N次乘加运算,而不是N^2次。如果u.v'
的大小较小,则减少更大。这通常假定您具有矩阵结构的先前知识以便于分离。它还取决于您的计算引擎- GPU可能会支持另一种结构。 - Philip Oakley