matlab 中conv2、filter2、imfilter的区别

------------------------------------- conv2函数 ----------------------------------------
1、用法
  1. C=conv2(A,B,shape);        %卷积滤波
复制代码
A:输入图像,B:卷积核
       假设输入图像A大小为ma x na,卷积核B大小为mb x nb,则
       当shape=full时,返回全部二维卷积结果,即返回C的大小为(ma+mb-1)x(na+nb-1)
      shape=same时,返回与A同样大小的卷积中心部分
       shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回C的大小为(ma-mb+1)x(na-nb+1)


2、实现步骤
    假设输入图像A大小为ma x na,卷积核大小为mb x nb,则MATLAB的conv2函数实现流程如下:
        a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意conv2不支持其他的边界补充选项,函数内部对输入总是补零)。
        b、关于卷积核的中心,旋转卷积核180度。
        c、滑动卷积核,将卷积核的中心位于图像矩阵的每一个元素。
        d、将旋转后的卷积核乘以对应的矩阵元素再求和。

3、实现过程展示
     假设有图像A=[4 3 1 2;0 1 1 3;5 2 0 0],卷积核B=[1 2 3;0 -1 2;1 1 0]
         a、首先是按照上面的步骤进行补零,如下图外圈红色的为补出的零

        


         b、将卷积核旋转180度
                      
         c、将旋转后的核在A上进行滑动,然后对应位置相乘,最后相加,下面分别是shape=full,same,valid时取输出图像大小的情况,位置1表示输出图像的值从当前核的计算值开始(对应输出图像左上角),位置2表示到该位置结束(对应输出图像右下) 
                         


------------------------------------- filter2函数 ----------------------------------------
1、用法
  1. B = filter2(h,A,shape) ;        %相关(correlation)滤波
复制代码
A:输入图像,h:相关核
       假设输入图像A大小为ma x na,相关核h大小为mb x nb,则
       当shape=full时,返回全部二维卷积结果,即返回B的大小为(ma+mb-1)x(na+nb-1)
      shape=same时,返回与A同样大小的卷积中心部分
       shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回B的大小为(ma-mb+1)x(na-nb+1)

2、实现步骤
        假设输入图像A大小为ma x na,相关核h大小为mb x nb,MATLAB的filter2的实现流程如下
           a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意filter2不支持其他的边界补充选项,函数内部对输入总是补零)。
           b、滑动相关核,将相关核的中心位于图像矩阵的每一个元素。
           c、将相关核乘以对应的矩阵元素再求和
                   注意filter2不对核进行180°旋转,直接对应相乘再相加,这一点与filter2不同,下面有两者计算结果对比可看出这一点。

3、conv2(卷积滤波)和filter2(相关滤波)的结果比较
        A=[    3     1     2; 0     1     1     3; 5     2     0     0],卷积核 B=[     2      3;    -1     2; 1      1      0]
                                              
                                conv2,shape=full                                                                filter 2,shape=full



------------------------------------- imfilter ----------------------------------------
1、用法

函数名称:imfilter 
函数语法:g=imfilter(f,w,filtering_mode,boundary_options,size_optinos) 
函数功能:对任意类型数组或多维图像进行滤波 
参数介绍:f是输入图像,w为滤波模板,g为滤波结果;表1-1总结了其他参数的含义。 

表1-1 imfilter函数的选项

这里写图片描述

操作说明 :在执行线性空间滤波函数imfilter时,我们必须清晰的理解两个意义相近的概念。一个是相关 (corr);另一个是卷积(conv)。下面分别介绍一维函数和二维函数在模板w下的相关操作和卷积操作。

2 imfilter函数操作说明

2.1 一维相关与卷积

  图2-1(a)显示了一维函数f和模板w。假设f的原点定为最左侧的点。为执行两个函数的相关,可移动w使其最右侧的点与f的原点重合,如图2-1(b)所示。需要注意的是,这两个函数之间有一些点未重叠。为处理该问题,最普遍的方法是在f中填充足够多的0(对应表1-1中边界选项boundary_options的默认值P),以保证在w通过f的整个过程中,始终存在对应的点。如图2-1(c)所示。 
  现在准备执行相关操作。相关操作结果第一个值是在图2-1(c)所示位置上两个函数对应位置乘积的累加和。接着将w向右移动一个位置并重复上述过程,如图2-1(d)所示。经过4次移动后,如图2-1(e)所示。以此类推,直至w全部通过f,最终得到如图2-1(f)所示。得到的w与f的相关如图2-1(g)所示。 
  在图2-1(g)所示的相关中,符号’full’是由MATLAB图像处理工具箱使用的标记,用来指示相关操作按上述方式计算时使用了经过充零后的图像。同样,工具箱还提供了另一个’same’选项,可以产生大小与f相同的相关。这种计算同样也使用经过充零后的图像,但开始位置位于与f的原点对准的模板的中线点。最后的计算时使f的最后一个点与模板的中心点对准。 

这里写图片描述

图2-1 一维相关操作说明

这里写图片描述

图2-2 一维卷积操作说明

  为了执行卷积,将w旋转180度,使其最右侧的点与f的原点重叠,如图2-2(b)所示。然后重复在相关操作中使用的滑动计算过程,如图2-2(c)到图2-2(f)所示。’full’和’same’卷积结果分别如图2-2(g)和图2-2(h)所示。

2.2 二维相关与卷积

  上述情况很容易推广到二维图像中,如图2-3所示。原点位于图像f(x,y)的左上角。为了执行相关计算,设置w(x,y)的最右下角点,使之与f(x,y)的原点重合,如图2-3(c)所示。与一维情况类似,这里我们使用了零填充。然后在所有可能的位置上移动w(x,y),使得它的至少一个像素会与原始图像f(x,y)中的某个像素重叠。这个’full’相关的结果如图2-3(d)所示。为得到图2-3(e)中所示的’same’相关,我们要求w(x,y)的所有偏移都能实现中心像素覆盖原始的f(x,y)。 

这里写图片描述

图2-3 二维相关操作示例

  对于卷积,我们将w(x,y)旋转180度,其他处理方式与相关操作相同,参见图2-4(a)到图2-4(c)。 
这里写图片描述

图2-4二维卷积操作示例


------------------------------------- 最后总结 ----------------------------------------
1、  filter2、conv2将输入转换为double类型,输出也是double的,输入总是补零(zero padded), 不支持其他的边界补充选项。
2、  imfilter:不将输入转换为double,输出只与输入同类型,有灵活的边界补充选项

猜你喜欢

转载自blog.csdn.net/julialove102123/article/details/80539050