图像增强、图像滤波、边缘检测的
M A T L A B实现
图像增强、图像滤波及图像边缘检测MATLAB实现程序
图像增强
图像增强是指按特定的需要突出一幅图像中的某些信息,同时,消弱或去除某些不需要的信息的处理方法。其主要目的是使处理后的图像对某些特定的应用比原来的图像更加有效。图像增强技术主要包含直方图修改处理、图像平滑化处理、图像尖锐化处理、和彩色处理技术等。图像增强有图像对比度增强、亮度增强,轮廓增强等等。
下面利用直方图统计算法对灰度图像进行增强:
程序代码:
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.1 conv2 函数
功能:计算二维卷积
格式: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.2 conv 函数
功能:计算多维卷积
格式:与 conv2 函数相同
3.3 filter2函数
功能:计算二维线型数字滤波,它与函数 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) 3.4 fspecial 函数 功能:产生预定义滤波器 格式: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.05 figure,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.02 figure,imshow(J) title('添加盐椒噪声后的图像') K1=medfilt2(J); %在默认的3×3的邻域窗中进行中值滤波 figure,imshow(K1) title('默认的3×3的邻域窗的中值滤波图像')