当使用MATLAB 2D滤波器函数和卷积函数时,我发现filter2(B,X)函数本质上是2D卷积函数,但是它的旋转度是滤波器系数矩阵的180度就conv(X,B,'')和filter2的输出而言,我认为以下关系成立:
output matrix of filter2 = each element negated of output of conv2
编辑:我错了,上面的关系一般不成立,但我看了几个例子一般来说,这两个输出矩阵是不相关的,因为两个输出矩阵都得到两个完全不同的核,用于卷积。
我知道二维卷积是如何进行的我想了解的是这在图像处理方面的含义我如何想象这里发生了什么将滤波器系数矩阵旋转180度意味着什么?
最佳答案
首先,我将使用Wikipedia中的以下图片简要讨论convolution:
如图所示,卷积两个一维函数涉及反射其中一个函数(即卷积核),将两个函数相互滑动,并计算其积的积分。
卷积二维矩阵时,卷积核在两个维上都有反映,然后计算每个与另一个矩阵唯一重叠组合的积和这种对内核维数的反映是卷积的固有步骤。
但是,在执行过滤时,我们喜欢将过滤矩阵视为一个“模板”,它按原样(即没有反射)直接放置在要过滤的矩阵上换言之,我们希望以卷积的形式执行等效运算,但不反映滤波矩阵的维数为了消除在卷积过程中执行的反射,因此我们可以在执行卷积之前添加滤波器矩阵的维数的附加反射。
现在,对于任何给定的二维矩阵A,您可以证明翻转两个维度等同于使用MATLAB中的函数FLIPDIM和ROT90将矩阵旋转180度:
A = rand(5); %# A 5-by-5 matrix of random values isequal(flipdim(flipdim(A,1),2),rot90(A,2)) %# Will return 1 (i.e. true)
这就是为什么filter2(f,A)等同于conv2(A,rot90(f,2),'same')为了进一步说明对滤波器矩阵和卷积核的不同看法,我们可以看看对同一组矩阵f和A应用FILTER2和CONV2时会发生什么,定义如下:
>> f = [1 0 0; 0 1 0; 1 0 0] %# A 3-by-3 filter/kernel f = 1 0 0 0 1