图像滤波函数imfilter函数的应用及其扩展

一)认识imfilter函数

imfilter函数叫做实现线性空间滤波函数,主要功能可以实现多维数组的滤波,在图像领域就是对图像进行滤波。

滤波是一个统一的概念,在图像领域,图像的去除噪声点,图像提取边缘,图像平滑、模糊、增强等等都可以看成滤波。

用法:B = imfilter(A,H)

B = imfilter(A,H,option1,option2,…)

或写作 :

B = imfilter(f, w, filtering_mode, boundary_options, size_options);

(更详细的在matlab环境下help查询imfilter函数)这里贴出来help的文件如下:

二)认识模板H

可以说imfilter函数的精髓就是对于模板H的构造,H的不同决定了你的实现效果不同,那么什么是模板呢?举个例子,假如现在要提取图像的噪声点,我们知道,既然是噪声点,那么噪声点的像素值与其周围的点的像素值都应该相差很远才对,这里选取噪声点的上下左右四个方向,每个方向上用噪声点的值减去对应方向的值,将这四个差的绝对值相加起来,如果这个值越大,是不是说明这个点越是噪声点了,那么上述的这个过程可以用一个模板来计算,这个模板就是:

0 -1 0
-1 4 -1
0 -1 0

用这个模板去对图像滤波就可以得到噪声(当然也可以得到边缘,因为边缘也符合这个特性吧),比如下图所示:

该图就是经过模板H = [0 -1 0;-1 4 -1;0 -1 0]滤波而来的,相应的matlab代码就是imfilter(I,H);

其实这个滤波函数的操作方式很简单,对于一个图像的一个像素点的操作,首先看看模板大小,比如3*3,然后提取出这个像素点附近的3*3领域的9个像素点,将这9个像素点依次对应的与模板中的数字相乘,在把乘的所有值相加(很显然就会出现正负了,不一定都是正值),把这个和作为该像素点滤波后的值,那么图像中每个像素点都进行这个操作后,就得到一副与原始图像大小相同的滤波图像了,比如上面这幅图。

由上可知模板对于图像滤波功能的重要性。像上述的一个模板,这个模板也被称为拉普拉斯模板,类似的还有边缘检测算子,canny算子,sobel算子等等,相关介绍:

http://www.kongzhi.net/cases/caseview.php?id=2368

比如说边缘检测竖线的算子就可以表示为H = [-1 2 -1;-1 2 -1;-1 2 -1],得到的结果就如下所示:

三)一个问题

到这可能有人思考到,既然这个算子对像素点的处理是该像素点的附近像素点的一个加权和,那么对于一副图像的边缘怎么办?还是说3*3模板,现在要对最左边、最上边的那个像素点处理怎么办?它的上边、左边没有像素点了呀,这就涉及到扩充边缘了,也就是imfilter函数里面的boundary_options参数,matlab的扩充方式有如上的3中方式,复制边界、镜像边界、按周期扩充,像复制边界,就是讲边界点复制到没有的边界,加入100*100的图像,使用3*3的模板,那么复制边界后的图像就是102*102的图像了,这就引除了imfilter的第三个参数size_options,这个参数决定输出的图像是与原图像大小的呢还是扩充边界的呢,一般情况下,默认输出原图像大小的,也就是102*102的图像在输出时又会去掉所加的边界,重新变成100*100的图像。
当然,关于边界的处理问题,也可以自己编程去扩充,生成一个大一点的图像去储存起来,然后把边界点复制过去。

四)关于imfilter的应用扩展

对于imfilter函数的应用远不止于滤波,其实对于H的构造可以快速实现很多复杂的操作,尤其是对于整幅图像来说(并且会涉及到边界问题的时候)。

一个简单的例子,假设现在一副图像,我们要提取图像中每个像素点的特征值,这个特征值包括四个特征(灰度值、像素点横向梯度、像素点纵向梯度、像素点的领域内方差),各个特征的计算方式如下所示:

当需要求所有像素点的这四个特征的时候怎么办?一种方法直接按照公式给的求解,编程实现这四个特征也很简单,然后对于每一个像素点来一个for循环。这样带来两个问题:(1)你的边界点怎么办?边界点的上下左右总有个方向没有像素点吧,这个时候你必须去扩充边界才能继续。(2)我们知道for循环耗时耗力,对于matlab这个矩阵实验室来说,对矩阵整体操作最好不过了,速度快,最忌讳的就是在matlab中去大量使用for循环,用起来慢死你(某些问题)。

这里我们就采用滤波函数imfilter来分解实现上述四个特征的求解过程,使得计算的速度加快并且简单。特征a1不要说,就是原始图像。最麻烦的特征a2,a2为领域类方差,首先得求解该3*3领域内均值,就是该领域内的所有像素点求和再求平均,这就需要均值个模板:

model = 1/9*[1 1 1;1 1 1;1 1 1];
F2_mean = imfilter(img,model,‘replicate‘);

边界的扩充方式采用复制的方式,默认生成大小与原图像一样大的。然后是均值与领域内的像素点相减求和再求均值,那么首先得把领域内的像素点都调整到中心点位置,这就需要8个模板了,相应的程序:

model_1 = [-1 0 0;0 0 0;0 0 0];F2_1 = imfilter(img,model_1,‘replicate‘);
model_2 = [0 -1 0;0 0 0;0 0 0];F2_2 = imfilter(img,model_2,‘replicate‘);
model_3 = [0 0 -1;0 0 0;0 0 0];F2_3 = imfilter(img,model_3,‘replicate‘);
model_4 = [0 0 0;-1 0 0;0 0 0];F2_4 = imfilter(img,model_4,‘replicate‘);
model_5 = [0 0 0;0 0 -1;0 0 0];F2_5 = imfilter(img,model_5,‘replicate‘);
model_6 = [0 0 0;0 0 0;-1 0 0];F2_6 = imfilter(img,model_6,‘replicate‘);
model_7 = [0 0 0;0 0 0;0 -1 0];F2_7 = imfilter(img,model_7,‘replicate‘);
model_8 = [0 0 0;0 0 0;0 0 -1];F2_8 = imfilter(img,model_8,‘replicate‘);
F2=0.125*(abs(F2_mean+F2_1)+abs(F2_mean+F2_2)+abs(F2_mean+F2_3)+abs(F2_mean+F2_4)+...
abs(F2_mean+F2_5)+abs(F2_mean+F2_6)+abs(F2_mean+F2_7)+abs(F2_mean+F2_8));

得到的F2就是整幅图像的a2特征了,可以看到没有循环,不用自己去设计边界扩充,速度还特别的快。

接着是a3与a4特征,这两个特征也比较简单,如下:

F3 = 0.5*(abs(img + F2_4) + abs(img + F2_5));
F4 = 0.5*(abs(img + F2_2) + abs(img + F2_7));

至此,像素点的这四个特征就差不多了,可以看到imfilter函数还是非常强大的,尤其是对于所有像素点的整体操作的时候(而且图像方面一般都是整体操作),不过是通常用的边缘提取、滤波等等原图,对于其他问题,只要能够分解为简单的加和问题,都可以方便的用imfilter来求解。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-19 02:01:41

图像滤波函数imfilter函数的应用及其扩展的相关文章

Matlab的imfilter函数用法详解

Matlab的imfilter函数用法 功能:对任意类型数组或多维图像进行滤波. 用法:B = imfilter(A,H) B = imfilter(A,H,option1,option2,...) 或写作g = imfilter(f, w, filtering_mode, boundary_options, size_options)其中,f为输入图像,w为滤波掩模,g为滤波后图像.filtering_mode用于指定在滤波过程中是使用"相关"还是"卷积".bou

matlab图像灰度调整——imadjust函数的使用

在MATLAB中,通过函数imadjust()进行图像灰度的调整,该函数调用格式如下: J=imadjust( I )  对图像I进行灰度调整 J=imadjust( I,[low_in;high_in],[low_out;high_out]) [low_in;high_in]为原图像中要变换的灰度范围,[low_out;high_out]为变换后的灰度范围 J=imadjust( I,[low_in;high_in],[low_out;high_out],gamma)  该gamma参数为映射

11.图像滤波与滤波器

图像滤波,指在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性. 消除图像中的噪声成分称为图像的平滑化或者滤波操作.信号或图像的能量大部分集中在幅度谱的低频和中频段.而在较高频段,有用的信息经常被噪声淹没.滤波的目的有2个:一个是抽出对象的特征作为图像识别的特征模式:一个是为适应图像处理的要求,消除图像数字化时所混入的噪声. 对于滤波而言,处理的要求有2个:一个是不能损坏图像的轮廓及边缘等重要信息:

OpenCV2学习笔记(五):图像滤波基础

一:基本概念 滤波是数字图像处理中的一个基本操作,在信号处理领域可以说无处不在.图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,通常是数字图像处理中不可缺少的操作,其处理效果的好坏将直接影响到后续运算和分析的效果.简单来说,图像滤波的根本目的是在图像中提取出人类感兴趣的特征. 当我们观察一幅图像时,有两种处理方法: 1. 观察不同的灰度(或彩色值)在图像中的分布情况,即空间分布. 2. 观察图像中的灰度(或彩色值)的变化情况,这涉及到频率方面的问题. 因此,图像滤波分为频域和

图像滤波之高斯滤波介绍

1 高斯滤波简介 了解高斯滤波之前,我们首先熟悉一下高斯噪声.高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声.如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声.高斯白噪声的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性,高斯白噪声包括热噪声和散粒噪声. 高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器.高斯平滑滤波器对于抑制服从正态分布的噪声非常有效.一维零均值高斯函数为: g(x)=exp( -x^2/(2 si

[家里蹲大学数学杂志]第055期图像滤波中的方向扩散模型

$\bf 摘要$: 本文给出了王大凯等编的<图像处理中的偏微分方程方法>第 5.4.1 节的详细论述. $\bf 关键词$: 图像滤波; 方向扩散模型; matlab 编程 1. 模型的建立 从保护图像边缘的观点出发, 我们希望扩散是沿着平行于边缘的切线方向 (即垂直于 $\n I$ 的方向) 进行. 于是得到如下 PDE: $$\bee\label{1:df} I_t=I_{\xi\xi}, \eee$$ 其中 $\xi(\perp \n I)$ 为单位矢量. 我们化简 \eqref{1:d

Kinect深度图像滤波

最近在做机器视觉方面的一点工作,用Kinect作sensor获取深度数据.颜色.手势识别等.非常感激CNBlog上的两篇博文:(1)独钓寒江的http://www.cnblogs.com/yangecnu/archive/2012/03/30/KinectSDK_Geting_Started.html 从中学到了不少关于在WPF平台上使用C#,利用微软Kinect SDK开发自己的应用程序的知识,给了我很大的帮助,在此表示感谢! 但是博主独钓寒江的博文中,针对深度图像滤波,只简要说了取反和用Bg

【opencv学习笔记1】5种图像滤波辨析:方框、均值、高斯、中值、双边

图像滤波 什么是图像滤波 图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性. 图像滤波的目的 a.消除图像中混入的噪声 b.为图像识别抽取出图像特征 图像滤波的要求 a.不能损坏图像轮廓及边缘 b.图像视觉效果应当更好 滤波器的定义 滤波器,顾名思义,是对波进行过滤的器件.(摘自网络) 以上的定义是针对物理器件的,但对于图像滤波而言显然也是适用的. 大家都用过放大镜,这里就以此举一个例

opencv第三课,图像滤波

1.介绍 OpenCV图像处理技术中比较热门的图像滤波操作主要被分为了两大类:线性邻域滤波和非线性滤波.线性邻域滤波常见的有“方框滤波“,”均值滤波“和”高斯滤波“三种,二常见的非线性滤波主要是中值滤波”和“双边滤波”.本文将将简略介绍这几种滤波操作的不同点,以及他们各自的特点. 2.理论与概念讲解 图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性.消除图像中的噪声成分叫作图像的平滑化