filter2函数中滤波器矩阵旋转的物理意义

时间:2010-12-22 15:20:22

标签: matlab matrix filtering convolution

在使用MATLAB 2D滤波器函数filter2(B,X)和卷积函数conv(X,B,'')时,我看到filter2函数本质上是2D卷积,但是旋转了180度的滤波器系数矩阵。就filter2conv2的输出而言,我看到以下关系成立:

 output matrix of filter2 = each element negated of output of conv2

编辑:我不对;上述关系一般不成立,但我在少数情况下看到过。通常,两个输出矩阵是不相关的,因为在两者中都获得了2个完全不同的内核,这些内核用于卷积。

我理解如何执行2D卷积。我想要理解的是这在图像处理术语中的含义。我如何可视化这里发生的事情?将滤波器系数矩阵旋转180度是什么意思?

1 个答案:

答案 0 :(得分:6)

我将首先使用维基百科中的以下图片对convolution进行非常简短的讨论:

alt text

如图所示,卷积两个1-D函数涉及反映其中一个(即卷积内核),将两个函数相互滑动,并计算其乘积的积分。

当卷积二维矩阵时,卷积内核在两个维度中被反射,然后计算每个与另一个矩阵的唯一重叠组合的乘积之和。这种内核维度的反映是卷积的固有步骤。

然而,当执行过滤时,我们喜欢将过滤矩阵看作是一个“模板”,它直接在上(即没有反射)直接放置在要过滤的矩阵上。换句话说,我们希望执行与卷积相同的操作,但不反映滤波矩阵的维数。为了消除卷积过程中执行的反射,我们可以在进行卷积之前添加滤波器矩阵尺寸的额外反映。

现在,对于任何给定的二维矩阵A,您可以向自己证明翻转两个维度相当于使用函数FLIPDIMROT90将矩阵旋转180度在MATLAB中:

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')的原因。为了进一步说明滤波器矩阵与卷积核的不同看法,我们可以看看当我们将FILTER2CONV2应用于同一组矩阵f和{{1}时会发生什么},定义如下:

A

现在,在执行>> f = [1 0 0; 0 1 0; 1 0 0] %# A 3-by-3 filter/kernel f = 1 0 0 0 1 0 1 0 0 >> A = magic(5) %# A 5-by-5 matrix A = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 时,可以通过使用B = filter2(f,A);排列过滤器的中心元素并将重叠元素相乘来显示输出元素B(2,2)的计算:

A(2,2)

由于忽略了滤波器矩阵之外的元素,我们可以看到产品的总和为 17*1 24*0 1*0 8 15 23*0 5*1 7*0 14 16 4*1 6*0 13*0 20 22 10 12 19 21 3 11 18 25 2 9 。请注意,这里我们只是将17*1 + 4*1 + 5*1 = 26放在f之上,就像“模板”一样,这就是过滤矩阵被认为在矩阵上运行的方式。

当我们执行A时,输出元素B = conv2(A,f,'same');的计算看起来像这样:

B(2,2)

,产品总和将改为 17*0 24*0 1*1 8 15 23*0 5*1 7*0 14 16 4*0 6*0 13*1 20 22 10 12 19 21 3 11 18 25 2 9 。请注意,当5*1 + 1*1 + 13*1 = 19被认为是卷积内核时,我们必须先将其尺寸翻转,然后再将其放在f之上。