专栏首页Sorrower的专栏CV预备(一): conv2, filter2, imfilter的差别

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

目录

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

前言

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


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')

输出是:

>> iFilter

J =

    40    60    60    40
    60    90    90    60
    40    60    60    40

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

也就是补成如下:

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), 之后的就滑动相关核, 将相关核的中心位于图像矩阵的每一个元素.

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

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', 就是边界补出的零参与运算的都舍去.

J =

    90    90

conv2

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

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')是等效的.


最后

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


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • GPU编程(二): GPU架构了解一下!

    http://html.rhhz.net/tis/html/20150101.htm# http://hustcat.github.io/gpu-archit...

    SeanDepp
  • c/c++补完计划(二-改): c字符串复制

    SeanDepp
  • Ubuntu 18.04 LTS快速美化

    SeanDepp
  • 《编程之美》读书笔记(一)——中国象棋将帅有效位置

    《编程之美》读书笔记(一) ——中国象棋将帅有效位置 (原创内容,转载请注明来源,谢谢) 一、问题 ? 如上述棋盘,假设将为点A,帅为点B。将只能在d10...

    用户1327360
  • Java漫谈4

    之前的一篇文章,我们用段誉比武的方式类比了构件类的方式,其中把段誉和慕容复共有的出招这个动作写成了一个功能方法。所谓出招,换个角度来看,就是将人身体中的能量,比...

    用户1335799
  • 「BPM架构」Zeebe 的常见问题和答案

    为了回答这个问题,我们首先分享一些关于我们为什么开始在Zeebe上工作的背景知识是有帮助的。多年来,我们已经看到用户使用Camunda BPM构建微服务编排解决...

    首席架构师智库
  • 【BPM技术】Zeebe是一个用于微服务编排的工作流引擎。

    这篇文章将帮助你确切地了解什么是Zeebe以及它如何可能与你相关。我们将简要介绍Zeebe以及它所解决的问题,然后再进行更详细的介绍。

    首席架构师智库
  • 如何成为10倍速的程序员

    国外有个词叫做10x Programmer,直译是以一当十的程序员。我并不认为一个技术大牛能完成10个普通程序员的工作,技术大牛会花1/10的时间把工作做完,然...

    烂猪皮
  • 小程序分享及用户信息授权等接口能力的调整通知

    针对近期部分小程序接口能力使用不合理的情况,微信公众平台将对下列能力进行调整。开发者可在最新版开发者工具内,选择最新基础库版本体验。调整方案具体如下,请开发者尽...

    中微信通
  • 10月编程语言排行榜:Java第一,C++反超进前三!

    日前,TIOBE官网发布了10月份最新编程语言排行榜。通过榜单,我们可以了解到,Java再次夺冠,本次进入前三名的Java、C、C++。

    程序员宝库

扫码关注云+社区

领取腾讯云代金券