MATLAB处理数字图像的方法研究
2009-06-22关雪梅
关雪梅
[摘要]简述数字图像处理、MATLAB软件及两者之间的关系,针对数字图像处理技术的特点及MATLAB语言的应用环境、分析具体的用Matlab来处理图像的方法,实现数字图像处理与姒TLAB之间的有机结合。
[关键词]Matlab图像处理图像变换图像增强边缘检测图像分割
中图分类号:TP3文献标识码:A文章编号:1671—7597(2009)1020058--02
一、引言
数字图像数据量庞大,必须借助适当的开发工具。Microsoft公司的Vc++是一种具有高度综合性能的软件开发工具,用它开发出来的程序有着运行速度快、可移植能力强等优点。所以很多科研工作者首选vc++作为数字图像处理的开发工具。但是YC++复杂难学,难以在短期内熟练掌握,这成为众多《数字图像处理》学习者的一个瓶颈。MATLAB是由MatbWorks公司开发的一种可视化科学计算软件,其内容涉及矩阵理论、范函分析、数学物理方程、数值分析、微积分、有限元、小波分析等应用数学各个分支,因此,MATLAB的应用几乎涵盖了所有工程领域。MATLAB已经是数字图像处理、计算机图形学、电子线路、电机学、自动控制、通信技术、物理、力学等领域的科研人员所必须掌握的一种程序设计语言。
MTLAB不仅具有面向对象的计算机语言特征,而且初具面向任务的计算机语言的思想。本文从实际应用的角度介绍如何利用MATLAB进行图像的处理和分析[2]。
二、MATLAB的特点
一种语言之所以如此迅速地普及,显示出如此旺盛的生命力,是由于它有着不同于其它语言的特点。正如同Fortran和C等高级语言使人们摆脱了需要直接对计算机硬件资源进行操作一样,被称为第4代计算机语言的MATLAB,利用其丰富的函数资源,使编程人员从繁琐的程序代码中解放出来。
(一)功能强大
MATLAB具有功能强劲的工具箱,其包含两个部分:核心部分和各种可选的工具箱。核心部分中,有数百个核心内部函数。其工具箱又可分为两类:功能性工具箱和学科性工具箱。功能性工具箱主要用来扩充其符号计算功能、图示建模仿真功能、文字处理功能以及与硬件实时交互功能。功能性工具箱能用于多种学科,而学科性工具箱是专业性比较强的,例如control toolbox,image processingtoolbox,signal processingtoo]box等。这些工具箱都是由该领域内的学术水平很高的专家编写的,所以用户无需编写自己学科范围内的基础程序,就能够直接进行高、精、尖的研究。
(二)界面友好,编程效率高
MATLAB突出的特点就是简洁。它用更直观的、符合人类思维习惯的代码代替了C和Fortran语言的冗长代码,给用户带来的是最直观、最简洁的程序开发环境。MATLAB语言简洁紧凑,使用方便灵活,库函数极其丰富,程序书写形式自由,利用其丰富的库函数避开繁杂的子程序编程任务,压缩了一切不必要的编程工作。由于库函数都是由本领域的专家编写的,因此用户不必担心函数的可靠性。可以说,用MATLAB进行科学开发是站在专家的肩膀上来完成的。
(三)开放性强
MATLAB有很好的可扩充性,可以把它当成一种更高级的语言去使用。各种工具箱中的函数可以互相调用,也可以由用户更改。MATLAB支持用户对其函数进行二次开发,用户的应用程序可以作为新的函数添加到相应的工具箱中。
三、MATLAB的主要功能
MATIAB之所以成为世界顶级的科学计算与数学应用软件,是因为它随着版本的升级与不断完善而具有越来越强大的功能。
1、数值计算功能
姒TLAB出色的数值计算功能是使之优于其他数学应用软件的决定性因素之一。
2、符号计算功能
MATLAB符号运算的独特之处:无需事先对变量赋值,而所得的结果以标准的符号形式表达,符号计算的整个过程以字符进行。
3、数据分析功能
MATLAB可以将计算数据以二维、三维乃至四维的图形表现。这不仅使数据间的关系清晰、明了,而且对于揭示其内在本质有着非常重要的作用。
4、动态仿真功能
MATLAB提供了一个模拟动态系统的交互程序SIMULI Nl(,用户通过简单的鼠标操作,就可建立起直观的系统模型,并进行仿真。
5、图形文字统一处理功能
MATLAB Notebook成功地将Microsoft Work与MATLAB集成为一个整体,为文字处理、科学计算、工程设计营造了一个完美、统一的工作环境。它既拥有Word强大的文字处理功能,又能通过Word访问MATLAB的数据计算和可视化结果[3]。
四、利用MATLAB进行图像处理
数字图像研究的领域非常广泛,从学科上可以分为图像的数字化、图像变换、图像增强、图像恢复、图像分割、图像分析和理解、图像的压缩等[4]。MATLAB6,x提供了20类图像处理函数,涵盖了图像处理包括近期研究成果在内的几乎所有的技术方法,是学习和研究图像处理的人员难得的宝贵资料和加工工具箱[5]。
(一)常用图像撮作
1、图像类型转换
MATLAB图像处理工具箱支持4种圉像类型,分别为真彩色图像(RGB)、索引色图像、灰度图像(I)和二值图像(BW)。由于有的函数对图像类型有限制,因此这4种类型可以用工具箱的类型转换函数相互转换。MATLAB可操作的图像文件包括BMP,HDF,JPEG,PCX,TIFF和XWD等格式。例如,要对一幅索引色图像滤波,首先应该将它转换成真彩色图像或者灰度图像,这时MATLAB将会对图像的灰度进行滤波,即通常意义上的滤波。如果不将索引色图像进行转换,MATLAB则对图像调色板的序号进行滤波,这是没有意义的。
2、图像文件的读写与显示操作
MATLAB为用户提供了专门的函数,以从图像格式的文件中读写图像数据。imread()函数用于读入各种图像文件,imwrite()函数用于输出图像,imfinfo()函数用于读取图像文件的有关信息。
把图像显示于屏幕有imread()、image()等函数。用subplot()函数能将一个图像窗口分成几个部分,但同一个图像窗口内只能有一个调色板。subimage函数可在一个图像窗口内使用多个调色板,使得各种图像能在同一个图像窗口中显示,用zoom()函数可实现对图像的缩放。
3、其它常用图像操作
图像的插值缩放可用imresize()函数实现。在对数字图像进行旋转时,各像素的坐标将会发生变化,使得旋转之后不能正好落在整数坐标
处,需要进行插值,imrotate()函数可实现插值旋转。用lmcrop()函数可剪切图像中的一个矩形子图。
(二)图像变换功能
在图像处理技术中,图像的(正交)变换技术有着广泛的应用,是图像处理的重要工具。通过变换图像,改变图像的表示域及表示数据,可以给后续工作带来极大的方便。常运用于图像压缩、滤波、编码和后续的特征抽取或信息分析过程。例如,傅立叶变换(Fourier Transform)可使处理分析在频域中进行,使运算简单;而离散余弦变换(Discrete CosineTransform)可使能量集中在少数数据上,从而实现数据压缩,便于图像传输和存储。
1、傅立叶变换
在图像处理的广泛应用领域中,傅立叶变换起着非常重要的作用,具体表现在包括图像分析、图像增强及图像压缩等方面。利用计算机进行傅立叶变换的通常形式为离散傅立叶变换,采用这种形式的傅立叶变换有以下两个原因:一是离散傅立叶变换的输入和输出都是离散值,适用于计算机的运算操作:二是采用离散傅立叶变化变换,可以应用快速傅立叶变换来实现,提高运算速度。在MATLABI具箱中,提供了fft2()和ifft2()函数用于计算二维快速傅立叶变换及其逆变换,fftn()和ifftn()函数用于计算n维傅立叶变换和逆变换。
2、离散余弦变换
在图像处理工具箱中,dct2()和idct2()函数实现二维离散余弦变换及逆变换。大多数情况下,DCT(Discrete Cosine Transform)用于压缩图像,JPEG图像格式就采用了DCT算法。在]PEG图像压缩算法中,图像被分成8×8或者16×16的图像块,然后对每个图像块进行DCT变换。DCT变换被量化、编码及传输。在接收端,量化的DCT系数被解码,并用来计算每个图像块的逆DCT变换,最后把各图像块拼接起来构成一幅图像。对一幅典型的图像而言,许多DCT变换的系数近似为0,把它们去掉并不会明显影响重构图像的质量。
3、radon变换
图像处理工具箱的radon()函数用来计算指定方向上图像矩阵的投影,二元函数f(x,y)的投影是在某一方向上的线积分。例如,f(x,y)在垂直方向上的线积分是f(x,y)在x方向上的投影,在水平方向上的积分是在y方向上的投影。用iradon()函数可实现逆radon变换,并经常用于投影成像中,这个变换能把radon变换反变换回来,因此可以从投影数据重建原始图像。而在大多数应用中,没有所谓的用原始图像来计算投影。例如,x射线吸收重建,投影是通过测量x射线辐射在不同角度通过物理切片时的衰减得到的。原始图像可以认为是通过切面的截面。这里,图像的密度代表切片的密度。投影通过特殊的硬件设备获得,而切片内部图像通过iradon重建。这可以用来对活的生物体或者不透明物体实现无损成像。
4、离散小波变换
离散小波变换是对连续小波变换的尺度和位移按照2的幂次进行离散化得到的,又称二进制小波变换。实际上,人们是在一定尺度上认识信号的。人的感官和物理仪器都有一定的分辨率,对低于一定尺度的信号的细节是无法认识的。因此对低于一定尺度信号的研究也是没有意义的。为此,应该将信号分解为对应不同尺度的近似分量和细节分量。小波分解的意义就在于能够在不同尺度上对信号进行分析,而且对不同尺度的选择可以根据不同的目的来确定。信号的近似分量一般为信号的低频分量,其细节分量一般为信号的高频分量。因此,对信号的小波分解可以等效于信号通过了一个滤波器组,其中一个滤波器为低通滤波器,另一个为高通滤波器。MATLABT具箱中的dwt()和idwt()函数可实现一维离散小波变换及其反变换,wavedec()和waverec()用于一维信号的多层小波分解和多层重构等。
(三)图像增强功能
图像增强是数字图像处理过程中常用的一种方法,目的是采用一系列技术去改善图像的视觉效果或将图像转换成一种更适合于人眼观察和机器自动分析的形式。常用的图像增强方法有以下几种。
1、灰度直方图均衡化
均匀量化的自然图像的灰度直方图通常在低灰度区间上频率较大,使得图像中较暗区域中的细节看不清楚。采用直方图修整可使原图像灰度集中的区域拉开或使灰度分布均匀,从而增大反差,使图像的细节清晰,达到增强目的。直方图均衡化可用histeq()函数实现。
2、灰度变抉法
照片或电子方法得到的图像,常表现出低对比度(即整个图像偏亮或偏暗),为此需要对图像中的每一像素的灰度级进行灰度变换,扩大图像灰度范围,以达到改善图像质量的目的。这一灰度调整过程可用imadjust()函数实现。
3、平滑与锐化滤波
平滑技术用于平滑图像中的噪声,基本采用在空间域上的求平均值或中值,或在频域上采取低通滤波。在灰度连续变化的图像中,通常认为与相邻像素灰度相差很大的突变点为噪声。灰度突变代表了一种高频分量,低通滤波则可以削弱图像的高频成分,平滑了图像信号,但也可能使图像目标区域的边界变得模糊。而锐化技术采用的是频域上的高通滤波方法,通过增强高频成分减少图像中的模糊,特别是模糊的边缘部分得到了增强,但同时也放大了图像的噪声。在MATLAB中,各种滤波方法都是在空间域中通过不同的卷积模板(即滤波算子)实现,可用fspecial()函数创建预定义的滤波算子,然后用filter()或cony2()函数在实现卷积运算的基础上进行滤波。
(四)边缘检测和图像分割功能
边缘检测是一种重要的区域处理方法。边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景区分开来。边缘检测是利用物体和背景在某种图像特性上的差异来实现的,这些差异包括灰度、颜色或者纹理特征。实际上,就是检测图像特性发生变化的位置。边缘检测包括两个基本内容:一是抽取出反映灰度变化的边缘点;二是剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线。如果一个像素落在边界上,那么它的邻域将成为一个灰度级变化地带。对这种变化最有用的两个特征是灰度的变化率和方向。边缘检测算子可以检查每个像素的邻域,并对灰度变化率进行量化,也包括对方向的确定,其中大多数是基于方向导数掩模求卷积的方法。MATLABI具箱提供的edge()函数可针对sobel算子、prewltt算子、Roberts算子、LoG算子和canny算子实现检测边缘的功能。基于灰度的图像分割方法也可以用简单的MATLAB代码实现。
五、结束语
本文主要是研究分析了用Matlab来进行图像处理的方法。利用MATLAB语言及其所提供的函数进行图像处理,编程简单、操作方便、可靠性强,能够达到预期的效果。MATLAB2:具箱功能非常强大,简化了繁琐的数学计算工作,有效的促进了数字图像处理相关的研究开发工作。