1、MATLAB在数字图像处理中的应用在数字图像处理中的应用 MATLAB中,一幅图像可能包含一个数据矩阵,也中,一幅图像可能包含一个数据矩阵,也可能包含一个颜色映射表矩阵。可能包含一个颜色映射表矩阵。MATLAB中有中有4 4种基本的图像类型:种基本的图像类型:(1)(1)索引图像索引图像 ;(2)(2)灰度图像灰度图像;(3)RGB (3)RGB图像图像 (4)(4)二值图像二值图像 1 1、索引图像、索引图像 索引图像包括一个数据矩阵索引图像包括一个数据矩阵X X,一个颜色映像矩阵,一个颜色映像矩阵mapmap。其中其中mapmap是一个包含三列和若干行的数据矩阵,其每是一个包含三列和若干行
2、的数据矩阵,其每一个元素的值均为【一个元素的值均为【0 0,1 1】之间的双精度浮点型数据。】之间的双精度浮点型数据。map map矩阵的每一列分别表示红色、绿色和蓝色的颜色矩阵的每一列分别表示红色、绿色和蓝色的颜色值。值。在在MATLABMATLAB中,索引图像是从像素值到颜色映射表值的中,索引图像是从像素值到颜色映射表值的“直接映射直接映射”。像素颜色由数据矩阵像素颜色由数据矩阵X X作为索引指向矩阵作为索引指向矩阵mapmap进行索引。进行索引。例如,值例如,值1 1指向矩阵指向矩阵mapmap中的第一行,中的第一行,2 2指向第二行,指向第二行,依次类推。依次类推。.4 15 6 8
3、.4 15 6 8 .2 8 3 79 .2 8 3 79 .0 0 00.2946 0.1234 0.23450.3245 0.2589 0.3689 X,map=imreadX,map=imread(trees.tif)image(X)image(X)colormap colormap(map)(map)显示结果如图显示结果如图6.4.1所示:所示:2、灰度图像、灰度图像 MATLAB中,一幅灰度图像是一个数据矩阵中,一幅灰度图像是一个数据矩阵I,其中,其中I中的数据均代表了在一定范围内的颜色灰度值。中的数据均代表了在一定范围内的颜色灰度值。MATLAB把灰度图像存储为一个数据矩阵,该数据
4、矩把灰度图像存储为一个数据矩阵,该数据矩阵中的的元素分别代表了图像中的像素。阵中的的元素分别代表了图像中的像素。在在MATLAB中,要显示一幅灰度图像,需要调用函数中,要显示一幅灰度图像,需要调用函数imagesc(即(即image scale,图像缩放函数)。,图像缩放函数)。例例6.4.2 用用imagesc函数显示一幅灰度图像。函数显示一幅灰度图像。x=imread(trees.tif);imagesc(x);colormap(gray)显示结果如图显示结果如图6.4.2所示:所示:3、RGB图像图像 RGB图像,即真彩图像,在图像,即真彩图像,在MATLAB中存储为中存储为nm3的数据
5、矩阵。的数据矩阵。数组中的元素定义了图像中每一个像素的红、绿、蓝数组中的元素定义了图像中每一个像素的红、绿、蓝颜色值。颜色值。像素的颜色由保存在像素位置上的红、绿、蓝的灰度像素的颜色由保存在像素位置上的红、绿、蓝的灰度值的组合来确定。值的组合来确定。图形文件格式把图形文件格式把RGB图像存储为图像存储为24位的图像,红、位的图像,红、绿、蓝分别占绿、蓝分别占8位。位。例例6.4.3 调用调用image函数显示函数显示RGB图像。图像。RGB=imread(flowers.tif);image(RGB)显示结果如图显示结果如图6.4.3所示:所示:4、二值图像、二值图像 与灰度图像相同,二值图像
6、只需要一个数据矩阵,每与灰度图像相同,二值图像只需要一个数据矩阵,每个像素只取两个灰度值。个像素只取两个灰度值。例:用例:用imshow函数显示一个二值图像。函数显示一个二值图像。imshow circles.tif 显示结果如图显示结果如图6.4.4所示:所示:5、在一个图形窗口中显示多幅图像、在一个图形窗口中显示多幅图像 为了便于在多幅图像之间进行比较,需要将这些要比为了便于在多幅图像之间进行比较,需要将这些要比较的图像显示在一个图形窗口中,用较的图像显示在一个图形窗口中,用subimage函数。函数。subimage(X,map),subimage(I),subimage(RGB)分分别
7、用于显示索引色、灰度及真彩色图像。别用于显示索引色、灰度及真彩色图像。subimage(x,y,)表示将图像按指定的坐标系)表示将图像按指定的坐标系(x,y)显示。显示。RGB1=imread(football.jpg);RGB2=imread(greens.jpg);I1=imread(rice.tif);I2=imread(testpat1.tif);subplot(2,2,1);subimage(0,500,0,500,RGB1);subplot(2,2,2);subimage(0,500,0,500,RGB2);subplot(2,2,3);subimage(0,500,0,500,I
8、1);subplot(2,2,4);subimage(0,500,0,500,I2);6、增强对比度、增强对比度 X1=imread(pout.tif);figure,imshow(X1)f0=0;g0=0;f1=70;g1=30;f2=180;g2=230;f3=255;g3=255;figure,plot(f0,f1,f2,f3,g0,g1,g2,g3)axis tight,xlabel(f),ylabel(g)title(intensity transformation)r1=(g1-g0)/(f1-f0);b1=g0-r1*f0;r2=(g2-g1)/(f2-f1);b2=g1-r2*
9、f1;r3=(g3-g2)/(f3-f2);b3=g2-r3*f2;m,n=size(X1);X2=double(X1);for i=1:mfor j=1:n f=X2(i,j);g(i,j)=0;if(f=0)&(f=f1)&(f=f2)&(f=f3)g(i,j)=r3*f+b3;end endendfigure,imshow(mat2gray(g)原图像、变换曲线和处理后的图像如下:原图像、变换曲线和处理后的图像如下:7、利用利用MATLAB工具箱中的函数工具箱中的函数imadjust()增强对比度。增强对比度。代码如下:代码如下:X1=imread(pout.tif);figure,im
10、show(X1)J=imadjust(X1,0.25 0.6,1.2322);figure,imshow(J)J=adjust(I,low high,bottom top,gamma)表示返回表示返回图像图像I经调整后的图像经调整后的图像J。low high为原图像中要变换的为原图像中要变换的灰度范围,灰度范围,bottom top指定了变换后的灰度范围,其中指定了变换后的灰度范围,其中low,high,bottom,top的取值范围都使的取值范围都使01,并且,并且lowhigh,bottom=0)&(f=f1)&(f=255)g(i,j)=255;end endendfigure,imsh
11、ow(mat2gray(g)变换曲线和变换结果分别如下图:变换曲线和变换结果分别如下图:10、实现直方图均衡化、实现直方图均衡化 用用J=histeq(I,n)函数来完成这项工作,其中函数来完成这项工作,其中I是原始图是原始图像矩阵,像矩阵,J是变换后所得的图像矩阵。是变换后所得的图像矩阵。实现代码如下:实现代码如下:I=imread(tire.tif);J=histeq(I);imshow(I)figure,imshow(J)figure,imhist(I,64)figure,imhist(J,64)原始图像原始图像 原始直方图原始直方图 直方图均衡化所得图像直方图均衡化所得图像 直方图均衡
12、化后的直方图直方图均衡化后的直方图11、实现直方图规定化、实现直方图规定化 I=imread(tire.tif);hgram=0:225 J=histeq(I,hgram);imshow(I)figure,imshow(J)figure,imhist(J,64)J=histeq(I,hgram)可实现直方图规定化,其中可实现直方图规定化,其中hgram是由用户指定的矢量,规定将原始图像是由用户指定的矢量,规定将原始图像I的直方图近似变的直方图近似变换成换成hgram。使用直方图均衡化得到的结果在一些较暗的区域有些使用直方图均衡化得到的结果在一些较暗的区域有些细节仍不太清楚;规定化所得的结果比均
13、衡化更亮,对应细节仍不太清楚;规定化所得的结果比均衡化更亮,对应于均衡化图像中较暗区域的一些细节更清晰。从直方图上于均衡化图像中较暗区域的一些细节更清晰。从直方图上看,灰度值高的一边更为密集。看,灰度值高的一边更为密集。二、二、图像间的代数运算图像间的代数运算 代数运算是指对两幅图像进行点对点的加、减、乘、代数运算是指对两幅图像进行点对点的加、减、乘、除计算而的到输出图像的运算。除计算而的到输出图像的运算。1.1.图像相减运算图像相减运算 设有图像设有图像f(x,y)f(x,y)和和h(x,y),h(x,y),它们的差为:它们的差为:g(x,y)=f(x,y)g(x,y)=f(x,y)h(x,
14、y)h(x,y)图像相减可以用于去除一幅图像中所不需要的加性图图像相减可以用于去除一幅图像中所不需要的加性图案,加性图案可能是缓慢变化的背景阴影、周期性的噪声案,加性图案可能是缓慢变化的背景阴影、周期性的噪声,或在图像上每个象素处均已知的附加污染等。或在图像上每个象素处均已知的附加污染等。减法也可以用于检测同一场景的两幅图像之间的变化。减法也可以用于检测同一场景的两幅图像之间的变化。例如通过对一场景的序列图像的减运算可检测运动。例如通过对一场景的序列图像的减运算可检测运动。在计算用于确定物体边界位置的梯度时,也要用到图像减在计算用于确定物体边界位置的梯度时,也要用到图像减运算。运算。例例1 1
15、 显示采用离散余弦变换压缩的图像与原图像的差别。显示采用离散余弦变换压缩的图像与原图像的差别。用原图像与压缩后的图像相减,实现代码如下:用原图像与压缩后的图像相减,实现代码如下:I=imread(cameraman.tif I=imread(cameraman.tif););I=double(I)/255;I=double(I)/255;T=dctmtx T=dctmtx(8);(8);B=blkproc B=blkproc(I,8 8,P1(I,8 8,P1*x x*P2,T,T);P2,T,T);mask=1 1 1 1 0 0 0 0mask=1 1 1 1 0 0 0 0 1 1 1
16、0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0;B2=blkprocB2=blkproc(B,8 8,P1.(B,8 8,P1.*x,mask);x,mask);I2=blkproc(B2,8 8,P1I2=bl
17、kproc(B2,8 8,P1*x x*P2,T,T);P2,T,T);imshow(I),figure,imshowimshow(I),figure,imshow(I2)(I2)M=I2-I;M=I2-I;figure,imshowfigure,imshow(mat2gray(M)(mat2gray(M)原始图像原始图像 经压缩、解压后的图像经压缩、解压后的图像 相减所得图像相减所得图像 2.2.图像相加运算图像相加运算 设有图像设有图像f(x,y)f(x,y)和和h(x,y)h(x,y),它们的和为,它们的和为 g(x,y)=f(x,y)+h(x,y)g(x,y)=f(x,y)+h(x,y
18、)图像相加的一个重要应用是对同一场景的多幅图像求图像相加的一个重要应用是对同一场景的多幅图像求平均值。这种方法经常用来有效地降低加性随机躁声的影平均值。这种方法经常用来有效地降低加性随机躁声的影响。图像相加也可以用来将一幅图像的内容叠加到另一幅响。图像相加也可以用来将一幅图像的内容叠加到另一幅图像上去,以达到二次暴光的效果。图像上去,以达到二次暴光的效果。例例1 1 实现图像相加。实现图像相加。I=imread(saturn.tifI=imread(saturn.tif););figure,imshowfigure,imshow(I)(I)m,n=size(I);m,n=size(I);J(m
19、,n)=0;J(m,n)=0;for i=1:3for i=1:3 X=imnoise(I,gaussian X=imnoise(I,gaussian););figure,imshow figure,imshow(X)(X)Y=double(X);Y=double(X);J=J+Y/3;J=J+Y/3;endendfigure,imshowfigure,imshow(mat2gray(J)(mat2gray(J)图图6.4.1 索引图像索引图像 图图6.4.2 灰度图像灰度图像图图6.4.3 真彩图像真彩图像图图6.4.4 二值图像二值图像三三.边缘检测边缘检测 常用的边缘检测算子有常用的边缘
20、检测算子有RobertRobert算子、算子、SobelSobel算子、算子、PrewittPrewitt算子、算子、LOGLOG算子、算子、CannyCanny算子,以下分别进行介绍。算子,以下分别进行介绍。1.Robert1.Robert算子算子 Robert Robert算子是一种利用局部差分算子寻找边缘的算子,算子是一种利用局部差分算子寻找边缘的算子,其模板如图所示。其模板如图所示。100-101-10 Robert Robert算子算子 在在MATLABMATLAB中可以由函数实现,语法格式如下:中可以由函数实现,语法格式如下:BW=edge(I,roberts BW=edge(I,
21、roberts)BW=edge(I,roberts BW=edge(I,roberts,thresh),thresh)BW=edge(I,roberts BW=edge(I,roberts)自动选择阈值用自动选择阈值用RobertRobert算子进行边缘检测。算子进行边缘检测。BW=edge(I,roberts BW=edge(I,roberts,thresh),thresh)根据所指定的敏根据所指定的敏感度阈值感度阈值threshthresh用用RobertRobert算子进行边缘检测,它忽略了所算子进行边缘检测,它忽略了所有小于阈值的边缘。当有小于阈值的边缘。当threshthresh为空
22、为空()()时,自动选择阈值。时,自动选择阈值。2.2.SobelSobel算子算子 Sobel Sobel算子的两个卷积计算核如图所示,图像中的每算子的两个卷积计算核如图所示,图像中的每个点都用这两个核做卷积,第一个核对水平边缘响应最大,个点都用这两个核做卷积,第一个核对水平边缘响应最大,第二个核对垂直边缘响应最大。第二个核对垂直边缘响应最大。1 12 21 10 00 00 0-1-1-2-2-1-11 10 0-1-12 20 0-2-21 10 0-1-1 edge edge函数实现的语法格式如下:函数实现的语法格式如下:BW=edge(I,sobel BW=edge(I,sobel)
23、BW=edge(I,sobel BW=edge(I,sobel,thresh),thresh)BW=edge(I,sobel BW=edge(I,sobel,thresh,direction),thresh,direction)BW=edge(I,sobel BW=edge(I,sobel)自动选择阈值用自动选择阈值用SobelSobel算子进算子进行边缘检测。行边缘检测。BW=edge(I,sobel BW=edge(I,sobel,thresh),thresh)根据所指定的敏感度根据所指定的敏感度阈值阈值threshthresh用用SobleSoble算子进行边缘检测,它忽略了所有小算子进
24、行边缘检测,它忽略了所有小于阈值的边缘。当于阈值的边缘。当threshthresh为空为空()()时,自动选择阈值。时,自动选择阈值。BW=edge(I,sobelBW=edge(I,sobel,thresh,direction),thresh,direction)根据所指定的根据所指定的敏感度阈值敏感度阈值threshthresh,在所指定的方向,在所指定的方向directiondirection上,用上,用SobelSobel算子进行边缘检测。算子进行边缘检测。directiondirection可取的字符串值可取的字符串值为为horizontalhorizontal(水平方向)、(水平方
25、向)、vertialvertial(垂直方(垂直方向)或向)或bothboth(两个方向)。(两个方向)。3.Prewitt3.Prewitt算子算子 Prewitt Prewitt算子的两个卷积计算核如图所示。算子的两个卷积计算核如图所示。1 10 0-1-11 10 0-1-11 10 0-1-11 11 11 10 00 00 0-1-1-1-1-1-1 edge edge函数实现的语法格式如下:函数实现的语法格式如下:BW=edge(I,prewitt BW=edge(I,prewitt)BW=edge(I,prewitt BW=edge(I,prewitt,thresh),thres
26、h)BW=edge(I,prewitt BW=edge(I,prewitt,thresh,direction),thresh,direction)BW=edge(I,prewitt BW=edge(I,prewitt)自动选择阈值用自动选择阈值用PrewittPrewitt算算子进行边缘检测。子进行边缘检测。BW=edge(I,prewitt BW=edge(I,prewitt,thresh),thresh)根据所指定的敏感根据所指定的敏感度阈值度阈值threshthresh用用PrewittPrewitt算子进行边缘检测,它忽略了所算子进行边缘检测,它忽略了所有小于阈值的边缘。当有小于阈值的
27、边缘。当threshthresh为空为空()()时,自动选择阈值。时,自动选择阈值。BW=edge(I,prewitt BW=edge(I,prewitt,thresh,direction),thresh,direction)根据所根据所指定的敏感度阈值指定的敏感度阈值threshthresh,在所指定的方向,在所指定的方向directiondirection上,上,用用PrewittPrewitt算子进行边缘检测。算子进行边缘检测。directiondirection可取的字符串值可取的字符串值为为horizontalhorizontal(水平方向)、(水平方向)、vertialvertia
28、l(垂直方(垂直方向)或向)或bothboth(两个方向)。(两个方向)。4.LOG4.LOG算子算子 LOG LOG算子先用高斯低通滤波器将图像进行预先平滑,算子先用高斯低通滤波器将图像进行预先平滑,然后用拉普拉斯算子找出图像中的陡峭边缘,最后用零灰然后用拉普拉斯算子找出图像中的陡峭边缘,最后用零灰度值进行二值化产生闭合的、连通的轮廓,消除了所有内度值进行二值化产生闭合的、连通的轮廓,消除了所有内部点。部点。0 0-1-10 0-1-14 4-1-10 0-1-10 0-1-1-1-1-1-1-1-18 8-1-1-1-1-1-1-1-1 edge edge函数实现的语法格式如下:函数实现的
29、语法格式如下:BW=edge(I,log)BW=edge(I,log)BW=edge(I,log,thresh)BW=edge(I,log,thresh)BW=edge(I,log,thresh,sigma)BW=edge(I,log,thresh,sigma)BW=edge(I,log,thresh,sigma)BW=edge(I,log,thresh,sigma)根据所指定的敏根据所指定的敏感度阈值感度阈值threshthresh和标准偏差和标准偏差sigmasigma,用,用LOGLOG算子进行边缘检算子进行边缘检测,默认时测,默认时sigmasigma等于等于2 2。I=imread(
30、rice.tifI=imread(rice.tif););BW1=edge(I,sobelBW1=edge(I,sobel););BW2=edge(I,robertsBW2=edge(I,roberts););BW3=edge(I,prewittBW3=edge(I,prewitt););BW4=edge(I,log);BW4=edge(I,log);BW5=edge(I,canny);BW5=edge(I,canny);h=fspecial(gaussianh=fspecial(gaussian,5);,5);BW6=edge(I,zerocrossBW6=edge(I,zerocross,
31、h);,h);subplot(2,3,1),imshowsubplot(2,3,1),imshow(BW1)(BW1)title(sobeltitle(sobel算子算子)subplot(2,3,2),imshowsubplot(2,3,2),imshow(BW2)(BW2)title(robertstitle(roberts算子算子)subplot(2,3,3),imshowsubplot(2,3,3),imshow(BW3)(BW3)title(prewitttitle(prewitt算子算子)subplot(2,3,4),imshowsubplot(2,3,4),imshow(BW4)(
32、BW4)title(logtitle(log算子算子)subplot(2,3,5),imshowsubplot(2,3,5),imshow(BW5)(BW5)title(cannytitle(canny算子算子)subplot(2,3,6),imshowsubplot(2,3,6),imshow(BW6)(BW6)title(zerocrosstitle(zerocross算子算子)四图像的几何处理四图像的几何处理 图象的几何处理包括:图像的旋转、图像的剪切、图图象的几何处理包括:图像的旋转、图像的剪切、图像的缩放和基于区域的图像处理。像的缩放和基于区域的图像处理。1 1、图象的旋转图象的旋转
33、 函数函数imrotateimrotate()可以通过一种特定的插补方法来改()可以通过一种特定的插补方法来改变显示图象的角度,其语法格式如下:变显示图象的角度,其语法格式如下:B=imrotateB=imrotate(A,angle,methodA,angle,method)B=imrotateB=imrotate(A,angle,method,crop)(A,angle,method,crop)其中其中A A是图象的数据矩阵,是图象的数据矩阵,angleangle是图象的旋转角度,是图象的旋转角度,methodmethod可以是可以是nearestnearest、bilinearhbili
34、nearh或或bicubicbicubic,它们分别它们分别近邻插补方法、双线性插补方法和双立方插补方法,参数近邻插补方法、双线性插补方法和双立方插补方法,参数corpcorp表示剪切。表示剪切。例如例如1.1.用双线性插补方法改变图象用双线性插补方法改变图象logo.tiflogo.tif显示的角度显示的角度 A=imread(logo.tif A=imread(logo.tif););J=imrotate J=imrotate(A,30,bilinear,crop);(A,30,bilinear,crop);subplot(1,2,1);subplot(1,2,1);imshow imsh
35、ow(A);(A);title(title(原始图象原始图象););subplot(1,2,2);subplot(1,2,2);imshowimshow(J);(J);title(title(旋转旋转3030后的图象后的图象)2 2、图象的剪切、图象的剪切 函数函数imcropimcrop()可以实现图象的剪切,其语法格式有()可以实现图象的剪切,其语法格式有如下几种:如下几种:X2=imcropX2=imcrop(X,map)(X,map):对索引图象进行交互式的剪切。:对索引图象进行交互式的剪切。I2=imcropI2=imcrop(I)(I):对灰度图象进行交互式的剪切。:对灰度图象进行
36、交互式的剪切。RGB=imcropRGB=imcrop(RGB)(RGB):对:对RGBRGB图象进行交互式的剪切。图象进行交互式的剪切。RGB2=imcropRGB2=imcrop(RGB,RECT)(RGB,RECT):对:对RGBRGB图象进行非交互式的剪图象进行非交互式的剪切。切。例例2.2.对对RGBRGB图象图象lily.tiflily.tif按给定的矩形区域按给定的矩形区域100 100 70 100 100 70 80 80进行剪切。进行剪切。rgb=imread(lily.tifrgb=imread(lily.tif););subplot(1,2,1);subplot(1,2
37、,1);subimage(rgb subimage(rgb););title(title(原始图象原始图象););subplot(1,2,2);subplot(1,2,2);rgb2=imcrop(rgb,100 100 70 80);rgb2=imcrop(rgb,100 100 70 80);subimagesubimage(rgb2);(rgb2);title(title(剪切后的图象剪切后的图象););3 3、图象的缩放、图象的缩放函数函数imresizeimresize()可以通过一种特定的插补方法来调整图()可以通过一种特定的插补方法来调整图象的大小,其语法格式如下:象的大小,其语
38、法格式如下:B=imresize(A,mrows ncolsB=imresize(A,mrows ncols,method),method):用:用methodmethod指定指定的插补方法返回大小为的插补方法返回大小为mrowsmrows*ncolsncols的图象。的图象。B=imresizeB=imresize(A,m,method)(A,m,method):用:用methodmethod指定的插补方法返指定的插补方法返回大小等于回大小等于A A的的m m倍的图象倍的图象B B。例如例如3.3.对图像的大小进行调整。对图像的大小进行调整。A=imread(ic.tifA=imread(i
39、c.tif););imshow imshow(A);(A);title(title(原始图象原始图象););figure;figure;subplot(1,2,1);subplot(1,2,1);B1=imresize(A,2,bilinear);B1=imresize(A,2,bilinear);imshowimshow(B1);(B1);title(title(用用bilinearbilinear法放大法放大2 2倍后的图象倍后的图象););subplot(1,2,2);subplot(1,2,2);B2=imresizeB2=imresize(A,0.5,nearest);(A,0.5,
40、nearest);imshowimshow(B2);(B2);title(title(用用nearestnearest法缩小法缩小0.50.5倍后的图象倍后的图象););五、平滑滤波器五、平滑滤波器 1.1.线性平滑滤波器线性平滑滤波器 线性低通滤波器是最常用的线性平滑滤波器。线性低通滤波器是最常用的线性平滑滤波器。这种滤波器的所有系数都是正的。对这种滤波器的所有系数都是正的。对3 33 3的模板来说,的模板来说,最简单的操作是取所有系数都为最简单的操作是取所有系数都为1 1。为保证输出图像仍在原来的灰度范围内,在计算出为保证输出图像仍在原来的灰度范围内,在计算出R R后要将其除以后要将其除以
41、9 9再进行赋值。这种方法称为邻域平均法。再进行赋值。这种方法称为邻域平均法。例例1 1 以以saturn.tifsaturn.tif为例,加入椒盐噪声,并在为例,加入椒盐噪声,并在MATLABMATLAB中调用中调用B Bfilter2(h,A)filter2(h,A)实现均值过滤器,实现代码如下:实现均值过滤器,实现代码如下:I=imread(saturn.tif I=imread(saturn.tif)J=imnoise J=imnoise(I,salt&pepper,0.02);(I,salt&pepper,0.02);imshow imshow(I)(I)figure,imshow
42、figure,imshow(J)(J)K1=filter2(fspecialK1=filter2(fspecial(average,3),J)/255;(average,3),J)/255;K2=filter2(fspecial K2=filter2(fspecial(average,5),J)/255;(average,5),J)/255;K3=filter2(fspecialK3=filter2(fspecial(average,7),J)/255;(average,7),J)/255;figure,imshowfigure,imshow(K1)(K1)figure,imshowfigur
43、e,imshow(K2)(K2)figure,imshowfigure,imshow(K3)(K3)比较以上采用不同尺寸的均值滤波器进行低通滤波处比较以上采用不同尺寸的均值滤波器进行低通滤波处理的结果可知,当所用的平滑模板的尺寸增大时,消除噪理的结果可知,当所用的平滑模板的尺寸增大时,消除噪声的效果增强,但同时所得的图像变得更模糊。声的效果增强,但同时所得的图像变得更模糊。2 2、高斯滤波器、高斯滤波器 高斯滤波器在空域中也是具有平滑性能的低通滤波器,高斯滤波器在空域中也是具有平滑性能的低通滤波器,可通过调用可通过调用h=fspecial(gaussianh=fspecial(gaussian
44、)函数实现高斯滤波器。函数实现高斯滤波器。例例1 1 实现高斯滤波器,代码如下:实现高斯滤波器,代码如下:I=imread(saturn.tifI=imread(saturn.tif););J=imnoise(I,gaussianJ=imnoise(I,gaussian,0,0.005);,0,0.005);figure,imshowfigure,imshow(J)(J)h=fspecial(gaussianh=fspecial(gaussian););K=filter2(h,J)/255;K=filter2(h,J)/255;figure,imshowfigure,imshow(K)(K)2
45、.2.非线性平滑滤波器非线性平滑滤波器 (1 1)中值滤波器)中值滤波器 可以调用可以调用B=medfilt2(A,m,n)B=medfilt2(A,m,n)来实现中值过滤器,来实现中值过滤器,函数函数K=medfilt2(A,m,n)K=medfilt2(A,m,n)使用使用m mn n的模板来完成中值滤的模板来完成中值滤波,默认模板是波,默认模板是3 33 3的。的。例例1 1 以以saturen.tifsaturen.tif为例,加入椒盐噪声,并采用中值为例,加入椒盐噪声,并采用中值 过滤器,实现代码如下:过滤器,实现代码如下:I=imread(saturn.tifI=imread(saturn.tif););J=imnoiseJ=imnoise(I,salt&pepper,0.02);(I,salt&pepper,0.02);k1=medfilt2(J,3,3);k1=medfilt2(J,3,3);figure,imshowfigure,imshow(K1)(K1)