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

gol*_*ean 4 matlab filtering matrix convolution

在使用MATLAB 2D滤波器功能filter2(B,X)和卷积功能时conv(X,B,''),我看到该filter2功能本质上是2D卷积,但是旋转了180度的滤波器系数矩阵.在输出方面filter2conv2,我看到下面的关系成立:

 output matrix of filter2 = each element negated of output of conv2
Run Code Online (Sandbox Code Playgroud)

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

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

gno*_*ice 6

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

替代文字

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

当卷积2-D矩阵时,卷积核心在两个维度中反映,然后针对与其他矩阵的每个唯一重叠组合计算乘积之和.这种内核维度的反映是卷积的固有步骤.

然而,执行过滤时我们喜欢把滤波矩阵的,好像它是一个"模版",即直接铺设为是(即,没有反射)在待过滤的矩阵.换句话说,我们希望执行与卷积相同的操作,但不反映滤波矩阵的维数.为了消除在卷积期间执行的反射,我们因此可以在执行卷积之前添加滤波器矩阵的尺寸的附加反射.

现在,对于任何给定的二维矩阵A,您可以向自己证明翻转两个维度相当于使用MATLAB中的函数FLIPDIMROT90将矩阵旋转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)
Run Code Online (Sandbox Code Playgroud)

这就是为什么filter2(f,A)相当于conv2(A,rot90(f,2),'same').为了进一步怎么有滤波器矩阵与卷积核的不同的看法说明,大家可以看一下,当我们申请会发生什么FILTER2CONV2同一组矩阵fA定义如下:

>> 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
Run Code Online (Sandbox Code Playgroud)

现在,当执行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
Run Code Online (Sandbox Code Playgroud)

由于忽略了滤波器矩阵之外的元素,我们可以看到产品的总和17*1 + 4*1 + 5*1 = 26.请注意,这里我们只是简单地放置fA"模板" 之上,这就是滤波器矩阵被认为在矩阵上运行的方式.

当我们执行时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
Run Code Online (Sandbox Code Playgroud)

而产品的总和将是5*1 + 1*1 + 13*1 = 19.请注意,当f将其作为卷积内核时,我们必须在将其放置在其上之前翻转其尺寸A.