简单的卷积就不说了,向量卷积用此函数与用conv效果相同,矩阵卷积用此函数与conv2的二维卷积效果相同。
此函数的方便之处在于支持三维卷积:其实相对于conv2来说就是省了一个for循环。对于三维卷积,比如A矩阵大小为[2,3,3],B矩阵大小为[2,3],计算A与B的卷积结果就是过程就是对于A矩阵的第三维的每一维分别卷积,等价于利用conv2利用卷积核B对A每一维卷积三次。看代码:
>> A(:,:,1)=[1 2 3;4 5 6];
>> A(:,:,2)=[7 8 9;6 5 2];
>> A(:,:,3)=[2 5 8;3 2 1];
>> B=[1,2,3;,4,3,2];
>> convn(A,B,'valid')ans(:,:,1) =48ans(:,:,2) =104ans(:,:,3) =65>> convn(A(:,:,2),B,'valid')ans =104>>
分析:
卷积结果同样分为三维:
第一维结果来源于A(:,:,1)与B的卷积结果
第二维结果来源于A(:,:,2)与B的卷积结果【从代码最后一行能看出来】
第三维结果来源于A(:,:,3)与B的卷积结果
【注意】利用conv、conv2以及convn卷积时,卷积核默认被旋转了180°