CV预备(一): conv2, filter2, imfilter的差异

目录

  • 前言
  • filter2
  • 实操
  • conv2
  • imfilter
  • 最后

前言

最近开始准备深刻学习一下计算机视觉(CV)方面的内容, 这里会更新几期基础知识, 主要是Matlab和Python方面的. 此次的就是三个Matlab的函数filter2, conv2, imfilter.bash


filter2

filter2相关滤波函数, 假设输入图像I大小为M1 X N1,相关核f大小为M2 X N2.函数

J = filter2 (f, I, shape)
复制代码
  • f: 相关核, 即滤波掩模
  • I: 输入图像
  • J: 输出图像
  • shape: 可选, 其参数以下:
参数 描述
same(默认值) 返回与I一样尺寸滤波后的图像, M1 X N1
full 返回所有二维滤波结果, (M1 + M2 - 1) X (N1 + N2 - 1)
valid 不考虑边界补零, 即只要有边界补出的零参与运算的都舍去, (M1 - M2 + 1) X (N1 - N2 + 1)

实操

这里实操一下, 首先是same学习

I = [10 10 10 10;
     10 10 10 10;
     10 10 10 10];

f = [1 1 1;
     1 1 1;
     1 1 1];

J = filter2(f, I, 'same')
复制代码

输出是:spa

>> iFilter

J =

    40    60    60    40
    60    90    90    60
    40    60    60    40
复制代码

对输入图像补零, 第一行以前和最后一行以后都补M2 -1行,第一列以前和最后一列以后都补N2 - 1列, (注意filter2和conv2不支持其余的边界补充选项, 函数内部对输入老是补零.3d

也就是补成以下:code

0 0 0  0  0  0  0 0 
0 0 0  0  0  0  0 0 
0 0 10 10 10 10 0 0
0 0 10 10 10 10 0 0
0 0 10 10 10 10 0 0
0 0 0  0  0  0  0 0 
0 0 0  0  0  0  0 0 
复制代码

相关

因此第一个40就是相关核与红框内部分对应相乘而后结果求和所得, 也就是(0*1 + 0*1 + 0*1 + 0*1 + 10 *1 + 10 *1 + 0*1 + 10 *1 + 10 *1), 以后的就滑动相关核, 将相关核的中心位于图像矩阵的每个元素.cdn

full的话, 就是将边缘补全零的计算结果也一并输出, 因此尺寸是(M1 + M2 - 1) X (N1 + N2 - 1)blog

J =

    10    20    30    30    20    10
    20    40    60    60    40    20
    30    60    90    90    60    30
    20    40    60    60    40    20
    10    20    30    30    20    10
复制代码

卷积

最后valid, 就是边界补出的零参与运算的都舍去.ci

J =

    90    90
复制代码

conv2

和filter2最大的不一样就是计算以前, 把卷积核旋转180°. 因此, 若是卷积核旋转180°和原来同样, 那么conv2和filter2的计算结果都是同样的. 因此我这里就修改一下算子. 能够很明显看到filter2的结果旋转180°就是conv2的结果.string

I = [10 10 10 10;
     10 10 10 10;
     10 10 10 10];

f = [1 1 1;
     1 1 1;
     1 2 1];

J = filter2(f, I, 'same')
J = conv2(I, f, 'same')
复制代码
J =

    50    70    70    50
    70   100   100    70
    40    60    60    40


J =

    40    60    60    40
    70   100   100    70
    50    70    70    50
复制代码

imfilter

J = imfilter(I, f, filtering_mode, boundary_options, size_options)
复制代码
参数列表 选项 描述
filtering_mode ‘corr’ 相关(默认)
‘conv’ 卷积
boundary_options X 输入图像的边界经过用值X值来填充扩展其默认值为0
‘replicate’ 复制外边界值
‘symmetric’ 镜像反射
‘circular’ 图像大小经过将图像当作是一个二维周期函数的一个周期来扩展
size_options ‘full’ 输出图像的大小与被扩展图像的大小相同
‘same’ 输出图像的大小与输入原始输入图像同样(默认)

这样的话, J = imfilter(I, f, 'corr', 0, 'same')J = filter2(f, I, 'same')是等效的.


最后

喜欢记得点赞或者关注哦, 有意见或者建议评论区见~

相关文章
相关标签/搜索