[摘 要]图像增强是数字图像的预处理,对图像整体或局部特征能有效地改善。 我们讨论了基于直方图的均衡化和规定化处理的图像增强技术基本原理,给出了相关推导公式和算法;同时,以一个灰度图像为例,用 MATLAB语言实现 了直方图均衡化和规定化增强处理,并给出了具体程序、实验结果图像及直方图。结果表明,直方图均衡化和规定化处理能有 效改善灰度图像的时比度差和灰度动态范围 。
[关键词] 图像增强;直方图;均衡化;邻域滤波; 图像的锐化;MATLAB;
MATLB语言被称为是一种“演草纸式的科学计算语言”,它在数值计算、数据处理、自动控制、信号处理、神经网络、优化计算、模糊逻辑、小波分析、图像处理、统计分析、金融分析等众多的领域有着广泛的用途。特别是它所提供的各种工具箱,使得我们在科学计算、工程设计、数值分析、图像处理等领域的各种计算、演算、模拟等工作变得相当简单。MATI AB不仅具有面向对象的计算机语言特征,也初具面向任务的计算机语言的思想。我从应用所学的MATLAB的语言知识与正在学习的数像处理技术角度利用MATLAB课本中图像增强部分理论进行了验证。
一、 MATLAB语言的特点
由于MATLAB是用c语言编写的,MATLAB提供了和c语言几乎一样多的运算符,灵活使用MATLAB的运算符将使程序变得极为简短。MATI AB既具有结构化的控制语句,如for循环、while循环、break语句和if语句,又有面向对象编程的特性。在MATLAB里,语法限制不严格,程序设计自由度大,程序的可移植性很好,基本上不做修改就可以在各种型号的计算机和操作系统上运行。MATLAB的图形功能强大。在FORTRAN和C语言里,绘图都程不容易,但在MATILAB里,数据的可视化非常简单。MATLAB还有较强的编辑图形界面的能力。
MATLAB的缺点是,它与其它高级程序相比,程序的执行速度较慢。
功能强劲的工具箱是MATLAB的另一重大特色。MATLAB包含两个部分:核心部分和各种可选的工具箱。核心部分中有数百个核心内部函数。其工具箱又可分为两类:功能性工具箱和学科性工具箱。功能性工具箱主要用来扩充其符号计算功能、图示建模仿真功能、文字处理功能以及与硬件实时交互功能。功能性工具箱能用于多种学科。而学科性工具箱是专业性比较强的,如control toolbox,image processing toolbox,signal processing toolbox等。这些工具箱都是由该领域内的学术水平程高的专家编写的,所以用户无需编写自己学科范围内的基础程序,而直接进行高、精、尖的研究。
二、 利用MATLAB进行图像处理
MATLAB推出了功能更强大的适应于图像分析和处理的工具箱.常用的有图像处理工具箱、小波工具箱及数字信号处理工具箱。利用如此多的工具,我们可以方便地从各个方面对图像的性质进行深入的研究。在MATI AB中可用两种数据类型来存储图像:双精度型和8位无符号整数型,图形命令对不同的数据类型做不同的处理。MATI AB支持的图形文件的格式包括 TIFF、JPEG、BMP、PCX、XWD和HDF;支持的图像类型包括:索引图像、灰度图像、二进制图像、RGB图像。MATI AB在图像处理中的应用都是由相应构。MATI AB函数来实现。
下面讨论如何利用MATLB理数字图像
1.数字图像文件操作和图像显示
MATILAB提供了图像文件读人函数imread(),可用它来读人BMP、HDF、JPEG、PCX、TIFF、XWD等格式图像文件。MATI,AB还提供了imwrite()图像写出函数。显示图像函数有image0、imshow()。imcrop( )对图像进行裁剪,图像的插值缩放可用imresize( )函数实现,旋转用imrotate( )实现;直方图均衡化可用histeq( )函数实现等。
2.图像的矩阵表示及基本运算
MATLAB在处理图像时,都以向量,矩阵,数组来形式来表示图像,并进行各种运算。MATLAB还提供了图像的和、差等线性运算,以及卷积、相关、滤波等非线性运算。例如用数组来形式来表示灰度图像时: 如图一所示
图一 数组表示图像
三、常用图像的增强技术
图像增强是数字图像的预处理是为了达到两个目的:一是为了改善图像的视觉效果,提到图像的清晰度;二是增强感兴趣的部分,以提高图像的可懂度。我重点利用数字图像这门课程的原理及算法等理论知识基于直方图的均衡化和规定化处理的图像增强技术基本原理,
图像增强技术有直方图修改、图像平滑滤波、图像锐化等。图像增强技术主要分为两类:频域增强法和空间域增强法。图像增强包括空域法: 点运算(灰度级处理、直方图处理)与滤波运算(平滑滤波、锐化滤波)和频域法。空间滤波:平滑空间滤波有邻域平均法(均值滤波)、中值滤波 ;锐化空间滤波有梯度运算和拉普拉斯运算等。我依次利用MATLAB对课本上的点运算中的直方图均衡化处理;邻域平均法进行了均值滤波;和图像锐化分别验证并给出了图像与程序。依次为如图二、如图三、如图四所示。
四、图像与程序
1. 直方图均衡化处理:MATLAB源程序如下:
clc;
clear all;
close all;
%较暗图像及其直方图均衡化
f1=imread('e:/gif/lib.gif');
figure(1);
subplot(2,2,1);
imshow(f1);
title('(a)原图像');
subplot(2,2,2);
imhist(f1);
axis off;
title('(b)原图像的直方图');
f2=histeq(f1);
subplot(2,2,3);
imshow(f2);
title('(c)直方图均衡化后的图像');
subplot(2,2,4);
imhist(f2);
axis off;
title('(d)均衡化的直方图');
%较亮图像及其直方图均衡化
f3=imread('e:/gif/shuaige.gif');
figure(2);
subplot(2,2,1);
imshow(f3);
title('(a)原图像');
subplot(2,2,2);
imhist(f3);
axis off;
title('(b)原图像的直方图');
f4=histeq(f3);
subplot(2,2,3);
imshow(f4);
title('(c)直方图均衡化后的图像');
subplot(2,2,4);
imhist(f4);
axis off;
title('(d)均衡化的直方图');
程序运行结果如下:
图二(1)较暗的图像及其直方图均衡化
图二(2)较亮的图像及其直方图均衡化
小结:通过以上两个图的均衡化直方图的对比可得到:较暗图像的对比度低, 较亮图像 对 比度高。与原理相一致。
2.邻域平均法进行了均值滤波:MATLAB源程序如下:
clear all;
close all;
f=imread('e:/gif/lxiaoyuan.gif');
subplot(2,2,1);
imshow(f);
xlabel('(a)原图像');
%图像加噪并显示加噪图像,高斯白噪声 m=0,⊿=0.002
f0=imnoise(uint8(f),'gaussian',0,0.002);
subplot(2,2,2);
imshow(f0);
xlabel('(b)加噪图像');
axis image
h1=[0 1 0;1 1 1;0 1 0]/5;
f1=imfilter(f0,h1,'symmetric','conv');
subplot(2,2,3);
imshow(f1);
xlabel('(c)4-邻域平均滤波');
h2=[1 1 1;1 1 1;1 1 1]/8;
f2=imfilter(f0,h2,'symmetric','conv');
subplot(2,2,4);
imshow(f2);
xlabel('(c)8-邻域平均滤波');
程序运行结果如下:
图三(1) 邻域平均法的均值滤波
3.邻域平均法进行了平均值滤波:MATLAB源程序如下:
MATLAB源程序如下:
n clear all;
close all;
f0=imread('e:/gif/xiaoyuan.gif');
subplot(2,3,1);
imshow(uint8(f0));
xlabel('原图像');
%图象加噪并显示加噪图象,高斯白噪声 m=0,⊿=0.002
f1=double(imnoise(f0,'gaussian',0,0.002));
subplot(2,3,3);
imshow(uint8(f1));
xlabel('(a)加噪声图像');
f2=double(imnoise(f0,'gaussian',0,0.002));
f3=double(imnoise(f0,'gaussian',0,0.002));
f4=double(imnoise(f0,'gaussian',0,0.002));
fnew1=(f1+f2+f3+f4)/4;
subplot(2,3,4);
imshow(uint8(fnew1));
xlabel('(b)4幅图像平均');
f5=double(imnoise(f0,'gaussian',0,0.002));
f6=double(imnoise(f0,'gaussian',0,0.002));
f7=double(imnoise(f0,'gaussian',0,0.002));
f8=double(imnoise(f0,'gaussian',0,0.002));
fnew2=(f1+f2+f3+f4+f5+f6+f7+f8)/8;
subplot(2,3,5);
imshow(uint8(fnew2));
xlabel('(c)8幅图像平均');
f9=double(imnoise(f0,'gaussian',0,0.002));
f10=double(imnoise(f0,'gaussian',0,0.002));
f11=double(imnoise(f0,'gaussian',0,0.002));
f12=double(imnoise(f0,'gaussian',0,0.002));
f13=double(imnoise(f0,'gaussian',0,0.002));
f14=double(imnoise(f0,'gaussian',0,0.002));
f15=double(imnoise(f0,'gaussian',0,0.002));
f16=double(imnoise(f0,'gaussian',0,0.002));
fnew3=(f1+f2+f3+f4+f5+f6+f7+f8+f9+f10+f11+f12+f13+f14+f15+f16)/16;
subplot(2,3,6);
imshow(uint8(fnew3));
xlabel('(d)16幅图像平均');
程序运行的结果:
图三(2) 邻域平均法的平均值滤波
小结:通过以上两组图是简单滤波的两种方法;是模糊处理和减小噪声;适用于均值为零的噪声;由图二(1)知随着邻域的加大,效果越好;有图二(2)知随着图像的增多,效果越接近原图;同样噪声下:图二(1)比图二(2)的滤波效果好;其缺点:模糊边缘和其他尖锐的图像特征。与原理相一致。
4.图像的锐化:这种滤波器必须满足滤波器的中心系数为正数,其他系数为负数。线性高通滤波器3×3模板的典型系数
MATLAB源程序如下:
clear all;
close all;
f=imread('e:/gif/shuaige.jpg');
subplot(2,2,1);
imshow(f);