图像卷积、相关以及在MATLAB中的操作

图像卷积、相关以及在MATLAB中的操作

2016年7月11日 20:34:35, By ChrisZZ

区分卷积和相关

图像处理中常常需要用一个滤波器空间滤波操作。空间滤波操作有时候也被叫做卷积滤波,或者干脆叫卷积(离散的卷积,不是微积分里连续的卷积);滤波器也有很多名字:卷积模版、卷积核、掩模、窗口等。

空间滤波可以分为线性滤波和非线性滤波。非线性滤波常见的有中值滤波、最大值滤波等,相当于自定义一个函数,在数学上由于不满足线性变换因此叫做非线性滤波。这里不细研究它。

线性滤波则通常是:将模版覆盖区域内的元素,以模版中对应位置元素为权值,进行累加。看起来挺简单的,但是要区分相关(cross-correlation)卷积(convolution)两种模式。为什么呢?因为在MATLAB里是有所区分的,而且不少中文书里面把它们混淆了。

我们最容易的理解是:将模版中元素从左到右、从上到下,作为使用顺序,那么卷积操作的结果,就是模版第一个元素乘以它覆盖的元素,加上模版第二个元素乘以它覆盖的元素,再加上模版第三个元素乘以它覆盖的元素,...,一直加到模版最后一个元素乘以它覆盖的元素。好吧,其实就是:模版覆盖区域内,元素逐一相乘然后累加,此时的对应位置就是上下投影后被覆盖的位置。

上面这个理解确实是看起来最容易理解的,因而很多中文书把它叫做"卷积"。然而这个概念其实叫做相关,而卷积则相当于:将同样的模版旋转180°后,再做"相关"操作。当然,如果模版是180°对称的那么卷积和相关是相同的。但是并不是所有的模版都对称。因此,我建议,在滑窗操作、计算图像梯度等场合,不要使用“卷积”,而要使用“滤波”或者“相关”。因为,我们通常讲的卷积,其实是相关,那就不要用卷积这个词以免引起混淆。

MATLAB下的操作

在MATLAB中用imfilter来实现线性空间滤波:

imfilter(f, w, filtering_mode, boundary_options, size_options)
f:图像
w:滤波模版
filtering_mode:滤波模式
    'corr':相关滤波。[默认值]
    'conv':卷积滤波。
boundary_options:边界选项
    P:(没有引号)边界外围补充0。[默认值]
    'replicate':边界外围复制边界值
    'symmetric':边界外围使用边界镜像
    'circular':图像的大小通过讲图像处理为二维周期函数的一个周期来扩展(这是什么?)
size_options:大小选项
    'same':输出大小与输入图像f大小相同。[默认值]
    'full':输出与扩展(填充)后的图像大小相同。

最常用的是这句:

imfilter(f, w, 'replicate') %相关滤波,边界外围填充0,输出大小与输入图像f相同

当然,如果硬要做真正的卷积滤波,除了指定imfilter中的的conv参数,也可以先将模版旋转180°:

rotated_filter=flipud(fliplr(filter))

总结

说了这么多废话,总结起来就是3句话:

  1. 很多中文书里(数字图象处理一类)讲的卷积过滤其实应当叫做相关过滤
  2. 平时滤波最常用的是相关滤波,也就是“覆盖位相乘,然后累加”
  3. MATLAB中的写法为imfilter(f, w, 'replicate')

ref

https://www.zhihu.com/question/29121110

时间: 2024-10-26 02:00:51

图像卷积、相关以及在MATLAB中的操作的相关文章

紧急求助!将matlab中生成的图像传递给.net对象?

问题描述 现在使用C#调用matlab编译的.netassembly程序集,目前实现的功能是,在matlab中生成了图片并保存到了剪粘板,代码如下:h_fig=figure('Visible','off');plot(x,y);%你的画图语句print(gcf,'-dmeta');%保存到剪贴板,emf图像格式close(h_fig);%关闭figure,清空内存然后在.net中从剪粘板得到图像,这样会有两个个问题:1.破坏了剪粘板中原有的数据2.不能并发执行各位高手能否解决将matlab中生成

图像处理-MATLAB中RGB图像转HSI图像的源代码,并图像分割

问题描述 MATLAB中RGB图像转HSI图像的源代码,并图像分割 MATLAB中RGB图像转HSI图像的源代码 并分别对HSI中3个分量(H/S/I)进行图像分割 给我,能运行的M文件 在线等,急急急急急!!!!!!!!!!! 解决方案 function hsi = rgb2hsi(rgb) % hsi = rgb2hsi(rgb)把一幅RGB图像转换为HSI图像, % 输入图像是一个彩色像素的M×N×3的数组, % 其中每一个彩色像素都在特定空间位置的彩色图像中对应红.绿.蓝三个分量. %

MATLAB中如何利用hausdorff算法实现汽车logo识别?

问题描述 MATLAB中如何利用hausdorff算法实现汽车logo识别? 刚接触MATLAB不久的我,老师让我实现MATLAB中利用hausdorff算法实现汽车logo识别,当前我已尝试过好多遍,不过仍然未果,希望大神能给予帮助. 解决方案 这个是不是要用模版学习,完后用这个算法算距离呢?不知道你是那里卡住了 解决方案二: 你们老师是给了你们模板吗?matlab里面关于图像检测的函数有很多,我用2014b的,以前的版本好像要安装完再加载,你可以看看matlab里面有什么相关函数,我以前做过

MATLAB中db4小波分解与重构问题

问题描述 MATLAB中db4小波分解与重构问题 假设将x用dwt(x'db4')分解成低频系数ca和高频系数cd,这时修改了ca,再用idwt(cacd'db4')将信号还原成y,然后再用dwt(y'db4')分解y为低频ca2,高频cd2,此时ca2就不和ca一样了,这正常吗?有没有解决办法让ca和ca2一样呢? 解决方案 Matlab小波matlab下小波分解的例子MATLAB小波图像分解 解决方案二: http://www.pudn.com/downloads102/sourcecode

看了这篇文章,了解深度卷积神经网络在目标检测中的进展

近些年来,深度卷积神经网络(DCNN)在图像分类和识别上取得了很显著的提高.回顾从 2014 到 2016 这两年多的时间,先后涌现出了 R-CNN,Fast R-CNN, Faster R-CNN, ION, HyperNet, SDP-CRC, YOLO,G-CNN, SSD 等越来越快速和准确的目标检测方法. 1. 基于 Region Proposal 的方法 该类方法的基本思想是:先得到候选区域再对候选区域进行分类和边框回归.  1.1 R-CNN[1] R-CNN 是较早地将 DCNN

MATLAB中的round函数

MATLAB中的round函数 函数简介 调用格式:Y = round(X) 在matlab中round也是一个四舍五入函数.在matlab的命令窗口中输入doc round或者help round即可获得该函数的相关帮助信息. 相关函数:ceil.floor.fix 程序示例 >>a = [-1.9, -0.2, 3.4, 5.6, 7.0, 2.4+3.6i] a = Columns 1 through 4 -1.9000 -0.2000 3.4000 5.6000 Columns 5 t

matlab中如何去除较大面积的孤立噪声区域?

问题描述 matlab中如何去除较大面积的孤立噪声区域? 麻烦大家帮我看看,如何去除那些小黑块,只保留那一条裂缝,非常感谢! 解决方案 假设A为图像,0是白色,1是黑色 [x,y] = find(A==1); %所有边缘的左边点 x为横坐标 y为纵坐标 xsort = sort(x,'descend'); ind1 = find(x==xsort(1)); %x的最大值有可能有两个,下面自己修改 point1 = [x(ind1),y(ind1)]; %第一个边缘点 ind2 = find(x=

matlab中,怎么把原来电脑上面的图片导入到么matlab中然后进行图像分析处理呢?

问题描述 matlab中,怎么把原来电脑上面的图片导入到么matlab中然后进行图像分析处理呢? 是指定的图像的文件完整路径和文件名,如果在work工作目录下,只需要提供文件名即可,FMT为图像文件的格式对应的标准扩展名

matlab中m文件中的一些问题

问题描述 matlab中m文件中的一些问题 修改了其中的数据后,为什么在m文件中运行,结果还是一样的? 解决方案 应该是m文件的问题.看看是否有clear all或影响r的地方. 解决方案二: 重新启动matlab,删除了数据重新运行下.再不行看下程序,有没有读取到数据,代码有没有问题.