您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 图像增强、图像滤波、边缘检测的MATLAB实现
图像增强、图像滤波、边缘检测的MATLAB实现2.图像增强图像增强是指按特定的需要突出一幅图像中的某些信息,同时,消弱或去除某些不需要的信息的处理方法。其主要目的是使处理后的图像对某些特定的应用比原来的图像更加有效。图像增强技术主要包含直方图修改处理、图像平滑化处理、图像尖锐化处理、和彩色处理技术等。图像增强有图像对比度增强、亮度增强,轮廓增强等等。下面利用直方图统计算法对灰度图像进行增强:程序代码:I=imread('cameraman.tif');subplot(121)imshow(I);title('原始图像');subplot(122)imhist(I,64)%绘制图像的直方图,n=64为灰度图像灰度级,若I为灰度图像,默认n=256;若I为二值图像,默认n=2。title('图像的直方图');(请自己运行查看)n=256时:(请自己运行查看)下面利用直方图均衡化增强图像的对比度:I=imread('cameraman.tif');J=histeq(I);%将灰度图像转换成具有64(默认)个离散灰度级的灰度图像imshow(I)title('原始图像')figure,imshow(J)title('直方图均衡化后的图像')figure(1)subplot(121);imhist(I,64)title('原始图像的直方图')subplot(122);imhist(J,64)title('均衡化的直方图')(请自己运行查看)分析:从上图中可以看出,用直方图均衡化后,图像的直方图的灰度间隔被拉大了,均衡化的图像的一些细节显示了出来,这有利于图像的分析和识别。直方图均衡化就是通过变换函数histeq将原图的直方图调整为具有“平坦”倾向的直方图,然后用均衡直方图校正图像。下面利用直方图规定化对图像进行增强:I=imread('cameraman.tif');figure,imshow(I);title('原始图像');hgram=50:2:250;%规定化函数J=histeq(I,hgram);figure,imshow(J);title('直方图规定化后的图像');figure,imhist(I,64);title('原始图像的直方图');figure,imhist(J,64);title('直方图规定化后的直方图');运行结果:变换灰度间隔后的图像和直方图:hgram=50:1:250;hgram=50:5:250;3图像滤波的Matlab实现3.1conv2函数功能:计算二维卷积格式:C=conv2(A,B)C=conv2(Hcol,Hrow,A)C=conv2(...,'shape')说明:对于C=conv2(A,B),conv2的算矩阵A和B的卷积,若[Ma,Na]=size(A),[Mb,Nb]=size(B),则size(C)=[Ma+Mb-1,Na+Nb-1];C=conv2(Hcol,Hrow,A)中,矩阵A分别与Hcol向量在列方向和Hrow向量在行方向上进行卷积;C=conv2(...,'shape')用来指定conv2返回二维卷积结果部分,参数shape可取值如下:》full为缺省值,返回二维卷积的全部结果;》same返回二维卷积结果中与A大小相同的中间部分;valid返回在卷积过程中,未使用边缘补0部分进行计算的卷积结果部分,当size(A)size(B)时,size(C)=[Ma-Mb+1,Na-Nb+1]。3.2conv函数功能:计算多维卷积格式:与conv2函数相同3.3filter2函数功能:计算二维线型数字滤波,它与函数fspecial连用格式:Y=filter2(B,X)Y=filter2(B,X,'shape')说明:对于Y=filter2(B,X),filter2使用矩阵B中的二维FIR滤波器对数据X进行滤波,结果Y是通过二维互相关计算出来的,其大小与X一样;对于Y=filter2(B,X,'shape'),filter2返回的Y是通过二维互相关计算出来的,其大小由参数shape确定,其取值如下:》full返回二维相关的全部结果,size(Y)size(X);》same返回二维互相关结果的中间部分,Y与X大小相同;》valid返回在二维互相关过程中,未使用边缘补0部分进行计算的结果部分,有size(Y)size(X)。3.4fspecial函数功能:产生预定义滤波器格式:H=fspecial(type)H=fspecial('gaussian',n,sigma)高斯低通滤波器H=fspecial('sobel')Sobel水平边缘增强滤波器H=fspecial('prewitt')Prewitt水平边缘增强滤波器H=fspecial('laplacian',alpha)近似二维拉普拉斯运算滤波器H=fspecial('log',n,sigma)高斯拉普拉斯(LoG)运算滤波器H=fspecial('average',n)均值滤波器H=fspecial('unsharp',alpha)模糊对比增强滤波器说明:对于形式H=fspecial(type),fspecial函数产生一个由type指定的二维滤波器H,返回的H常与其它滤波器搭配使用。4.滤波4.1目的运用中值滤波克服线性滤波器所带来的图像细节模糊。4.2使用设备PC兼容机一台,操作系统为Windows2000(或Windows98,WindowsXP,以下默认为Windows2000)4.3使用滤波对图像进行增强4.3.1线性滤波(邻域平均)线性低通滤波器最常用的是线性平滑滤波器,这种滤波器的所有系数都是正的,也称邻域平均。邻域平均减弱或消除了傅立叶变换的高频分量,对噪声的消除有所增强,但是由于平均而使图像变得更为模糊,细节的锐化程度逐渐减弱。下面使用不同的平滑模板对图像进行滤波:(二维线性滤波fliter2)程序代码:I=imread('cameraman.tif');imshow(I)title('原始图像')J=imnoise(I,'salt&pepper');%添加盐椒噪声,噪声密度为默认值0.05figure,imshow(J)title('添加盐椒噪声后的图像')K1=filter2(fspecial('average',3),J)/255;%应用3×3邻域窗口法figure,imshow(K1)title('3×3窗的邻域平均滤波图像')K2=filter2(fspecial('average',7),J)/255;%应用7×7邻域窗口法figure,imshow(K2)title('7×7窗的邻域平均滤波图像')K3=filter2(fspecial('average',9),J)/255;%应用9×9邻域窗口法figure,imshow(K3)title('9×9窗的邻域平均滤波图像')K4=filter2(fspecial('average',11),J)/255;%应用11×11邻域窗口法figure,imshow(K4)title('11×11窗的邻域平均滤波图像')4.3.2中值滤波中值滤波可以保留目标边缘,这是中值滤波器相对于均值滤波器的最大优势。中值滤波具有去噪的性能,可以消除孤立的噪声点,可以用来减弱随机干扰和脉冲干扰,但是边缘不模糊。程序代码:I=imread('cameraman.tif');imshow(I)title('原始图像')J=imnoise(I,'salt&pepper',0.02);%添加盐椒噪声,噪声密度为0.02figure,imshow(J)title('添加盐椒噪声后的图像')K1=medfilt2(J);%在默认的3×3的邻域窗中进行中值滤波figure,imshow(K1)title('默认的3×3的邻域窗的中值滤波图像')K2=medfilt2(J,[55]);%在5×5的邻域窗中进行中值滤波figure,imshow(K2)title('5×5的邻域窗的中值滤波图像')从上可见,中值滤波的效果要比邻域平均的低通滤波效果好,中值滤波以后的图像的轮廓比较清晰,而且使用较小的模板得到的视觉效果反而好一些。4.3.3锐化滤波图像锐化处理的目的是使模糊图像变得清晰,锐化滤波器减弱或消除了傅立叶空间的低频分量,保留高频分量,从而加强了图像的轮廓,使图像看起来比较清晰。下面应用Laplacian算子对图像进行锐化处理:Laplacian算子是线性二次微分算子,其格式为:h=fspecial('laplacian',alpha),返回一个3×3的滤波器来近似二维Laplacian算子的形状,参数alpha决定了Laplacian算子的形状,alpha的取值范围为0.0~1.0,默认的值为0.2。程序代码:%应用Laplacian算子对图像进行锐化I=imread('cameraman.tif');imshow(I)title('原始图像')H=fspecial('laplacian');%应用laplacian算子滤波锐化图像laplacianH=filter2(H,I);figure,imshow(laplacianH)title('laplacian算子锐化后的图像')分析:由图可以看出,应用了Laplacian算子对图像锐化以后,将图像区域的边缘轮廓勾划了出来,因此Laplacian算子对于边缘检测也具有很好的功效。5.边缘检测下面利用sobel算子对图像进行边缘检测:使用edge函数实现图像的边缘检测,其调用格式为:BW=edge(I,'sobel',thresh,direction)根据指定的敏感阈值thresh用Sobel算子对图像进行边缘检测,edge函数忽略了所有小于阈值的边缘,如果没有指定阈值thresh或为空,函数自动选择参数值,direction指定Sobel算子边缘检测的方向,其参数值为'horizontal','vertical'或'both'(默认)。程序代码:I=imread('cameraman.tif');imshow(I)title('原始图像')BW=edge(I,'sobel');%以自动域值选择法对图像进行Sobel算子边缘检测figure,imshow(BW);title('自动域值的Sobel算子边缘检测')[BW,thresh]=edge(I,'sobel');%返回当前Sobel算子边缘检测的阈值disp('sobel算子自动选择的阈值为:')disp(thresh)BW1=edge(I,'sobel',0.02,'horizontal');%以域值为0.02水平方向对图像进行Sobel算子边缘检测figure,imshow(BW1)title('域值为0.02的水平方向的sobel算子检测')BW2=edge(I,'sobel',0.02,'vertical');%以域值为0.02垂直方向对图像进行Sobel算子边缘检测figure,imshow(BW2)title('域值为0.02的垂直方向的sobel算子检测')BW3=edge(I,'sobel',0.05,'horizontal');%以域值为0.05水平方向对图像进行Sobel算子边缘检测figure,imshow(BW3)title('域值为0.05的水平方向的sobel算子检测')BW4=edge(I,'sobel',0.05,'vertical');%以域值为0.05垂直方向对图像进行Sobel算子边缘检测figure,imshow(BW4)title('域值为0.05的垂直方向的sobel算子检测')测试结果图:sobel算子自动选择的阈值为:0.1433由图可以看出,在采用水平和垂直方向的Sobel算子对图像进行边缘检测时,分别对应的水平和垂直方向上的边缘有较强的响应,阈值越小,检测的图像的边缘细节数越多,而增大阈值时,有些轮廓则未能检测出。其用法和Sobel算子类似。其调用格式为:BW=edge(I,'prewitt',thresh,d
本文标题:图像增强、图像滤波、边缘检测的MATLAB实现
链接地址:https://www.777doc.com/doc-5243906 .html