图像滤波滤波是一种应用广泛的图像处理技术,可以通过滤波来强调或删除图像的某种特征。滤波是一种领域操作,即处理后的图像每个像素值是运来像素周围的颜色值经过某些计算得到的。通过不同滤波函数对同一图像滤波,效果迥异。1.滤波函数imfilterMatlab滤波函数imfilter是基于领域滑动设计实现的,其调用格式为B=IMFILTER(A,H,OPTION),参数OPTION可以选择填补参数’symmetric’、’replicate’、’circular’。首先在原始图像上加上一些噪声,然后对含有噪声的图像进行滤波。分别对下面的这个原始图像加上椒盐噪声、高斯白噪声、泊松噪声、乘法噪声。原图像Matlab函数文件如下:I=imread('1.jpg');J1=imnoise(I,'salt&pepper',0.02);J2=imnoise(I,'gaussian',0,0.01);J3=imnoise(I,'poisson');J4=imnoise(I,'speckle',0.04);figure;subplot(221),imshow(J1);subplot(222),imshow(J2);subplot(223),imshow(J3);subplot(224),imshow(J4);图1.加入椒盐噪声的图像图2.加入高斯白噪声的图像图3.加入泊松噪声的图像图4.加入乘法噪声的图像下面对含有椒盐噪声和高斯白噪声的图像用imfilter进行滤波。Matlab函数文件如下:rgb=imread('1.jpg');h=ones(5,5)/25;rgb1=imfilter(rgb,h);rgb2=imfilter(rgb1,h,'replicate');subplot(1,3,1);imshow(rgb);title('Original');subplot(1,3,2);imshow(rgb1);title('Filtered');subplot(1,3,3);imshow(rgb);title('boundaryreplication');图5.含有椒盐噪声的原图像图6.Filtered图7.boundaryreplication图8.含有高斯白噪声的原图像图9.Filtered图10.boundaryreplication函数imfilter已经把操作直接定义为滑动操作sliding。调用函数B=IMFILTER(A,H,OPTION),调用时如果省略了参数option,其形式就变为imfilter(A,H),则默认填补边界为0。图6和图9就是这种情况,所以有边界的出现。如果调用形势为imfilter(A,H,100),那么就是以100来填补边界,然后进行滤波操作。用imfilter对图像进行滤波,可以设计不同形式的滤波器。用imfilter设计运动滤波,水平边缘增强,拉普拉斯滤波三个滤波器。Matlab函数文件如下:rgb=imread('1.jpg');h1=[0,0,0.0000,0.0021,0.0042;0.1958,0.1979,0.2000,0.1979,0.1958;0.0042,0.0021,0.0000,0,0];h2=[1,2,1;0,0,0;-1,-2,-1];h3=[0.1667,0.6667,0.1667;0.6667,-3.3333,0.1667;0.1667,0.6667,0.1667];rgb1=imfilter(rgb,h1);rgb2=imfilter(rgb,h2);rgb3=imfilter(rgb,h3);subplot(2,2,1),imshow(rgb),title('原图像')subplot(2,2,2),imshow(rgb1),title('运动滤波')subplot(2,2,3),imshow(rgb2),title('水平边缘增强')subplot(2,2,4),imshow(rgb3),title('拉普拉斯滤波')图11.含有椒盐噪声的原始图像图12.运动滤波图13.水平边缘增强图14.拉普拉斯滤波(α=1/5)图15.含有高斯白噪声的原图像图16.运动滤波图17.水平边缘增强图18.拉普拉斯滤波(α=1/5)用imfilter函数生成不同的滤波器,就是指定不同的算子。可以看出同样的滤波器对不同噪声的滤波效果也有差异。运动滤波后图像在水平方向上变宽,并且模糊。水平边缘增强滤波把背景变成了黑色,垂直边缘消失。拉普拉斯滤波也把背景变成了黑色,边缘也发生了很大的变化。2.用函数fspecial产生线性滤波器用函数fspecial生成的线性空间滤波器进行滤波,其matlab调用命令为fspecial(T,P)。T是指定的二维线性滤波器,P是辅助说明的参数。比如说,h=fspecial('average',[5,3])中的[5,3]就是用来定义算子的大小。高斯滤波的[5,3]也是定义算子的大小,1是标准差。拉普拉斯滤波的0是决定滤波器形状的取值在[0,1]之间的α。Matlab函数文件如下:rgb=imread('1.jpg');h1=fspecial('average',[5,3]);h2=fspecial('gaussian',[5,3],1);h3=fspecial('laplacian',0);rgb1=imfilter(rgb,h1);rgb2=imfilter(rgb,h2);rgb3=imfilter(rgb,h3);subplot(2,2,1),imshow(rgb),title('原图像')subplot(2,2,2),imshow(rgb1),title('均值滤波')subplot(2,2,3),imshow(rgb2),title('高斯滤波')subplot(2,2,4),imshow(rgb3),title('拉普拉斯滤波')图19.含有椒盐噪声的原图像图20.均值滤波(5*5窗口)图21.高斯滤波图22.拉普拉斯滤波(α=0)图23.含有高斯白噪声的原图像图24.均值滤波(5*5窗口)图25.高斯滤波图26.拉普拉斯滤波(α=0)用fspecial函数可以很快调整滤波模型和各类参数,很快既定的目的。改变不同的参数,例如均值滤波,改变滤波窗口:图27.含有高斯白噪声的图像图28.图均值滤波(5*5窗口)图29.均值滤波(7*7窗口)图30.均值滤波(9*9窗口)从结果可以看出,随着窗口数的增加,图像和边缘越来越模糊,噪声也渐渐被消除。用matlab进行图像滤波简单快捷,改变参数相当容易方便,仅仅改变命令中的参数即可。例如用fspecial,只要改变P的值就能得到想要的结果,它是处理图像的一种不错的方法,matlab以其强大的功能,还可以完成除滤波以外更多的处理图像的工作,是处理图像的一种很实用的工具。