基于MATLAB的数字图像处理毕业设计(含源文件

摘 要

图像信息是人类获取信息的重要来源及利用信息的重要手段,图像处理科学技术是科学研究、社会生产及人类生活中不可缺少的强有力工具。在信息社会中,数字图像处理科学在理论或实践上都存在着巨大的潜力。

数字图像处理是一种通过计算机采用一定的算法对图形图像进行处理的技术。数字图像处理技术已经在各个领域上都有了比较广泛的应用。图像处理的信息量很大,对处理速度的要求也比较高。MATLAB强大的运算和图形展示功能,使图像处理变得更加的简单和直观。

本文介绍了MATLAB软件,基于MATLAB的数字图像处理环境和如何利用MATLAB及其图像处理工具箱进行数字图像处理。主要论述了利用MATLAB实现二值图像分析、图像增强、图像复原等图像处理。

关键词:MATLAB,数字图像处理,图像增强,二值图像,图像复原

目录

第1章 绪论

1.1 课题研究的目的及意义

1.2 国内外研究现状

1.3 课题内容安排

第2章 数字图像处理的简介

2.1 图像的数字化过程

2.2 数字图像处理的基本内容

2.2.1基本概念

2.2.2 数字图像处理的主要内容

2.3 数字图像处理的特点和应用

2.3.1 数字图像处理的特点

2.3.2 数字图像处理的应用

2.4 数字图像类型

2.5 主要图像文件格式

第3章 MATLAB仿真软件的简介

3.1 MATLAB的历史背景

3.2 MATLAB简介

3.3 MATLAB的特点

3.4 MATLAB在数字图像中的运用

第4章 二值图像分析

4.1 二值图像的实现

4.2 二值形态学的基本运算

4.2.1 膨胀

4.2.2 腐蚀

4.3 二值分析进行图像处理综合应用

4.3.1 噪声滤除

4.3.2 边缘提取

4.3.3 特征提取

第5章 图像增强

5.1 空域变换增强

5.1.1 增强对比度(线性变换)

5.1.2 图像求反

5.2 空域滤波增强

5.2.1原理

5.2.2 线性平滑滤波器(领域均值法)

5.2.3 非线性平滑滤波器(中值滤波法)

5.2.4 锐化滤波器

第1章 绪论

    本章主要介绍课题研究的目的及意义,该课题国内外研究现状以及论文内容安排等。

1.1 课题研究的目的及意义

    数字图像处理(Digital Image Processing),就是利用数字计算机或者其他数字硬件,对从图像信息转换而得到的电信号进行某些数学运算,以提高图像的实用性。例如从卫星图片中提取目标物的特征参数,三维立体断层图像的重建等。总的来说,数字图像处理包括点运算、几何处理、图像增强、图像复原、图像形态学处理、图像编码、图像重建、模式识别等。

由于计算机处理能力的不断增强,数字图像处理学科在飞速发展的同时,也越来越广泛地向许多其他学科快速交叉渗透,使得图像作为信息获取以及信息的利用等方面也变得越来越重要。目前数字图像处理的应用越来越广泛,已经渗透到工业、医疗保健、航空航天、军事等各个领域,在国民经济中发挥越来越大的作用。

MathWorks公司推出的MATLAB软件是学习数理知识的好帮手。应用MATLAB友好的界面和丰富、实用、高效的指令及模块,可以使人较快地认识、理解图像处理的相关概念,逐步掌握图像信号处理的基本方法,进而能够解决相关的工程和科研中的问题。

图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面。随着人类活动范围的不断扩大,图像处理的应用领域也将随之不断扩大,数字图像处理对人类的作用将是不可限量[1]

1.2 国内外研究现状

数字图像处理起源于20世纪20年代。当时,人们通过Bartlane海底电缆图片传输系统,从伦敦到纽约传输了一幅经过数字压缩后的照片,从而把传输时间从一周多缩短到不足三个小时。为了传输图片,该系统在传输端进行了图像编码,然后在接收端用特殊打印设备重构了该图片。尽管这一应用包含了数字图像处理的知识,但是并没有使用计算机。而数字图像处理需要很大的存储空间和计算能力,其发展受到计算机中数据存储、显示和传输等相关技术发展的制约[2]

20世纪50年代,当时的电子计算机已经发展到一定水平,人们开始利用计算机来处理图形和图像信息。

20世纪60年代初期数字图像处理作为一门学科大约形成第一台可执行图像处理任务的大型计算机出现。早期的图像处理的目的是改善图像的质量,它以人为对象,以改善人的视觉效果为目的。图像处理中,输入的是质量低的图像,输出的是改善质量后的图像,常用的图像处理方法有图像增强、复原、编码、压缩等首次获得实际成功应用的是美国喷气推进实验室(JPL)。他们对航天探测器徘徊者7号在1964年发回的几千张月球照片使用了图像处理技术,如几何校正、灰度变换、去除噪声等方法进行处理,并考虑了太阳位置和月球环境的影响,由计算机成功地绘制出月球表面地图,获得了巨大的成功。随后又对探测飞船发回的近十万张照片进行更为复杂的图像处理,以致获得了月球的地形图、彩色图及全景镶嵌图,获得了非凡的成果,为人类登月创举奠定了坚实的基础,也推动了数字图像处理这门学科的诞生。在以后的宇航空间技术,如对火星、土星等星球的探测研究中,数字图像处理技术都发挥了巨大的作用。

20世纪60年代末70年代初,数字图像处理技术应用于医学图像、地球遥感监测和天文学等诸多领域。1972年英国EMI公司工程师Housfield发明了用于头颅诊断的X射线计算机断层摄影装置,也就是我们通常所说的CT(Computer Tomograph)。CT的基本方法是根据人的头部截面的投影,经计算机处理来重建截面图像,称为图像重建。1975年EMI公司又成功研制出全身用的CT装置,获得了人体各个部位鲜明清晰的断层图像。1979年,这项无损伤诊断技术获得了诺贝尔奖,说明它对人类作出了划时代的贡献。1972年美国陆地资源卫星(Landsat)将多谱图像用于资源探测。同年,计算机层析仪(CT)问世,它将图像重建技术用于医学[3]

20世纪70年代中期开始,随着计算机技术和人工智能、思维科学研究的迅速发展,数字图像处理向更高、更深层次发展。人们已开始研究如何用计算机系统解释图像,实现类似人类视觉系统理解外部世界,这被称为图像理解或计算机视觉。很多国家,特别是发达国家投入更多的人力、物力到这项研究,取得了不少重要的研究成果。其中代表性的成果是70年代末MIT的Marr提出的视觉计算理论,这个理论成为计算机视觉领域其后十多年的主导思想。图像理解虽然在理论方法研究上已取得不小的进展,但它本身是一个比较难的研究领域,存在不少困难,因人类本身对自己的视觉过程还了解甚少,因此计算机视觉是一个有待人们进一步探索新的领域。

1.3 课题内容安排

本文主要以MATLAB为工具来实现数字图像的处理。全文共分7章,内容安排如下:

第一章 绪论,介绍了课题研究目的及意义和国内外研究现状。

第二章 介绍了图像的数字化、数字图像处理的基本知识和图像文件格式。

第三章 介绍了Matlab仿真软件。

第四章 介绍了二值图像操作原理及利用MATLAB实现二值图像操作。

第五章 介绍了图像增强的原理及利用MATLAB 来实现图像增强。

第六章 介绍了图像复原原理及利用MATLAB实现图像复原。

第七章 总结与展望。

第2章 数字图像处理的简介

2.1 图像的数字化过程

图像的数字化过程就是在计算机内生成一个二维矩阵的过程。数字化的目的是将一幅图像以数字的形式进行表示,并且要做到既不失真又便于计算机进行处理。图像的数字化要求是要达到以最小的数据量不失真地描述图像信息。数字图像(digital imagine)和传统的图像即模拟图像(picture)是有差别的。

图像的数字化包括采样和量化两个过程。

1.采样

采样(sampling)就是把在时间上和空间上连续的图像分割成离散点(采样点,即像素)的集合的一种操作。

采样是对图像空间坐标的离散化,它决定了图像的空间分辨率。采样越细,越能精确地表现图像。

图像基本上是在二维平面上连续分布的信息形式要把它输入到计算机中,首先要把二维信号变成一维信号,因此要进行扫描(scanning)。最常用的扫描方法是在二维平面上按一定间隔顺序地从上方顺序地沿水平方向的直线(扫描线)扫描,从而取出浓淡值(灰度值)的线扫描(Laster扫描)。对于由此得到的一维信号,通过求出每一特定间隔的值,可以得到离散的信号。对于运动图像除进行水平,垂直两个方向的扫描以外,还有进行时间轴上的扫描。

通过采样,如设横向的像素数为M,纵向的像素数为N,则画面的大小可以表示为“M*N”个像素。

一般来说,图像中细节越多,采样的间隔应当越小。

2.量化

如果把这些连续变化的值(灰度值)量化为8bit,则灰度值被分成0-2552的256个级别,分别对应于各个灰度值的浓淡程度,叫做灰度等级或灰度标度。经过采样,图像被分解成在时间上和空间上离散分布的像素,但是像素的值(灰度值)还是连续值。像素的值,是指白色-灰色-黑色的浓淡值,有时候也指光的强度(亮度)值或灰度值。把这些连续的浓淡值或灰度值变为离散的值(整数值)的操作就是量化。

在0-255的值对应于白-黑的时候,有以0为白,255为黑的方法,也有以0为黑,255为白的方法,这取决于图像的输入方法以及用什么样的观点对图像进行处理等,这是在编程时应特别注意的问题。但在只有黑白二值的二值图像的情形,一般设0为白,1为黑[4]

量化的方法有:

(1) 分层量化(Hierarchical quantization)

(2) 均匀量化(Uniform quantization)

(3) 非均匀量化(Non-uniform quantization)

分层量化是把每一个离散样本的连续灰度值分成有限多的层次。均匀量化是把源图像灰度层次从最暗至最亮均匀分为有限层次,如果采用不均匀分层就是非均匀量化。

对连续的灰度值赋予量化级的,即灰度值方法有:等间隔量化(Equal interval quantization)和非等间隔量化(Non equal interval quantization)。等间隔量化是简单地把采样值的灰度范围等间隔地分割并进行量化。非均匀量化是依据一幅图像具体的灰度值分布的概率密度函数,按总的量化误差的最小的原则来进行量化。实用中一般采用等间隔量化[5]

3. 采样、量化和图像细节的关系

上面的数字化过程,需要确定数值N和灰度级的级数K。在数字图像处理中,一般都取成2的整数幂,即:

                                   

                            (2-1)    

                                   

                            (2-2)       

    一幅数字图像在计算机中所占的二进制存储位数b为:

                           

                (2-3)   

例如,灰度级为256级(m=8)的512×512的一幅数字图像,需要大约210万个存储位。随着N和m的增加,计算机所需要的存储量也随之迅速增加。

由于数字图像是连续图像的近似,从图像数字化的过程可以看到。这种近似的程度主要取决于采样样本的大小和数量(N值)以及量化的级数K(或m值)。N和K的值越大,图像越清晰[6]

2.2 数字图像处理的基本内容

2.2.1基本概念

数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。相对于以往的数字图像处理方法,数字图像处理是一次新的“工业革命”,它彻底改变了以往人们处理图像时所采用的手段,成为图像处理中一个崭新的方向。

数字图像处理的产生和迅速发展主要受三个因素的影响:一是计算机的发展;二是数学的发展(特别是离散数学理论的创立和完善);三是广泛的农牧业、林业、环境、军事、工业和医学等方面的应用需求的增长[7]

2.2.2 数字图像处理的主要内容

从系统整体研究的角度来看,数字图像处理的研究内容主要包括以下几个方面:图像的获取、表示与表现,图像增强、图像复原、图像分割、图像分析、图像重建及图像编码压缩等。其中,数字图像处理包括:算术/逻辑操作和几何运算、图像增强、图像分割、图像形态学处理、模式识别、图像复原、图像压缩等内容。

(1)算术/逻辑操作

图像中的算术/逻辑操作主要以像素对像素为基础在两幅或多幅图像间进行(其中不包含逻辑非操作,它在单一影像中进行)。

对图像的逻辑操作同样也是基于像素的。“与或非”这三种逻辑算子完全是函数化的。当我们对灰度级图像进行逻辑操作时,像素值作为一个二进制的字符串来处理。

在四种算术操作中,减法与加法在图像处理中最有用。我们简单的把两幅图像想除看成是用一副的取反图像与另一幅图像相乘。在四种代数运算操作中加法运算可用于降低图像中加性随机噪声的污染;减法运算则可以检测图像中物体的运动变化;乘法运算可用于标记图像中的感兴趣区域;除法运算则经常用于多光谱遥感图像的分析处理,以扩大不同物体之间的差异。

  1. 几何变换

几何运算用于改变图像中像素与像素之间的空间位置关系,从而改变图像的空间结构,达到处理图像的目的。简单而言,图像几何变换就是建立一种源图像像素与变换后的图像像素之间的映射关系。主要包括图像的平移、缩放、旋转、镜像和转置变换等。   

(3)图像增强

图像增强是图像处理最关键的研究问题之一,图像增强按作用域可分为两类,即空域处理和频域处理。空域处理是直接对图像进行处理,而频域处理则是在图像的某个变化域内,对图像的变换系数进行运算,然后通过逆变换获得图像增强效果。图像增强可以突出图像中的某些“有用”信息,扩大图像中不同物体特征之间的差别,改善图像的视觉效果。图像增强的算法包括直方图增强,空域滤波增强,频域滤波增强和彩色增强等。

(4)图像分割

图像分割将图像细分为构成它的子区域或对象。图像分割算法一般基于亮度值的两个基本特性之一:不连续性和相似性。第一类方法基于亮度的不连续变化分割图像,比如图像的边缘。第二类方法依据事先制定的准则将图像分割为相似的区域。图像分割包括间断检测,边缘检测,门限处理等。

(5)图像形态学处理

图像形态学由一组形态学代数算子组成,最基本的形态学代数算子包括腐蚀、膨胀、开运算、闭运算等,通过组合应用这些算子,可以实现对图像形状、结构的分析和处理。数学形态学可以完成图像分割、特征提取、边界检测、图像滤波、图像增强和恢复等工作。

(6)模式识别

模式识别总是从大量信息和数据出发,在一定的经验和认识基础上,利用计算机和数学的推理的方法对信息进行自动识别。模式识别系统一般包括4个部分,即数据获取、预处理、特征提取和决策分类。

(7)图像复原(恢复)

由于设备造成的扫描线漏失、错位等各种原因不可避免造成图像质量的下降(退化)。图像的复原就是根据事先建立起来的系统退化模型,将降质了的图像重建成接近于或完全无退化的原始理想图像的过程。

(8)图像压缩

数字图像的数据量是很巨大的,然而数字图像实际上又具有很大的压缩潜力。图像压缩所解决的问题是尽量减少表示数字图像时所需的数据量。减少数据量的基本原理是出去其中的冗余数据。这种变换在图像存储或传输之前进行。在以后的某个时候,再对压缩图像进行解压缩,以重构原图像或原图像的近似图像[8]。

2.3 数字图像处理的特点和应用

2.3.1 数字图像处理的特点

(1)优点: 1.再现性好

           2.处理精度高

           3.适用面宽

           4.灵活性高

(2)缺点:1.处理信息量大

           2.占用频带较宽

           3.像素间相关性大

           4.无法复制三维景物的全部几何信息

           5.人为因素影响较大[9]

2.3.2 数字图像处理的应用

计算机图像处理和计算机、多媒体、智能机器人、专家系统等技术的发展紧密相关。近年来计算机识别、理解图像的技术发展很快,也就是图像处理的目的除了直接供人观看(如医学图像是为医生观看作诊断)外,还进一步发展了与计算机视觉有关的应用,如邮件自动分检,车辆自动驾驶等。下面仅罗列了一些典型应用实例,而实际应用更广。

(1)在生物医学中的应用

主要包括显微图像处理;DNA显示分析;红、白血球分析计数;虫卵及组织切片的分析;癌细胞的识别;染色体分析等等。

(2)遥感航天中的应用

军事侦察、定位、导航、指挥等应用;多光谱卫星图像分析;地形、地图、国土普查;地质、矿藏勘探;天文、太空星体的探测及分析等。

(3)工业应用

CAD 和CAM技术用于模具、零件制造、服装、印染业;零件、产品无损检测,焊缝及内部缺陷检查;交通管制、机场监控;火车车皮识别等。

(4)军事公安领域中的应用

巡航导弹地形识别;指纹自动识别;警戒系统及自动火炮控制;反伪装侦察;手迹、人像、印章的鉴定识别;过期档案文字的复原;集装箱的不开箱检查等。

(5)遥感上的应用

在遥感的发展中,可以看到大量与图像处理密切相关的技术。如在20世纪70年代美国发射的第一颗陆地卫星就是通过对获取的遥感图片进行处理后达到上述目的的。随后美国发射了海洋卫星、气象卫星和军用卫星,从而获取了大量遥感资料。此图像处理广泛应用于土地测绘、资源调查、气象监测、环境污染监测、森林防护等。

(6)其他应用

图像的远距离通信;多媒体计算机系统及应用;电视电话;服装试穿显示;理发发型预测显示;电视会议;办公自动化、现场视频管理等[10]。

2.4 数字图像类型

MATLAB中,一幅图像可能包含一个数据矩阵,也可能包含一个颜色映射表矩阵。MATLAB中有四种基本的图像类型:

(1)二值图像(二进制图像)

二值图像也叫黑白图像,就是图像像素只存在0、1两个值。一个二值图像是纯黑白的。每一个像素值将取0或者1中的一个值,通常0表示黑,1表示白。

二值图像可以保存为双精度或uint8类型的双精度数组,显然使用uint8类型更节省空间。在图像处理工具箱中,任何一个返回二进制图像的函数都是以uint8类型逻辑数组来返回的。

(2)灰度图像

在MATLAB中,灰度图像是保存在一个矩阵中的,矩阵中的每一个元素代表一个像素点。矩阵可以是双精度类型,其值域为[0,1];也可以为uint8类型,其数据范围为[0,255]。矩阵的每个元素代表不同的亮度或灰度级。

彩色图像转化为灰度图像公式:

                        Y=0.299R+0.578G+0.144B                   (2-4)

(3)索引图像

索引图像包括图像矩阵与颜色图数组,其中,颜色图是按图像中颜色值进行排序后的数组。对于每个像素,图像矩阵包含一个值,这个值就是颜色图中的索引。颜色图为m*3双精度值矩阵,各行分别指定红绿蓝(RGB)单色值。Colormap=[R,G, B],R,G,B为值域为[0,1]的实数值。

图像矩阵与颜色图的关系依赖于图像矩阵是双精度型还是uint8(无符号8位整型)类型。如果图像矩阵为双精度类型,第一点的值对应于颜色图的第一行,第二点对应于颜色图的第二行,依次类推。如果图像矩阵是uint8,有一个偏移量,第0点值对应于颜色图的第一行,第一点对应于第二行,依次类推;uint8长用于图形文件格式,它支持256色。

(4)RGB图像

与索引图像一样,RGB图像分别用红,绿,蓝三个亮度值为一组,代表每个像素的颜色。与索引图像不同的是,这些亮度值直接存在图像数组中,而不是存放在颜色图中。图像数组为M*N*3,M,N表示图像像素的行列数[11]

2.5 主要图像文件格式

(1) JPEG(Joint Photographic Experts Group)格式,是一种成为联合图像专家组的图像压缩格式。文件后缀名为“.jpeg或“.jpg,是最常用的图像文件格式。JPEG是一种有损压缩格式,能够将图像压缩在很小的存储空间内。

(2) TIFF(Tagged Image File Format)格式。它是目前图像文件格式中最复杂的一种。处理1,4,8,24位非压缩图像,1,4,8,24位packbit压缩图像,一位CCITT压缩图像等。且它支持单色到32位真彩色模式的所有图像。文件内容包括:文件头,参数指针表与参数域,参数数据表和图像数据四部分。

(3) BMP(Windows Bitmap)格式。它是一种与硬件设备无关的图像文件格式,使用非常广。有1,4,8,24位非压缩图像,8位RLE(Run-length Encoded )图像。文件内容包括:文件头(一个BITMAP FILEHEADER数据结构),位图信息数据块(位图信息头BITMAP INFOHEADER和一个颜色表)和图像数据。

(4) GIF(Graphics Interchange Format)格式。原义是“图像互换格式”,是CompuServe公司在 1987年开发的图像文件格式。GIF文件的数据,是一种基于LZW算法的连续色调的无损压缩格式。其压缩率一般在50%左右,它不属于任何应用程序。目前几乎所有相关软件都支持它,公共领域有大量的软件在使用GIF图像文件。GIF图像文件的数据是经过压缩的,而且是采用了可变长度等压缩算法。GIF格式的另一个特点是其在一个GIF文件中可以存多幅彩色图像,如果把存于一个文件中的多幅图像数据逐幅读出并显示到屏幕上,就可构成一种最简单的动画。

(5) PCX(Windows Paintbrush)格式。它是最早使用的图像文件格式之一。PCX格式支持256种颜色,不如TIFF等格式功能强,但结构比较简单,存取速度快,压缩比适中,适用于一般软件的使用。可处理1,4,8,16,24位等图像数据。文件内容包括:文件头(128字节),图像数据、扩展颜色映射表数据。

   (6) HDF(Hierarchical Data Format)格式。有8位、24位光栅数据集。

   (7) PNG(Portable Network Graphics):包括1位、2位、4位、8位和16位灰度图像,8位和16位索引图像,24位和48位真彩色图像。

   (8) RAS(Sun Raster image): 有1位bitmap、8位索引、24位真彩色和带有透明度的32位真彩色。

   (9) CO(Windows Icon resource): 有1位、4位、8位非压缩图像[12]

第3章 MATLAB仿真软件的简介

3.1 MATLAB的历史背景

在20世纪70年代中期,Cleve Moler博士和其同事在美国国家科学基金的资助下开发了调用EISPACK和LINPACK的FORTRAN子程序库。EISPACK是特征值求解的FORTRAN程序库,LINPACK是解线性方程的程序库。在当时,这两个程序库代表矩阵运算的最高水平。

到20世纪70年代后期,身为美国New Mexico大学计算机系系主任的Cleve Moler,在给学生讲授线性代数课程时,想教学生使用EISPACK和LINPACK程序库,但他发现学生用FORTRAN编写接口程序很费时间,于是他开始自己动手,利用业余时间为学生编写EISPACK和LINPACK的接口程序。Cleve Moler给这个接口程序取名为MATLAB,该名为矩阵(matrix)和实验室(laboratory)两个英文单词的前三个字母的组合。在以后的数年里,MATLAB在多所大学里作为教学辅助软件使用,并作为面向大众的免费软件广为流传。

1983年春天,Cleve Moler到Stanford大学讲学,MATLAB深深地吸引了工程师John Little。John Little敏锐地觉察到MATLAB在工程领域的广阔前景。同年,他和 Cleve Moler、Sieve Bangert一起,用C语言开发了第二代专业版。这一代的MATLAB语言同时具备了数值计算和数据图示化的功能。

1984年,Cleve Moler和 John Lithe成立了MathWorks公司,正式把MATLAB推向市场,并继续进行MATLAB的研究和开发。

在当今30多个数学类科技应用软件中,就软件数学处理的原始内核而言,可分为两大类。一类是数值计算型软件,如 MATLAB、Xmath、Gauss等,这类软件长于数值计算,对处理大批数据效率高;另一类是数学分析型软件,如Mathematica、Maple等,这类软件以符号计算见长,能给出解析解和任意精度解,其缺点是处理大量数据时效率较低。MathWorks公司顺应多功能需求之潮流,在其卓越数值计算和图示能力的基础上,又率先在专业水平上开拓了其符号计算、文字处理、可视化建模和实时控制能力,开发了适合多学科、多部门要求的新一代科技应用软件MATLAB。经过多年的国际竞争,MATLAB 已经占据了数值型软件市场的主导地位。

在MATLAB进入市场前,国际上的许多应用软件包都是直接以FORTRAN和C语言等编程语言开发的。这种软件的缺点是使用面窄、接口简陋、程序结构不开放以及没有标准的基库,很难适应各学科的最新发展,因而很难推广。MATLAB的出现,为各国科学家开发学科软件提供了新的基础。在MATLAB问世不久的20世纪80年代中期,原先控制领域里的一些软件包纷纷被淘汰或在MATLAB上重建。

时至今日,经过Math Works公司的不断完善,MATLAB已经发展成为适合多学科、多种工作平台的功能强劲的大型软件。在国外,MATLAB已经经受了多年考验。在欧美等高校,MATLAB已经成为线性代数、自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等高级课程的基本教学工具;成为攻读学位的大学生、硕士生、博士生必须掌握的基本技能。在设计研究单位和工业部门,MATLAB被广泛用于科学研究和解决各种具体问题[13]。

3.2 MATLAB简介

    MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。

MATLAB 是MATrix  LABoratory(“矩阵实验室”)的缩写,不仅具备完善的科学计算功能,而且能胜任众多专业领域的仿真和设计任务,甚至能自动生成直接与硬件关联的代码,在图像处理、系统仿真、数字信号处理、自动控制等领域都有着广泛的应用。

MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用CFORTRAN等语言完相同的事情简捷得多。

MATLAB包括拥有数百个内部函数的主包和三十几种工具包(Toolbox)。工具包又可以分为功能性工具包和学科工具包。功能工具包用来扩充MATLAB的符号计算,可视化建模仿真,文字处理及实时控制等功能。学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类。

MATLAB图像处理工具箱包括:

  1. 图像处理工具箱(Image Processing Toolbox)  它为工程师和科学家提供了一套完整的用于图像处理和分析的函数,总共超过了200个图像处理函数,用户只需要花少量的时间在算法编程上,而可以把大量时间用于问题的分析处理上。
  2. 图像获取工具箱(Image Acquisition Toolbox)  它扩展了MATLAB的强大科学计算能力,允许直接在MATLAB环境下通过工业标准硬件设备获取图像和视频信号。
  3. 地图工具箱(Mapping Toolbox)   它与MATLAB组合起来提供了一个完整的分析和显示地理信息的环境,利用该工具箱提供的函数,工程师可以用来分析地理数据,进行地图显示,调用外部地图数据源。

3.3 MATLAB的特点

MATLAB软件具有如下特点:

(1) 它的语言非常接近自然语言,因此,具有一定程序设计基础的人学起来比较容易。运算符丰富,具有结构化的控制语句(如for循环,while循环,break语句和if语句),又有面向对象编程的特性。它的程序限制不严格,程序设计自由度大,而且具有源程序的开放性。

(2) 该软件提供了大量的内部函数,让用户在使用时非常方便,此外,日益庞大的Toolbox更是让该软件的应用领域越来越广泛。

(3) 该软件语言以向量矩阵为着眼点,因此它比较适于进行数值分析。

(4) 它的绘图功能强大,由于MATLAB在世界范围内特别是在工程计算领域的流行,越来越多的人开始青睐并使用这套软件。

(5) MATLAB的缺点是,它和其他高级程序相比,程序的执行速度较慢。由于MATLAB的程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢[14]

3.4 MATLAB在数字图像中的运用

图像处理工具包是由一系列支持图像处理操作的函数组成的。所支持的图像处理操作有:图像的几何操作、邻域和区域操作、图像变换、图像恢复与增强、线性滤波和滤波器设计、变换(DCT变换等) 、图像分析和统计、二值图像操作等。下面就MATLAB 在图像处理中各方面的应用分别进行介绍。

 (1) 图像文件格式的读写和显示。MATLAB 提供了图像文件读入函数 imread(),用来读取如:bmp、tif、tiffpcx 、jpg 、gpeg 、hdf、xwd等格式图像文;图像写出函数 imwrite() ,还有图像显示函数 image()、imshow()等等。

 (2) 图像处理的基本运算。MATLAB 提供了图像的和、差等线性运算 ,以及卷积、相关、滤波等非线性算。例如,conv2(I,J)实现了I,J两幅图像的卷积。

(3) 图像变换。MATLAB 提供了一维和二维离散傅立叶变换(DFT) 、快速傅立叶变换(FFT) 、离散余弦变换 (DCT) 及其反变换函数,以及连续小波变换(CWT)、离散小波变换(DWT)及其反变换。

(4) 图像的分析和增强。针对图像的统计计算MATLAB 提供了校正、直方图均衡、中值滤波、对比度调整、自适应滤波等对图像进行的处理。

(5) 图像的数学形态学处理。针对二值图像,MATLAB 提供了数学形态学运算函数;腐蚀(Erode)、膨胀(Dilate)算子,以及在此基础上的开 (Open)、闭(Close)算子、厚化 (Thicken) 、薄化 (Thin) 算子等丰富的数学形态学运算。

(6) 此外,还有一些重要的函数在MATLAB中的应用:

 ① 使用imnoise添加噪声。

 ② 使用imfinfo用于图像文件信息查询。

 ③ 使用montage函数来显示多帧图像阵列。

 ④ 使用immovie函数显示多帧图像阵列中创建MATLAB电影动画。

 ⑤ 使用zoom函数来实现图像上任一区域的缩放。

 ⑥ 使用warp函数将图像作为纹理进行映射。

 ⑦ 使用subimage函数在一个图像窗口中显示多幅图像。

    以上所提到的 MATLAB在图像中的应用都是由相应的MATLAB函数来实现的,使用时,只需按照函数的调用语法正确输入参数即可。具体的用法可参考MATLAB丰富的帮助文档。图像边缘对图像识别和计算机分析十分有用,在MATLAB中,函数 edge()用于灰度图像边缘的提取,它支持六种不同的边缘提取方法,即Sobel方法、Prewitt 方法、Robert 方法,Laplacian2Gaussian方法、过零点方法和Canny方法[15]。

第4章 二值图像分析

二值图像中所有的像素只能从0和1这两个值中取,因此在MATLAB中,二值图像用一个由0和1组成的二维矩阵表示。这两个可取的值分别对应于关闭和打开,关闭表征该像素处于背景,而打开表征该像素处于前景。也就是说它指每个像素不是黑就是白,其灰度值没有中间过渡的图像。

二值图像一般用来描述文字或者图形,它的特点:

  1. 优点:占用空间少,更容易识别出图像的结构特征。
  2. 缺点:当表示人物,风景的图像时,二值图像只能描述其轮廓,不能描述细节。这时候要用更高的灰度级。

  二值图像经常使用位图格式存储。

4.1 二值图像的实现

二值图像操作只返回与二值图像的形式或结构有关的信息,如果希望对其他类型的图像进行同样的操作,则首先要将其转换为二进制的图像格式,可以通过调用MATLAB提供的im2bw()来实现,方法如下

MATLAB程序代码:

I=imread('jiafeimao.jpg');

figure,imshow(I);

J=im2bw(I);   %二值化处理

figure,imshow(J);

运行程序,得到图4-1:

                (1) 原图                   (2)二值图像

                          图4-1 图像二值化

4.2 二值形态学的基本运算

数学形态学的基础是集合运算,我们把二值图像A看作是二维坐标点的集合,包含图像里为1的点,B通常是一个小的集合,作用类似于模板。基本运算有:

(1)膨胀(Dilation)运算:定义为A⊕B。

(2)腐蚀(Erosion)运算:定义为A

B。

(3)开(Open)运算: 开运算是先对图像进行腐蚀,然后再进行膨胀的结果。用B对A进行形态学开操作可以记为

,它的定义为(4-1):

                              

                       (4-1)

(4)闭(Close)运算:闭运算是先对图像进行膨胀,然后再进行腐蚀的结果。用B对A进行形态学开操作可以记为

,它的定义为(4-2):

                              

                       (4-2)

4.2.1 膨胀

膨胀的算符为

,A用B来膨胀写作A

B,这里先将A和B看作是所有取值为1的像素点的集合。其定义为:

                          

                   (4-3)

其中

表示集合B的反射,

表示对B的反射进行位移x。A与B的交集不能为空集。

B膨胀A的过程是:先对B做关于中心像素的映射,再将其映像平移x,换句话说,用B来膨胀A得到的集是B平移后与A至少有一个非零元素相交时B的中心像素的位置的集合。

膨胀是使区域从四周向外扩大,给图像中的对象边界添加像素;而腐蚀则是使区域从四周同时向内缩小,删除对象边界某些像素。

在MATLAB中利用imdilate函数来实现膨胀操作。下面用MATLAB例子来说明。

MATLAB膨胀程序代码如下:

clear all;

bw=imread('text.png');

se=strel('line',11,90);

bw2=imdilate(bw,se);

figure;imshow(bw);

figure;imshow(bw2);

运行程序,得到如图4-2:

           (1) 原图                     (2) 图像膨胀

                       图4-2 二值图像膨胀

4.2.2 腐蚀

腐蚀的算符为

,A用B来腐蚀写作A

B。其定义为

                             

                     (4-4)

用B来腐蚀A得到集合是B完全包括在A中时B的中心像素位置(原点位置)的集合。平移后的B与A的背景并不叠加。

在MATLAB图像处理工具箱中提供了imerode函数实现图像的腐蚀操作。

MATLAB二值腐蚀程序代码如下:

clear all;

I=imread('circles.png');

se=strel('disk',11);

J=imerode(I,se);

figure;imshow(I);

figure;imshow(J);

运行程序,得到如图4-3:

           (1) 原图                   (2) 图像腐蚀

                     图4-3 二值图像腐蚀

可以从图4-2中看出膨胀使图像的边界像素增多,区域从四周向外扩大了,造成图像变得模糊了,边界重叠了。从图5-3中看出腐蚀使图像边界像素减少,区域从四周缩小,亮点减少。

4.3 二值分析进行图像处理综合应用

4.3.1 噪声滤除

将开启运算和闭合运算结合起来可构成噪声滤除器。开启就是先对图像进行腐蚀后膨胀的结果。闭合就是先对图像进行膨胀后腐蚀的结果。

开启和闭合这两种运算都可以除去比结构元素小特定图像细节,同时保证不产生全局几何失真。开启运算可以把结构元素小的突刺滤掉,切断细长搭接而起到分离作用。闭合运算可以把比结构元素小的缺口或孔填充上,搭接短的间断而起到连通的作用。开启运算将背景上的噪声去除了;再进行闭合运算则将其他噪声去掉。这样就构成了噪声滤除器,起到了去除噪声的作用。

MATLAB中还提供了预定义的形态函数bwmorph,利用bwmorph(I,'open')可以对I图像进行形态开运算,利用bwmorph(I,'close')可以对I图像进行形态闭运算。

MATLAB噪声去除程序代码如下:

I1=imread('jiafeimao.jpg');

I2=im2bw(I1);

I2=double(I2);

I3=imnoise(I2,'salt & pepper');

I4=bwmorph(I3,'open');

I5=bwmorph(I4,'close');

figure;subimage(I2);

figure;subimage(I3);

figure;subimage(I4);

figure;subimage(I5);

运行程序,得到如图4-4:

               (1) 二值图像                  (2) 加入椒盐噪声的图像

  

 

           (3) 开运算所得图像                (4) 再闭运算所得图像  

                               图4-4 噪声滤除  

 

4.3.2 边缘提取

集合A的边界表示为f(A),它可以通过先由B对A进行腐蚀,然后用A减去腐蚀后的图像得到边缘,即式(4-5):

                          

                        (4-5)

其中,B是一个适当的结构元素。当然,也可以先由B对A膨胀,再用膨胀后的图像减去A得到边缘,即式(4-6):

                          

                       (4-6)

在MATLAB图像处理工具中提供了bwperim函数用于对二值图像进行边缘提取。

MATLAB边缘提取程序代码如下:

I1=imread('jiafeimao.jpg');

I2=im2bw(I1);

I3=bwperim(I2);

subplot(1,2,1);

imshow(I2);

subplot(1,2,2);

imshow(I3);

运行程序,得到如图4-5:

       (1) 二值图像                (2) 边缘处理的图像       

                              图4-5 边缘处理

4.3.3 特征提取

在进行图像处理时,会希望获得图像中改变某些特征的信息,例如,膨胀和腐蚀从定量的角度上来看就是二值图像中各对象面积的增大或者缩小。特征提取包括计算图像面积、欧拉数计算、移除对象、区域填充。在这里着重介绍计算图像面积。

在MATLAB图像处理工具箱中提供了bwarea函数来计算二值图像的面积。面积粗略的说就是图像中前景的像素的个数。

MATLAB边缘提取程序代码如下:

clear all;

I1=imread('jiafeimao.jpg');

I=im2bw(I1);

disp('膨胀前图像面积为:')

bwarea(I)

SE=ones(5);

I2=imdilate(I,SE);

disp('膨胀后图像面积为:')

bwarea(I2)

运行程序,得到如下结果:

膨胀前图像面积为:

ans =

  7.6120e+004

膨胀后图像面积为:

ans =

  8.2933e+004

第5章 图像增强

图像增强是图像处理的主要任务之一,它的目的是采用某种技术手段,改善图像的视觉效果,或将图像转换成更加适合人眼观察和机器分析、识别的形式,以便从图像中获取更有用的信息。图像增强算法的应用是有针对性的,并不存在通用的增强算法。

图像增强的基本方法可以分为两大类:

(1) 空间域方法

空间域是指图像平面自身,这类方法是以对图像的像素直接处理为基础的。它包括空域变换增强、空域滤波增强(包括平滑滤波器和锐化滤波器)。

空域增强方法可表示为(5-1):    

                         g(x,y)=EH[f(x,y)]                         (5-1)

其中f(x,y)和g(x,y)分别为增强前后的图像,EH代表增强操作。

    (2) 频域方法

频率域处理技术是以修改图像的傅里叶变换为基础的,也就是将原来的图像空间中的图像以某种形式转换到其他空间中,然后利用该空间的特有性质方便地进行图像处理,最后再转换回原来的图像空间中,从而得到处理后的图像。它包括低通滤波、高通滤波、同态滤波周围底纹清除滤波(以前两种为主)。

频域增强方法可表示为(5-2): 

                       

                      (5-2)

其中

为滤波器,

 和

 分别为增强前后的图像。

5.1 空域变换增强

5.1.1 增强对比度(线性变换)

对比度增强是增强技术中一种比较简单但又十分重要的方法。这种方法按照一定的规则,逐点修改输入图像每一像素的灰度,从而改变图像灰度的动态范围。其对应的变换图像如图4-1所示。对应的公式为(5-3):

                  

             (5-3)

在图5-1中可以看出,通过变换可以使原图的较高的和较低的灰度值的动态范围减小了,而原图在二者之间的动态范围增加了,从而其范围的对比度增加了[16]

 

图5-1 增强对比度

MATLAB增强对比度程序代码如下:

X1=imread('333.jpg');

figure,imshow(X1)

f0=0;g0=0;

f1=70;g1=30;

f2=180;g2=230;

f3=255;g3=255;

r1=(g1-g0)/(f1-f0);

b1=g0-r1*f0;

r2=(g2-g1)/(f2-f1);

b2=g1-r2*f1;

r3=(g3-g2)/(f3-f2);

b3=g2-r3*f2;

[m,n]=size(X1);

X2=double(X1);

for i=1:m

   for j=1:n

      f=X2(i,j);

      g(i,j)=0;

      if(f>=0)&(f<=f1)

      g(i,j)=r1*f+b1;

      elseif (f>=f1)&(f<=f2)

      g(i,j)=r2*f+b2;

      elseif (f>=f2)&(f<=f3)

      g(i,j)=r3*f+b3;

      end

   end

end

figure,imshow(mat2gray(g))

运行得到如下结果:

 

               图5-2原图                   图5-3 增强对比度后图像

    在MATLAB中还提供了imadjust对比度调整函数,用于调整灰度值或者颜色图,但处理图像只能是灰度图像。MATLAB程序代码如下:

clear all;

I=imread('333.jpg');

subplot(1,2,1);imshow(I);

J=imadjust(I);

subplot(1,2,2);imshow(J);

运行程序得到如下结果图5-4:

         (1) 原始图像              (2) 增强对比度后图像

                        图5-4 增强对比度

5.1.2 图像求反

所谓对图像求反是将原来的灰度值翻转,简单的说就是使黑变白,使白变黑。假设对灰度级范围是[0,L-1]变换到[L-1,0],变换公式为(5-4):

                             

                          (5-4)

这种方法尤其适用于增强嵌入于图像暗色区域的白色或灰色细节。

MATLAB图像求反程序代码如下:

clear all;

I=imread('999.jpg');

figure,imshow(I);

J=double(I);

J=256-1-J;

J=uint8(J);

figure,imshow(J);

运行程序得到如下结果图5-5:

         (1) 原始图像                    (2) 图像求反后图像

                          图5-5 图像其反            

5.2 空域滤波增强

一般情况下,像素的邻域比该像素要大,也就是说这个像素的邻域中除了本身以外还包括其他像素。在这种情况下,g(x,y)在(x,y)位置处的值不仅取决于f(x,y)在以(x,y)为中心的邻域内所有的像素的值。

为在邻域内实现增强操作,常可利用模板与图像进行卷积。每个模板实际上是一个二维数组,其中各个元素的取值定了模板的功能,这种模板操作也称为空域滤波。

仍以s和t分别表示f(x,y)在(x,y)位置处的增强前后的灰度值,并以n(s)代表f(x,y)在(x,y)邻域内像素的灰度值,则 t=EA[s,n(s)]。

5.2.1原理

根据其特点,空域滤波一般可分为线性滤波和非线性滤波两类。线形滤波器的设计常基于对傅立叶变换的分析。非线形空域滤波器则一般直接对邻域进行操作。

另外各种滤波器根据功能又主要分成平滑滤波器和锐化滤波器。平滑可用低通来实现,平滑的目的是模糊和消除噪声。锐化可用高通来实现,锐化的目的是为了增强被模糊的细节。所以共有(非)线性平滑滤波器和(非)线性锐化滤波器四种空间滤波增强方法。

平滑滤波器:它能减弱或消除傅立叶空间的高频分量,但不影响低频分量。因为高频分量对应图像中的区域边缘等灰度值具有较大较快变化的部分,滤波器将这些分量滤去可使图像平滑。

锐化滤波器:它能减弱或消除傅立叶空间的低频分量,但不影响高频分量。因为低频分量对应图像中灰度值缓慢变化的区域,因而与图像的整体特性,如整体对比度和平均灰度值等有关,将这些分量滤去可使图像锐化。

空域滤波器都是利用模板卷积,主要步骤如下:

(1)将模板在图中漫游,并将模板中心与图中某个像素位置重合;

(2)将模板上的系数与模板下对应的像素相乘;

(3)将所有的乘积相加;

(4)将模板的输出响应赋给图中对应模板中心位置的像素。

下面分别介绍在MATLAB中如何应用平滑和锐化滤波器[17]

5.2.2 线性平滑滤波器(领域均值法)

线性平滑滤波可以去除图像中某些类型的噪声,其中领域平均法就是常用的简单空间域线性平滑噪声技术。领域平均法将一个像素及其领域中所有的像素的平均值赋给输出图像中相应的像素,从而达到平滑的目的,又称均值滤波。

对于给定图像f(x,y)中的每个像素点(i,j),设其领域S,S含有M个像素,假定噪声n(x,y)是加性噪声,在空间各点互不相关,且期望为0,方差为

,领域平均处理后的图像为g(x,y),则有(5-5):

               

               (5-5)   

从式子中看出噪声均值不变,噪声方差变小,说明噪声强度减弱了,抑制了噪声。

MATLAB领域平均法程序代码如下:

clear all;

I=imread('rice.png');

J=imnoise(I,'salt & pepper',0.02);

figure,imshow(I);

figure,imshow(J);

K1=filter2(fspecial('average',3),J);%进行3*3模板平滑滤波

K2=filter2(fspecial('average',5),J);%进行5*5模板平滑滤波

figure,imshow(uint8(K1));

figure,imshow(uint8(K2));

运行程序,得到如下结果图5-6:

从程序运行后的结果看出,模板越大,去噪能力越强,但同时会让图像变得模糊。

             (1) 原图                   (2) 加入椒盐噪声的图像

    (3) 3*3模板平滑滤波器            (4) 5*5模板平滑滤波器

               图5-6  线性平滑滤波器领域均值法

5.2.3 非线性平滑滤波器(中值滤波法)

    中值滤波器是最常用的非线性平滑滤波器,它也是一种典型的低通滤波器,主要目的是保护图像边缘,同时也能去除噪声,也就是说,能够在抑制随机噪声的同时不使图像边缘模糊。与线性平滑滤波不同,中值滤波是将领域中的像素按灰度级排序,取其中间值作为输出像素中值滤波只依赖于领域的空间范围和中值计算中涉及的像素数。

    设f(x,y)表示数字图像像素点的灰度值,滤波窗口为A的中值滤波器可以定义为(5-6):

                          

                     (5-6)     

中值滤波法的具体步骤:

(1)将模板在图像中漫游,并将模板中心和图像某个像素的位置重合;

(2)读取模板下对应像素的灰度值;

(3)将这些灰度值从小到大排成一列;

(4)找出这些值排在中间的一个;

(5)将这个中间值赋给对应模板中心位置的像素。

MATLAB中值滤波程序代码如下:

a=imread('rice.png');

b=imnoise(a,'salt & pepper',0.02);  %对图像添加椒盐噪声

k=medfilt2(b);   %中值滤波去噪

subplot(1,3,1);

imshow(a);

subplot(1,3,2);

imshow(b);

subplot(1,3,3);

imshow(k);

运行程序,得到如下结果图5-7:

    (1) 原图         (2)含有椒盐噪声     (3) 中值滤波去噪

                            图像                 图像

                     图5-7 中值滤波法

可以看出,对于椒盐噪声中值滤波法效果比领域平均法要好很多,图像也要清晰很多。所以对于椒盐噪声一般用中值滤波法更好。

5.2.4 锐化滤波器

在图像的识别中,需要边缘鲜明的图像,即图像锐化。图像锐化的目的是为了突出图像的边缘信息,加强图像的轮廓特征,以便于人眼的观察和机器的识别。因此,从图像增强的目的来看,它与图像平滑相反的一类处理。

下面主要介绍最常用的线性锐化滤波器。

线性高通滤波器是最常用的线性锐化滤波器。这种滤波器的中心系数都是正的,而周围的系数都是负的。对3*3的模板来说,典型的系数取值是:

                  [0 1 0;-1  4 1;0 1 0]

事实上这是拉普拉斯算子,所有的系数之和为0。当这样的模板放在图像中灰度值是常数或变化很小的区域时,其输出为0或很小。这个滤波器将原来的图像中的零频域分量去除了,也就是将输出的图像的平均值变为0,这样就会有一部分像素的灰度值小于0。在图像处理中我们一般只考虑正的灰度值,所以还有将输出图像的灰度值范围通过尺度变回到所要求的范围。

对于离散函数f(i,j),拉普拉斯算子的表达式为(5-7):

       

      (5-7)

系统取值为

                   [0 1 0;-1  8 1;0 1 0]。

MATLAB锐化滤波程序代码如下:

clear all;

I=imread('pears1.png');

subplot(1,2,1);imshow(I);

I=double(I);

H=[0 1 0,1 -4 1,0 1 0];

J=conv2(I,H,'same');

K=I-J;

subplot(1,2,2),imshow(K,[]);

运行该程序,得到如下结果图5-8:

可以从图片得出,图像的边缘很鲜明,图像的轮廓得到了加强,使得原来模糊的图像清晰了很多,这就是线性锐化滤波器的优点所在。

              (1) 原始图像                (2) 锐化滤波后图像

                            图5-8 线性锐化滤波器

5.3 图像频域增强

5.3.1 频域增强原理和功能

    与空域增强一样,图像在频域内处理也可以实现滤波和边缘检出的功能。其原理是抑制图像在变化域某个范围内的分量,其他分量不受影响,以改变输出图像的频率分布,达到图像增强的作用。频域处理技术的基础是卷积理论。

设函数f(x,y)与线性位不变算子h(x,y)的卷积结果是g(x,y),即 (5-8):

                      g(x,y)=h(x,y)

f(x,y)                     (5-8)

那么根据卷积定理在频域有(5-9):

   G(x,y)=H(u,v)F(u,v)                      (5-9)

其中G(x,y)、 H(u,v)、F(u,v)分别是g(x,y)、h(x,y)、f(x,y)的傅立叶变换。

在数字图像处理中,f(x,y)是指输入图像,通过傅里叶变换可得到F(m,n),只要选定变换函数H(m,n),就可以确定G(m,n),再通过傅里叶反变换得到输出图像g(x,y),即(5-10):

                    

                  (5-10)

频域增强的主要步骤是:

(1)计算输入图像的傅立叶变换;

(2)将傅里叶变换结果与选定的变换函数相乘;

(3)再将相乘的结果进行傅立叶反变换以得到增强的输出图像。

频域增强的两个关键步骤:

(1)将图像从空域转换到频域所需的变换及将图像从频域空间转换回空域所需的变换;

(2)在频域空间对图像进行增强加工操作

频域增强方法有低通滤波、高通滤波、周围底纹清除滤波和同态滤波。但常用的是前两种,着重介绍前两种。以下分别介绍在MATLAB中如何实现。

5.3.2 低通滤波

频域低通滤波是对图像特定频率范围内的高频成分进行衰减或截断而实现图像平滑处理。常用的低通滤波器有以下几种:

  1. 理想低通滤波器:一个理想的二维低通滤波器是“截断”傅里叶变换中所有高频成分,其传递函数为(5-11):

                         

  

                   (5-11)

式中,

为截止频率,是一个非负的整常数,

是从频域平面中从点

到频域平面原点的距离。

  1. Butterworth(巴特沃斯)低通滤波器:由于理想低通滤波器在截止频率的陡峭特性,会引起滤波后的图像产生模糊现象,为解决此问题用此方法。

一个截止频率为

的n阶Butterworth低通滤波器的传递函数如下(5-12):

                     

                   (5-12)

由于在通带与阻带之间有个平滑的过渡带的存在,用Butterworth低通滤波器得到的输出图像保留了微量的高频信号,从而使图像的边缘模糊程度大大降低。

  1. 指数低通滤波器:

一个截止频率为

的n阶指数低通滤波器的传递函数如下(5-13):

                     

                     (5-13)

  1. 梯形低通滤波器:

一个截止频率为

的n阶梯形低通滤波器的传递函数如下(5-14):

    

    

   

    (5-14)

式中,

为大于

的区域。

理想低通滤波器无法用电子器件实现,尽管它可以在计算机上仿真实现。梯形低通滤波器不常用。下面主要介绍实际中常用的巴特沃斯低通滤波器和指数低通滤波器。

MATLAB Butterworth低通滤波器程序代码如下:

clear all;

I=imread('mao.jpg');

figure;imshow(I);

I2=imnoise(I,'salt & pepper',0.05);   %给图像添加椒盐噪声

figure;imshow(I2);

f=double(I2);

k=fft2(f);

g=fftshift(k);

[N1,N2]=size(g);

n=2;

d0=25;

u0=round(N1/2);

v0=round(N2/2);

for i=1:N1

   for j=1:N2

       d=sqrt((i-u0)^2+(i-v0)^2);

       h=1/(1+0.414*d/d0)^(2*n);

       y(i,j)=h*g(i,j);

   end

end

y=ifftshift(y);

e1=ifft2(y);

e2=uint8(real(e1));

figure;imshow(e2);

运行程序,得到如下结果图5-9:

可以看出,经过Butterworth低通滤波器处理后的图像边缘模糊程度大大降低,去除噪声从而使图像增强。

               (1) 原图                          (2) 含有椒盐噪声的图像

  1. Butterworth低通滤波器

                处理后图像

     图5-9 Butterworth低通滤波器

MATLAB 指数低通滤波器程序代码如下:

clear all;

I=imread('mao.jpg');

I2=imnoise(I,'salt & pepper',0.05);   %给图像添加椒盐噪声

figure;imshow(I2);

f=double(I2);

k=fft2(f);

g=fftshift(k);

[N1,N2]=size(g);

n=2;

d0=25;

u0=round(N1/2);

v0=round(N2/2);

for i=1:N1

   for j=1:N2

       d=sqrt((i-u0)^2+(i-v0)^2);

       h=exp(-(d/d0)^2);

       y(i,j)=h*g(i,j);

   end

end

y=ifftshift(y);

e1=ifft2(y);

e2=uint8(real(e1));

figure;imshow(e2);

运行程序,得到如下结果图5-10:

     (1) 含有椒盐噪声的图像           (2)指数低通滤波器处理后图像

                        图5-10 指数低通滤波器

可以看出,指数低通滤波器和巴特沃斯低通滤波器效果差不多。

5.3.3 高通滤波

图像中物体的边缘及其他灰度变化较快的区域与图像的高频信息有关,因此,利用高通滤波器可以对图像的边缘信息进行增强,起到锐化图像的作用。高通滤波器与低通滤波器一样有四种滤波器,不一样的就是变成高频通过,与低通滤波原理相反,这里就不详细其他两种不常用的滤波器原理。

一个截止频率为

的n阶Butterworth高通滤波器的传递函数如下(5-15):

                        

                   (5-15)

一个截止频率为

的n阶指数高通滤波器的传递函数如下(5-16):

                           

                    (5-16)

下面主要介绍巴特沃斯高通滤波器和指数高通滤波器。

MATLAB Butterworth高通滤波器程序代码如下:

clear all;

I1=imread('mao.jpg');

figure,imshow(I1);

f=double(I1);

g=fft2(f);                 %采用傅里叶变换

g=fftshift(g);             %数据矩阵平衡

[N1,N2]=size(g);

n=2;                       %二阶巴特沃斯高通滤波器

d0=5;

n1=fix(N1/2);

n2=fix(N2/2);

for i=1:N1

    for j=1:N2

        d=sqrt((i-n1)^2+(j-n2)^2);

        if(d==0)

            h=0;

        else

           h=1/(1+0.414*(d0/d)^(2*n));   %计算传递函数

       end

    result(i,j)=h*g(i,j);

  end

end

result=ifftshift(result);

X2=ifft2(result);

X3=uint8(real(X2));

figure,imshow(X3);

运行程序,得到如下结果图5-10:

             (1) 原图                    (2) Butterworth高通滤波器

                                                   处理后图像

                     图5-10 Butterworth高通滤波器

可以看出,经过了Butterworth高通滤波器,图像高频部分比较突出了,达到了增强的效果。

MATLAB指数高通滤波器程序代码如下:

clear all;

I1=imread('mao.jpg');

figure,imshow(I1);

f=double(I1);

g=fft2(f);                 %采用傅里叶变换

g=fftshift(g);             %数据矩阵平衡

[N1,N2]=size(g);

n=2;                       %二阶巴特沃斯高通滤波器

d0=5;

n1=fix(N1/2);

n2=fix(N2/2);

for i=1:N1

    for j=1:N2

        d=sqrt((i-n1)^2+(j-n2)^2);

        if(d==0)

            h=0;

        else

           h=exp(-(d0/d)^n);   %计算传递函数

       end

    result(i,j)=h*g(i,j);

  end

end

result=ifftshift(result);

X2=ifft2(result);

X3=uint8(real(X2));

figure,imshow(X3);

运行程序,得到如下结果图5-11:

            (1) 原图                 (2)指数高通滤波器处理后图像

                        图5-11 指数高通滤波器

5.3.4 周期底纹清除滤波

在很多图像中,由于设备或其他原因,图像背景往往呈现周期性背景,这样不利于目标的提取或者分割,因此我们必须使用滤波对背景进行清除,先进行傅里叶变换,把亮点清除后,再进行反变换,我们就能有效地清除图像的背景干扰。

此方法运用最多在于指纹。

5.3.5 同态滤波

由于实际成像中有许多非线性干扰的问题,此时直接采用频域滤波的方法,将无法消减乘性或者卷积性噪声。同态滤波的基本思想是将非线性的问题转化成线性问题进行处理,即先对非线性混杂信号做某种数学运算D(一般取对数),变换成加性的,然后用线性滤波处理,最后做

运算,恢复处理后图像。同态滤波的目的是通过对图像做非线性变换,使构成图像的非可加性因素变成可加性的,从而容易进行滤波处理[18]

第6章 图像复原

在实际的日常生活中,人们要接触很多图像,画面。而在景物成像这个过程里可能会出现模糊、失真或混入噪声,最终导致图像质量下降,这种现象称为图像“退化”。因此我们可以采取一些技术手段来尽量减少甚至消除图像质量的下降,还原图像的本来面目,即在预定义的意义上改善给定的图像,这就是图像复原。

图像复原和图像增强有很密切的关系,他们的目的都是在某种意义上对图像进行改进,既改善了图像视觉效果,又便于后续处理。

引起图像模糊有多种多样的原因,举例来说有运动引起的,高斯噪声引起的,斑点噪声引起的,椒盐噪声引起的等等[19]。

6.1 图像退化模型

图像退化的模型如图6-1所示:

           

   

                             图6-1 图像退化模型

上图中用退化函数把退化过程模型化,它和加性噪声项一起,作用于输入图像

,产生一副退化的图像

,如下(6-1)

                           

                  (6-1)                

给定

、一些关于退化函数H的知识以及一些关于加性噪声

的知识,复原的目标就是得到原图像的一个估计。我们要是这个估计尽可能地接近原始的输入图像。通常,我们对

知道越多,

就越接近

若H是线性的、空间不变的过程,则退化图像在空间域通过下式(6-2)给出:

                         

                (6-2)                    

其中,

是退化函数的空间表示,且空间域的卷积和频域的乘法组成了一个傅立叶变换对,所以可以用等价的频域表示写出恰面的模型(6-3)

                     

                 (6-3)

其中,用大写字母表示的项是卷积方程式中相应项的傅立叶变换。退化函数

有时称为光学传递函数(DTF)。在空间域,

成为点扩散函数(PSF)。对于任何种类的输入,让

作用于光源的一个点来得到退化的特征,点扩散函数就是来源此的一个名词。

由于退化是线性的,所以空间不变的退化函数

可以被模型化为卷积,同样地,复原处理有时也称为反卷积。

图像恢复方法很多,MATLAB中只提供了维纳(Wiener)滤波、约束最小二乘(正则)滤波算法、Lucy-Richardson迭代非线性算法和盲解卷积算法,这里主要介绍维纳(Wiener)滤波和Lucy-Richardson迭代非线性算法。

6.2 维纳(Wiener)滤波

6.2.1直接逆滤波

用于复原一副退化图像的最简单方法是构成一个如下形式的估计(6-4):

                         

                          (6-4)

然后采用

的傅里叶逆变换来得到图像的相应估计。这种方法成为逆滤波。由前文中讨论的,模型,我们可以将估计表示为(6-5):

                       

                    (6-5)  

    这个简单的表达式告诉我们,及时准确的知道了

,也不能恢复

,因为噪声分量是一个随机函数,他的傅里叶变换

是未知的。另外,在实际中,有许多

为零的情况也是个问题。即使

项也可以忽略,用为零的

值来除它也将会控制复原估计。

采用逆滤波时,典型的方法是形成比率

,然后为了得到逆,将频率的范围限制在接近原点的频率。概念是

中的零不太可能在接近原点的地方出现,因为变换的数值通常是该区域中的最高值。

6.2.2 维纳(Wiener)滤波基本原理

当退化图像的噪声较小,即轻度降质,采用逆滤波复原的方法可以获得较好的结果,但图像含有噪声时,效果就不太好。这时,我们采用维纳滤波结合噪声的先验统计信息来解决这个问题。

维纳滤波(N.Wiener最先在1942年提出的方法)是一种最早也最为人们所熟知的线性图像复原方法。维纳滤波器寻找一个使统计误差函数(6-6):

                         

                         (6-6)

最小的估计

。其中,

是期望值操作符,

是未退化的图像。该表达式在频域可表示为(6-7):

                  

      (6-7)

式中,

表示退化函数

  

  

表示

的复共轭

  

表示噪声的功率谱

  

表示未退化图像的功率谱

  比率

称为噪信功率比

我们看到,若对于

的所有相关值,噪声功率谱为零,则这个比率就为零,且维纳滤波器就成为前文讨论的逆滤波器。在MATLAB中使用deconvwnr函数实现维纳滤波。若复原图像呈现出由算法中使用的离散傅立叶变换所引入的振铃,则它往往会提醒我们需要调用edgetaper函数进行预先处理[20]。

MATLAB维纳滤波程序代码如下:

clear all;

I=imread('lou.jpg');

figure;imshow(I);title('原图');

LEN=30;   

THETA=45;  

PSF=fspecial('motion',LEN,THETA);

MF=imfilter(I,PSF,'circular','conv'); %对图像加噪

wnr=deconvwnr(MF,PSF);   %恢复图像

figure;imshow(MF);title('模糊后的图像');

figure;imshow(wnr);title('恢复后的图像');

运行程序,得到如图6-2:

            

                               (3) 恢复后图

                              图6-2 维纳滤波

我们得到的结果虽然仍有一些噪声存在,但是已经和原图很接近了。

6.3 Lucy-Richardson 迭代非线性算法

    假设图像服从Poission分布,采用最大似然法进行估计,Lucy-Richardson (LR)迭代非线性算法则是一种基于贝叶斯分析的迭代算法。其最优估计以最大似然准则作为标准,即要使概率密度函数

最大,推导出的迭代式为(6-8):

                       

                      (6-8)

其中,

分别为卷积运算和相关运算;k为迭代次数,可以令

进行迭代。可以证明,当噪声可以忽略,当k不断增大时,

会依概率收敛于

,从而恢复出原始图像。

当噪声不可以忽略时,得到(6-9):

                  

                     (6-9)

从上式可看出,若噪声

不可忽略,则以上过程的收敛性将难以保证,即 LR 存在放大噪声的缺陷。因此,处理噪声项是 LR 算法应用于低信噪比图像复原的关键。

在MATLAB中实现此算法的函数是deconvlucy。同样的,若复原图像呈现出由算法中所用的离散傅里叶变换所引入的振铃,则在调用函数deconvlucy之前,要利用函数edgetaper。

MATLAB LR算法程序代码如下:

clear all;

I=imread('lou.jpg');

PSF=fspecial('gaussian',5,5) ;

Blurred=imfilter(I,PSF,'symmetric','conv');

V=.003;

BN=imnoise(Blurred,'gaussian',0,V);

luc=deconvlucy(BN,PSF,5);

figure;imshow(I);title('原始图像');

figure;imshow (Blurred);title('模糊后的图像');

figure;imshow (BN);title('加噪后的图像');

figure;imshow (luc);title('恢复后的图像');

运行程序,得到如图6-3:

             

               (3) 加噪后图                       (4) 恢复后图

                                       图6-3 LR算法

从上图可以看出,经多次迭代,尤其是在低信噪比情况下,重建图像可能会出现一些斑点,这些斑点并不代表图像的真实结构,是输出图像过于逼近噪声所产生的结果。但此LR算法恢复效果不是很好,一般使用维纳滤波。

第7章 总结与展望

7.1 总结

本文主要介绍了数字图像处理的基本理论,图像的格式,MATLAB 仿真软件和基于MATLAB的数字图像处理环境,介绍了如何利用MATLAB及其图像处理工具箱进行数字图像处理。在第四章详细介绍了二值图像的处理,介绍了膨胀、腐蚀和综合应用;第五章详细介绍了图像增强的技术,介绍了空域处理和频域处理;第六章介绍了图像复原的方法,介绍了维纳滤波和LR算法;并都利用MATLAB来实现。

二值图像处理是最简单的技术,能够获得图像的信息;图像增强技术是数字图像处理中最基础和必需的技术;图像复原是最实用的图像处理技术,应用最广泛。

7.2 展望

随着计算机处理能力的不断增强,数字图像处理学科在飞速发展的同时,也越来越广泛地向许多其他学科快速交叉渗透,使得图像作为信息获取以及信息的利用等方面也变得越来越重要。目前数字图像处理的应用越来越广泛,已经渗透到工业、医疗保健、航空航天、军事等各个领域,在国民经济中发挥越来越大的作用。

数字图像处理技术的迅速发展给人类带来了巨大的经济社会效益,大到卫星遥感进行全球环境气候检测,小到指纹识别技术在安全领域的广泛应用。MATLAB用更直观的,符合人们思维习惯的代码,代替了C和FORTRAN语言的冗长代码。应用MATLAB友好的界面和丰富、实用、高效的指令及模块,可以使人较快地认识、理解图像处理的相关概念,逐步掌握图像信号处理的基本方法,进而能够解决相关的工程和科研中的问题。

数字图像处理用MATLAB实现更加方便简单,由于在航空航天、生物医学工程、工业检测、机器人视觉、公安司法、军事制导、文化艺术等的领域有重大的成就,使得数字图像处理成为一门引人注目、前景远大的新型学科。研究这方面的人也越来越多。

  

参考文献

[1] 陈超,MATLAB应用实例精讲——图像处理与GUI设计篇》[M],北京:电子 工业出版社,2011.2

[2] 张德丰,MATLAB数字图像处理》(第二版)[M],北京:机械工业出版社,2012.1

[3] 朱习军,隋思涟,MATLAB在信号与图像处理中的应用》[M],北京:电子工业出版社,2009.3

[4] 张德丰,详解MATLAB数字图像处理》[M],北京:电子工业出版社,2010.7

[5] 詹青龙,卢爱芹,数字图像处理技术》[M],北京:清华大学出版社,2010.7

[6] 张德丰,数字图像处理(MATLAB版)》[M],北京:人民邮电出版社,2009.10

[7] 徐东艳,孟晓刚,《MATLAB函数库查询词典》[M],北京:中国铁道出版社,2005.12

[8] 胡学龙,数字图像处理》(第二版)[M],北京:电子工业出版社,2011.2

[9] 李云红,屈海涛,数字图像处理》[M],北京:北京大学出版社,2012.5

[10]游福成,数字图像处理》[M],北京:机械工业出版社,2011

[11]陈炳权,刘宏立,数字图像处理技术的现状及其发展方向》[J],吉首大学学报,2009.01期,2

[12]李红俊,数字图像处理技术及其应用》[J],中国学术期刊,2002.09期,1

[13]Rafael C.Gonzalez,Richard E.Woods,Digital image processing》[M],电子工业出版社,2010.1

[14]Rafael C. Gonzalez,Richard E. Woods,Steven L. Eddins,Digital image processing(Second Edition)[M],电子工业出版社,2013.4

[15]Mu DongzhouHybrid Genetic Algorithm Based Image Enhancement Technology》[J]Internet Technology and Applications (iTAP),2011.06期,1

[16]杨丹,赵海滨,MATLAB从入门到精通》[M],北京:中国铁道出版社,2013.1

[17]闫敬文,《数字图像处理MATLAB版》[M],国防工业出版社,2007.2

[18]周新伦,柳建,《数字图像处理》[M],国防工业出版社,1986.3

[19]陈桂明,张明照,《应用MATLAB语言处理信号与数字图像》[M],科学出版社,2000.5

[20]章毓晋,《图像处理与分析》[M],北京:清华大学出版社, 2004.7

  • 22
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值