摘 要
视频图像处理技术广泛用于工业、安全、医疗、管理等领域。运动目标的检测和跟踪是图像处理技术在视频序列图像处理方面的一个重要应用,在航天、交通、机器人视觉、视频监控、公共场所客流数据监测等场合发挥着重要作用。
本文介绍了一种基于MATLAB的简易的从视频播放的帧图像中找出目标图像,并进行视频跟踪的实现方法。通过对图像进行阈值处理(图像分割),再对分割后的图像求取形心,以对目标图像进行定位,并最后找到各幅帧图像的目标位置的方法,从而实现对100帧视频图像的实时跟踪。
关键词:目标检测;阈值处理;视频序列目标跟踪;形心估计
目录
数字图像处理起源于20世纪20年代。当时,人们通过Bartlane海底电缆图片传输系统,从伦敦到纽约传输了一幅经过数字压缩后的照片,从而把传输时间从一周多缩短到不足三个小时。为了传输图片,该系统在传输端进行了图像编码,然后在接受端用特殊打印设备重构了该图片。尽管这一应用包含了数字图像处理的知识,但是并没有使用计算机。而数字图像处理需要很大的存储空间和计算能力,其发展受到计算机中数据储存、显示和传输等相关技术发展的制约[1]。
在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)问世,它将图像重建技术用于医学[2]。
20世纪70年代中期开始,随着计算机技术和人工智能、思维科学研究的迅速发展,数字图像处理向更高、更深层次发展。人们已开始研究如何使用计算机系统解释图像,实现类似人类视觉系统理解外部世界,这被称为图像理解或计算机视觉。很多国家,特别是发达国家投入更多的人力、物力到这项研究,取得了不少重要的研究成果。其中代表性的成果是70年代末MIT的Marr提出的视觉计算理论,这个理论成为计算机视觉其后十多年的主导思想。图像理解虽然在理论方法研究上已取得了不小的进展,但它本身是一个比较难的研究领域,存在不少困难,因人类本身对自己的视觉过程还了解甚少,因此计算机视觉是一个有待人们进一步探索新的领域。
最早的图像处理时上世纪六七十年代,随着电子技术和计算机技术的不断提高和普及,数字图像处理进入高速发展时期。数字图像处理就是利用数字计算机或者其他数字硬件,对图像信息转换而得的电信号进行某些数学运算,以提高图像的实用性。例如从卫星图片中提取目标物的特征参数,三维立体断层图像的重建等等。数字图像处理技术处理精度比较高,而且还可以通过改进处理软件来优化处理效果。总的来说,数字图像处理包括点运算、几何处理、图像增强、图像还原、图像形态学处理、图像编码、图像重建、模式识别等。
由于计算机技术处理能力不断增强,数字图像处理学科在飞速发展的同时,也越来越广泛地向其他许多学科快速交叉渗透,使得图像作为信息获取以及信息的利用等方面也变得越来越重要。目前数字图像处理应用越来越广泛,已经渗透到工业、医疗保健、航空航天、军事等各个领域,在国民经济中发挥越来越大的作用。MathWorks公司推出的MATLAB是学习数理知识的好帮手。应用MATLAB友好的界面和丰富、实用、高效的指令及模块,可以使人较快地认识、理解图像处理的相关概念,逐步掌握图像信号处理的基本方法,进而能够解决相关的工程和科研中的问题。
图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面。随着人类活动范围的不断扩大,图像处理的应用领域也将随之不断扩大,数字图像处理对人类的作用将是不可限量[3]。
本文首先通过对MATLAB软件的了解及应用,基于MATLAB的数字图像处理环境和如何利用MATLAB及其图像处理工具箱进行数字图像处理。主要论述了利用MATLAB实现对图像读取、阀值处理、距心的求取等图像处理。
图像的数字化过程就是在计算机内生成一个二维矩阵的过程。数字化的目的是将一幅图像以数字的形式进行表示,并且要做到既不失真又便于计算机进行处理。图像的数字化要求是要达到以最小的数据量不失真地描述图像信息。数字图像(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]。
数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。相对于以往的数字图像处理方法,数字图像处理是一次新的“工业革命”,它彻底改变了以往人们处理图像时所采用的手段,成为图像处理中一个崭新的方向。
数字图像处理的产生和迅速发展主要受三个因素的影响:一是计算机的发展;二是数学的发展(特别是离散数学理论的创立和完善);三是广泛的农牧业、林业、环境、军事、工业和医学等方面的应用需求的增长[7]。
从系统整体研究的角度来看,数字图像处理的研究内容主要包括以下几个方面:图像的获取、表示与表现,图像增强、图像复原、图像分割、图像分析、图像重建及图像编码压缩等。其中,数字图像处理包括:算术/逻辑操作和几何运算、图像增强、图像分割、图像形态学处理、模式识别、图像复原、图像压缩等内容。
(1)算术/逻辑操作
图像中的算术/逻辑操作主要以像素对像素为基础在两幅或多幅图像间进行(其中不包含逻辑非操作,它在单一影像中进行)。
对图像的逻辑操作同样也是基于像素的。“与或非”这三种逻辑算子完全是函数化的。当我们对灰度级图像进行逻辑操作时,像素值作为一个二进制的字符串来处理。
在四种算术操作中,减法与加法在图像处理中最有用。我们简单的把两幅图像想除看成是用一副的取反图像与另一幅图像相乘。在四种代数运算操作中加法运算可用于降低图像中加性随机噪声的污染;减法运算则可以检测图像中物体的运动变化;乘法运算可用于标记图像中的感兴趣区域;除法运算则经常用于多光谱遥感图像的分析处理,以扩大不同物体之间的差异。
(2)几何变换
几何运算用于改变图像中像素与像素之间的空间位置关系,从而改变图像的空间结构,达到处理图像的目的。简单而言,图像几何变换就是建立一种源图像像素与变换后的图像像素之间的映射关系。主要包括图像的平移、缩放、旋转、镜像和转置变换等。
(3)图像增强
图像增强是图像处理最关键的研究问题之一,图像增强按作用域可分为两类,即空域处理和频域处理。空域处理是直接对图像进行处理,而频域处理则是在图像的某个变化域内,对图像的变换系数进行运算,然后通过逆变换获得图像增强效果。图像增强可以突出图像中的某些“有用”信息,扩大图像中不同物体特征之间的差别,改善图像的视觉效果。图像增强的算法包括直方图增强,空域滤波增强,频域滤波增强和彩色增强等。
图像分割将图像细分为构成它的子区域或对象。图像分割算法一般基于亮度值的两个基本特性之一:不连续性和相似性。第一类方法基于亮度的不连续变化分割图像,比如图像的边缘。第二类方法依据事先制定的准则将图像分割为相似的区域。图像分割包括间断检测,边缘检测,门限处理等。
(5)图像形态学处理
图像形态学由一组形态学代数算子组成,最基本的形态学代数算子包括腐蚀、膨胀、开运算、闭运算等,通过组合应用这些算子,可以实现对图像形状、结构的分析和处理。数学形态学可以完成图像分割、特征提取、边界检测、图像滤波、图像增强和恢复等工作。
(6)模式识别
模式识别总是从大量信息和数据出发,在一定的经验和认识基础上,利用计算机和数学的推理的方法对信息进行自动识别。模式识别系统一般包括4个部分,即数据获取、预处理、特征提取和决策分类。
(7)图像复原(恢复)
由于设备造成的扫描线漏失、错位等各种原因不可避免造成图像质量的下降(退化)。图像的复原就是根据事先建立起来的系统退化模型,将降质了的图像重建成接近于或完全无退化的原始理想图像的过程。
(8)图像压缩
数字图像的数据量是很巨大的,然而数字图像实际上又具有很大的压缩潜力。图像压缩所解决的问题是尽量减少表示数字图像时所需的数据量。减少数据量的基本原理是出去其中的冗余数据。这种变换在图像存储或传输之前进行。在以后的某个时候,再对压缩图像进行解压缩,以重构原图像或原图像的近似图像[8]。
(1) 数字图像处理的信息大多是二维信息,处理信息量很大。因此对计算机的计算速度、存储容量等要求较高。
(2) 数字图像处理占用的频带较宽。与语言信息相比,占用的频带要打几个数量级。
(3) 数字图像中各个像素是不独立的,其相关性大。在图像画面上,经常有很多像素有相同或接近的灰度。
(4) 由于图像是三维景物的二维投影,一幅图像本身不具备复现三维景物的全部几何信息的能力,很显然三维景物背后部分信息在二维图像画面上是反应不出来的。因此,要分析和理解三维景物必须做合适的假定或附加新的测量。
(5) 数字图像处理后的图像一般是给人观察和评价的,因此受人的因素影响较大。
计算机图像处理和计算机、多媒体、智能机器人、专家系统等技术的发展紧密相关。近年来计算机识别、理解图像的技术发展很快,也就是图像处理的目的除了直接供人观看(如医学图像是为医生观看作诊断)外,还进一步发展了与计算机视觉有关的应用,如邮件自动分检,车辆自动驾驶等。下面仅罗列了一些典型应用实例,而实际应用更广。
(1)在生物医学中的应用
主要包括显微图像处理;DNA显示分析;红、白血球分析计数;虫卵及组织切片的分析;癌细胞的识别;染色体分析等等。
(2)遥感航天中的应用
军事侦察、定位、导航、指挥等应用;多光谱卫星图像分析;地形、地图、国土普查;地质、矿藏勘探;天文、太空星体的探测及分析等。
(3)工业应用
CAD 和CAM技术用于模具、零件制造、服装、印染业;零件、产品无损检测,焊缝及内部缺陷检查;交通管制、机场监控;火车车皮识别等。
(4)军事公安领域中的应用
巡航导弹地形识别;指纹自动识别;警戒系统及自动火炮控制;反伪装侦察;手迹、人像、印章的鉴定识别;过期档案文字的复原;集装箱的不开箱检查等。
(5)遥感上的应用
在遥感的发展中,可以看到大量与图像处理密切相关的技术。如在20世纪70年代美国发射的第一颗陆地卫星就是通过对获取的遥感图片进行处理后达到上述目的的。随后美国发射了海洋卫星、气象卫星和军用卫星,从而获取了大量遥感资料。此图像处理广泛应用于土地测绘、资源调查、气象监测、环境污染监测、森林防护等。
(6)其他应用
图像的远距离通信;多媒体计算机系统及应用;电视电话;服装试穿显示;理发发型预测显示;电视会议;办公自动化、现场视频管理等[9]。
MATLAB中,一幅图像可能包含一个数据矩阵,也可能包含一个颜色映射表矩阵。MATLAB中有四种基本的图像类型:
(1)二值图像(二进制图像)
二值图像也叫黑白图像,就是图像像素只存在0、1两个值。一个二值图像是纯黑白的。每一个像素值将取0或者1中的一个值,通常0表示黑,1表示白。
二值图像可以保存为双精度或uint8类型的双精度数组,显然使用uint8类型更节省空间。在图像处理工具箱中,任何一个返回二进制图像的函数都是以uint8类型逻辑数组来返回的。
(2)灰度图像
在MATLAB中,灰度图像是保存在一个矩阵中的,矩阵中的每一个元素代表一个像素点。矩阵可以是双精度类型,其值域为[0,1];也可以为uint8类型,其数据范围为[0,255]。矩阵的每个元素代表不同的亮度或灰度级。
彩色图像转化为灰度图像公式:
(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表示图像像素的行列数[10]。
-
- 主要图像文件格式
(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位非压缩图像[11]。
在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被广泛用于科学研究和解决各种具体问题[12]。
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB 是MATrix LABoratory(“矩阵实验室”)的缩写,不仅具备完善的科学计算功能,而且能胜任众多专业领域的仿真和设计任务,甚至能自动生成直接与硬件关联的代码,在图像处理、系统仿真、数字信号处理、自动控制等领域都有着广泛的应用。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多。
MATLAB包括拥有数百个内部函数的主包和三十几种工具包(Toolbox)。工具包又可以分为功能性工具包和学科工具包。功能工具包用来扩充MATLAB的符号计算,可视化建模仿真,文字处理及实时控制等功能。学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类。
MATLAB图像处理工具箱包括:
(1)图像处理工具箱(Image Processing Toolbox) 它为工程师和科学家提供了一套完整的用于图像处理和分析的函数,总共超过了200个图像处理函数,用户只需要花少量的时间在算法编程上,而可以把大量时间用于问题的分析处理上。
(2)图像获取工具箱(Image Acquisition Toolbox) 它扩展了MATLAB的强大科学计算能力,允许直接在MATLAB环境下通过工业标准硬件设备获取图像和视频信号。
(3)地图工具箱(Mapping Toolbox) 它与MATLAB组合起来提供了一个完整的分析和显示地理信息的环境,利用该工具箱提供的函数,工程师可以用来分析地理数据,进行地图显示,调用外部地图数据源。
MATLAB软件具有如下特点:
(1) 它的语言非常接近自然语言,因此,具有一定程序设计基础的人学起来比较容易。运算符丰富,具有结构化的控制语句(如for循环,while循环,break语句和if语句),又有面向对象编程的特性。它的程序限制不严格,程序设计自由度大,而且具有源程序的开放性。
(2) 该软件提供了大量的内部函数,让用户在使用时非常方便,此外,日益庞大的Toolbox更是让该软件的应用领域越来越广泛。
(3) 该软件语言以向量矩阵为着眼点,因此它比较适于进行数值分析。
(4) 它的绘图功能强大,由于MATLAB在世界范围内特别是在工程计算领域的流行,越来越多的人开始青睐并使用这套软件。
(5) MATLAB的缺点是,它和其他高级程序相比,程序的执行速度较慢。由于MATLAB的程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢[13]。
图像处理工具包是由一系列支持图像处理操作的函数组成的。所支持的图像处理操作有:图像的几何操作、邻域和区域操作、图像变换、图像恢复与增强、线性滤波和滤波器设计、变换(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方法[14]。
用户界面是指:实现人与机器(或程序)之间交互作用的工具和方法。如键盘、鼠标等都可成为与计算机交换信息的接口。
图形用户界面GUI(全称Graphical User Interfaces )则是由窗口、光标、按键、菜单、文字说明等对象构成的一个用户界面,用户图形界面(GUI)是程序的图形化界面。
GUI可以使用户定制用与MATLAB的交互方式。把图形界面加到MATLAB 的函数和M文件中。GUI可以在MATLAB 中生成非常有效的工具和应用程序,或是建立演示工作的交互式界面。
创建MATLAB 用户图形界面必须有三个基本元素:
(1)组件:在matlab GUI 中的每一个项目如按钮、标签、编辑框等都是一个图形化组件。组件又可分为三类:图形化控件(按钮,编辑框,列表,滚动条等)、静态元素(窗口和文本字符串)、菜单和坐标系。图形化控件和静态元素由函数uicontrol创建,菜单由函数uimenu和uicontextmenu创建,坐标系经常用于显示图形化数据,由函数axes创建。
(2)图象窗口(Figure):GUI的每一个组件都必须安排在图象窗口中,可以用函figure来创建空图象窗口,空图象窗口经常用于放置各种类型的组件。
(3)回应:当用户用鼠标单击或用键盘键入一些信息,那么程序就要有相应的执行动作。鼠标单击或键入信息是一个事件,如果matlab程序运行相应的函数,那么matlab函数肯定会有所反应。例如,如果用户单击一按钮,这个事件必然引起相应的matlab语句执行。这些相应的语句被称为回应,在执行GUI的单个图形组件时,必须有一个回应。
图像的读写与显示操作:
imread( )读取图像;
imwrite( )输出图像;
imshow( ), image( )把图像显示于屏幕;
imcomplement() 对图像取反;
imcrop( )对图像进行裁剪;
imresize( )函数实现对图像的插值缩放;
imrotate( )实现图像转用;
imfeature功能:计算图像区域的特征尺寸;
imfinfo功能:返回图形文件信息;
imhist功能:显示图像数据的柱状图;
immovie功能:创建多帧索引图的电影动画;
impixel功能:确定像素颜色值;
figure:强制生成一个新的绘图窗口;
medfilt2功能:进行二维中值过滤;
montage功能:在矩形框中同时显示多幅图像;
nlfilter功能:进行边沿操作;
pixval功能:显示图像像素信息;
truesize功能:调整图像显示尺寸;
zoom功能:缩放图像;
isbw功能:判断是否为二进制图像;
isgray功能:判断是否为灰度图像;
isrgb功能:判读是否为RGB真彩图像;
dither( )通过颜色抖动,把真彩图像转换成索引图像或灰度图象转换成二值图像
gray2ind( ) 将灰度图像(或二值图像)转换成索引图像
grayslice( ) 通过设定的阈值将灰度图象转换成索引图像
im2bw( ) 通过设定亮度阈值将灰度、真彩、索引图象转换成二值图像
ind2gray( ) 将索引图象转换成灰度图象
ind2rgb( ) 将索引图象转换成真彩色图像
mat2gray( ) 将一个数据矩阵转换成一幅灰度图象
rgb2gray( ) 将真彩转换成灰度图象
rgb2ind( ) 将真彩转换成索引图象
打开MATLAB,点击File,然后New,再点击GUI,弹出的对话框选择Create
New GUI即可创建一个用户界面图形。
菜单:在每一个窗口系统中使用菜单让用户选择命令和选项。通常在显示屏或窗口的顶部有一菜单条。移动鼠标指针到菜单标志上按下鼠标按键,顶层菜单就被选中,以列菜单项就从菜单标志拉下来。这种款式菜单就叫下拉式菜单。一个菜单项还可以有自己的菜单项列表作为子菜单。子菜单项在子菜单的右边显示小三角或箭头以表示菜单还有更多的子菜单项可供选择。子菜单可以嵌套,但层次的数目受到窗口系统及有用资源的限制。
建立菜单和子菜单:我们采用函数uimenu建立菜单项
》Hm_1=uimenu(hx_parent,’propertyName’,propertyValue…)
其中Hm_1是由uimenu生成的菜单项的句柄。通过设定uimenu的属性值就可以定义菜单特性。Uimenu对象中最重要的属性是‘lable’和‘callback’。‘lable’属性值是菜单条和下拉菜单项上的文本字符串,以确认菜单项。‘callback’属性值是MATLAB字符串。
控制框:系统窗口设置控制框,让用户进行某种操作或设置选项或属性。控制框是图形对像,如图标、文本框和滚动条。它和菜单一起使用以建立用户图形界面称之为窗口系统和计算机窗口管理器。
MATLAB控制框又称uicontrol,它是图形对象,可以放置在MATLAB的图形窗中的任何位置并用鼠标激活,MATLAB的uicontrol包括按钮、滑标、文本框及弹出式菜单。
Uicontrol是由函数uicontrol生成的,常用句法:
》Hc_1=uicontrol(Hf_fig,’PropertyName’,PropertyVaule…)通过设定不同的属性值定义uicontrol的属性。
建立不同的控制框:matlab共有八种不同的类型的或样式的控制框,他们均由uicontrol建立,属性‘style’决定了所建立的控制框的类型。‘callback’属性值是当控制框激活时,传给eval在命令窗口空间执行的matlab的字符串。
下面介绍八种uicontrol[15]:
(1)按键钮:又称命令按钮或按钮,是小的长方形屏幕对象,常常在对象本身标有文本。将鼠标指针移动至对象,来选择按键钮uicontrol,单击鼠标按钮,执行由回调字符串所定义的动作。按键钮的‘style’属性值是‘pushbutton’.按键钮是典型的用于执行一个动作而不是改变状态或设定属性。
(2)无线按钮:又称选择按钮或切换按钮,他由一个标志和标志文本的左端一个小圆圈或小菱形形成。当选择时,圆圈被填充,且‘value’属性值为1;若未被选择时,‘value’的属性值为0。无线按钮的‘style’属性值为‘radiobutton’。无线按钮典型的用在一组互斥的选项中选择一项。
(3) 检查框:又称切换按钮,它由具有标志并在标志的左边的一个小方框组成。激活时uicontrol在检查和清除状态之间切换。在检查状态时,根据平台的不同,方框被填充,或在框内含x,‘value’的属性值为1 ,若为清除状态,则方框为空,‘value’的属性值为0。检查框的‘style’属性为‘checkbox’。检查框典型的用于表明选项的状态或属性。通常检查框是独立的对象,如需要检查框可以与无线按钮交换使用。
(4) 静态文本框:显示一个文本字符串的uicontrol,该字符串是由‘string’属性值所确定的。静态文本框的‘style’属性值为‘text’。静态文本框典型的用于显示标志、用户信息及当前值。静态文本框之所以称之为静态,是因为用户不能动态的修改所显示的文本,文本只能通过改变‘string’属性来更改。
(5)可编辑文本框:可编辑文本框允许用户动态的编辑或重新安排文本串。就像是使用文本编辑器或文字处理器一样。在‘string’属性中有该属性。可编辑文本框的uicontrol的‘style’属性值为‘edit’。典型的用在让用户输入文本串或特定值。
(6)滑标:或称滚动条包括三个独立的部分,分别是滚动槽或长方形区域,代表有效对象值范围;滚动槽内的指示器,代表滑标当前值;以及在槽的两端的箭头。滑标的‘style’的属性值为‘slider‘。滑标典型的用于从几个值域范围内选定一个。滑标值有三种方式设定,方法一:鼠标指针指向指示器,移动指示器。拖动鼠标是,要按住鼠标按钮,当指示器位于期望位置后,松开鼠标。方法二:当指针处于槽中但在指示器的一侧时,单击鼠标按钮,指示器按该侧方向移动距离约为整个值域范围的10%;方法三:在滑标无论哪端点击鼠标箭头,指示器沿着箭头的方向移动大约为滑标范围的1%,滑标通常与所用文本uicontrol对象一起显示标志,当前滑标值及值域范围。
(7)弹出式菜单:典型的用于向用户提出互斥的一系列选项清单,让用户选择。弹出式菜单不受菜单条的限制,可位于图形窗口的任何位置,‘style‘属性是’popupmenu‘。当关闭时弹出式菜单以矩形或按钮的形式出现,按钮上含有当前选择的标志,在标识的右侧有一个向下的箭头或凸起的小方块来表明uicontrol对象是一个弹出式菜单,当指针处在弹出式uicontrol之上并按下鼠标时,出现其它选项。移动指针到不同的选项,松开鼠标就关闭弹出式菜单,显示新的选项。
(8)框架:框架uicontrol对象仅是带色彩的矩形区域。框架提供了视觉的分隔性。框架典型的用于组成无线按钮或其他uicontrol对象。在其他对象放入框架之前,框架应事先定义。否则,框架可能覆盖控制框使他们不可见。
编程和回调的考虑,在命令行通过输入uimenu和uicontrol来建立效率不高,脚本或函数M文件使用更为简便,假定想实现一个M文件,首先确定是否要编写脚本或函数文件。
脚本文件似乎成了当然的选择。在脚本中,所有的命令都在工作窗口执行,因此随时可以随时使用所有的MATLAB函数和对象。将信息传给回调函数没有任何困难。在这里有几点权衡,首先,当所有的变量都可以利用时,工作空间充斥了变量名和变量值,即使它们不再有用。其次,如果用户使用clear命令,重要的对象句柄就可能丢失。另一个缺点是:用脚本文件定义回调字符串可能变得十分复杂。另一个问题是,脚本文件比函数文件运行的要慢,脚本文件在第一次运行时要编译。最后一点,脚本文件没有函数文件灵活。函数可以接受输入参量并返回值。因此,函数可作为其他函数的参变量。
独立的回调函数,建立GUI函数的一个有效地方法是编写独立的回调函数,专门执行一个或者多个回调。函数使用的对象句柄和其他的变量可以作为参量传递,必要时回调函数可返回值。
利用单独的M文件并递归调用该文件,既可以避免多个M文件的复杂性,又可以利用函数的优点。使用switches或if elseif 语句,可将回到函数装入调用函数内,通常这样一种调用的结构为function guifunc(switch)其中switch确定为执行那个函数开关的参量,它可以是字符串,‘startup’,‘close’,‘seccolor’,也可以是代码或数字。
全局变量global,可用在函数中,使某些变量对GUI 函数的所有部分都可用,全局变量是在函数的公共区说明,因此整个函数以及对函数的递归调用都可以利用全局变量。
回调字符串在命令窗口工作空间中计算并执行的。这个情况对编写和调用GUI函数和脚本文件有着隐含的意义,回调字符串可以很复杂,尤其是在脚本文件中,这为句法错误提供了很多机会,记录单引号、逗号、括号是令人头痛的事。如果出现了句法错误,MATLAB给出提示;只要对象的‘callback’属性值是一个真正的文本串,MATLAB就认可了,只有当对象被激活并将回调字符串传给eval时,才检查回调字符串内部的句法错误。
这样让用户定义回调字符串,它涉及未曾定义过的对象句柄和变量,这是编写互相参照的程序更容易。但是每个回调函数必须分别测试,保证回调字符串是合法的MATLAB命令,并且回调字符串涉及的所有变量可在命令窗口工作空间中是可利用的。将回调函数M文件一样编程或像GUI函数本身内的开关一样编程,就可以不运行整个GUI函数而对各个回调进行改变或测试。因此,回调字符串是在命令窗口工作空间中而不是在函数本身内计算,在函数和各回调函数之间传递数据就变得十分复杂。
由于视频是由100帧图像通过连续播放从而达到视频的效果的,所以要达到视频放映的效果,应首先对100帧图像序列进行顺序读取。100帧图像存储在MATLAB的默认路径中,文件名为00000xxx.bmp。要达到读取它们的目的,需要使用循环算法。算法由一个名为read_seqim(i)的函数实现,以下是函数的源程序:
function I=read_seqim(i)
if nargin==0
i=1;min=00000001;
end
name=num2str(i);
if i<=9
min=strcat('0000000',name,'.bmp');
elseif i<=99
min=strcat('000000',name,'.bmp');
else
min=strcat('00000',name,'.bmp');
end
I=imread(min);
其中i为读取图像的序号,通过以上的函数可以很方便的实现对100帧图像中任意一帧的读取,从而为后面的处理提供方便。
阈值(Threshold),也叫门限。阈值化(Thresholding),即按给定阈值进行图像的二值化处理。阈值分割法可分为以下几种:
(1)简单阈值分割法;
(2)多阈值分割法;
(3)最大类间方差法;
(4)最佳阈值法。
许多情况,图像是由具有不同灰度级的几类区域组成。如文字与纸张、地物与云层(航空照片)等,阈值分割是利用同一区域的具有某种共同灰度特性进行分割。而用阈值分割法分割图像就是选取一个适当的灰度阈值,然后将图像中的每个像素和它进行比较,将灰度值超过阈值的点和低于阈值的点分别指定一个灰度值,就可以得到分割后的二值图像,此时目标和背景已经得到了分割。阈值分割法简单,快速,特别适用于灰度和背景占据不同灰度级范围的图像。这里我们使用多阈值分割法。
多阈值分割法就是假设一幅图像包含两个以上的不同类型的区域,可以使用几个门限来分割图象。分割函数如下:
(5-1)
由于需要分析的100帧图像的灰度分布大致是相当的,所以我们任意选取一帧图像来求取它的阈值,这里我们选取第50帧图像,具体的源代码如下:
I0=read_seqim(50);%任意读取一帧图像
figure(1),imshow(I0);%原图像显示
I0=double(I0);%化为双精度
figure(2),hist(I0,300);%原图像直方图显示
所得到的图像(如图5-2和5-2所示)如下:
- 读取一帧图像的图像显示
- 原图像直方图显示
图5-1中的直升机是我们所要跟踪的目标。
图5-2中我们可以看出我们所要得到的目标灰度分布于灰度值在150-200的区域内;图中灰度小于50的区域内有以峰值,为第一图中右边边框的刻度线的灰度表示;图中灰度在200-230区域内为背景的灰度表示,所以这里我们就设定两个阈值T1=50;T2=200.在两阈值中间的区域为目标区域。通过图像分割把目标从图像中提取出来,具体源代码如下:
T1=50;T2=200;%观察并找出阈值
for i=1:200
I=read_seqim(i);
M=double(I);
for m=1:272
for n=1:512
if (M(m,n)>=T1)&&(M(m,n)<=T2)
M(m,n)=1;%设置背景灰度
else
M(m,n)=0;%设置目标灰度
end
end
end%%图像的分割和阈值处理
end
所得到的阈值处理(图像分割)后的图像(如图5-3所示)如下:
- 阀值处理后的图像
成像跟踪系统经过图像的预处理、图像的分割识别等一系列信息处理,最终实现对目标位置的实时精确测量,即对目标或目标的局部实施稳定跟踪。目标跟踪的方法具体有以下几种:
矩心(质心、形心)跟踪;边缘跟踪;峰值跟踪;相关跟踪;滤波跟踪。
这里我们使用矩心(质心、形心)跟踪。矩心也叫质心或重心,是物体对某轴的静力矩作用中心。如果把目标图像看成是一块质量密度不均匀的薄板,以图像上各像素点的灰度作为各点的质量密度。这样就可以借用矩心的定义式来计算目标图像的矩心。由于计算重心的过程是个统计平均过程, 它算出的跟踪点不是个别的最亮点位置, 而是图像中各个像元灰度加权平均的位置, 所以, 以重心为跟踪点, 跟踪的随机误差小, 精度高, 稳定性好。具体的计算方法如下:
(5-2)
其中f(x,y)为(x,y)处的灰度值,N和M分别为图像的列数和行数,以下为求取形心的源程序:
for i=1:200
X=0;Y=0;X1=0;Y1=0;PINJUN=0;PINJUN1=0;
for m=1:272
for n=1:512
x=m*M(m,n); y=n*M(m,n); pinjun=M(m,n);
X=X+x;Y=Y+y;PINJUN=PINJUN+pinjun;
end
X1=X1+X;
Y1=Y1+Y;
PINJUN1=PINJUN1+PINJUN;
end
Xmean=X1/PINJUN1;
Ymean=Y1/PINJUN1; %求取形心的计算
Xmean=(Xmean*100-mod(Xmean*100,100))/100;
Ymean=(Ymean*100-mod(Ymean*100,100))/100;%形心数值取整
end
为了实现对视频目标的跟踪,设置波门是一个十分必要的工作。对边缘跟踪及矩心跟踪来说,都要设置一个波门。波门的尺寸略大于目标图象,波门紧紧套住目标图象。波门是随目标图象视频信号而产生的。在波门以内的信号当作感兴趣的信号予以检出而摒除波门以外的其它信号;也可以针对视场中出现的苦干个目标面同时设置几个波门,分别检出各个波门中的信号。从整个视场中检出波门内的信号的方法属于选通技术的范畴。利用选通技术可以对目标进行有选择的跟踪,同时也可以非常有效地排除背景干扰。
这里的波门设置方法为以形心位置为中心,在图像中包含目标的区域添加一个合适矩形框(即跟踪波门,这里我们取64×32 pixels),以实现对100 帧图像的实时跟踪,以下为波门设置源代码:
for m=(Xmean-16):(Xmean+16)
n=Ymean-32;
I(m,n)=1;
end
for m=(Xmean-16):(Xmean+16)
n=Ymean+32;
I(m,n)=1;
end
for n=(Ymean-32):(Ymean+32)
m=Xmean-16;
I(m,n)=1;
end
for n=(Ymean-32):(Ymean+32)
m=Xmean+16;
I(m,n)=1;
end%画出跟踪波门
波门设置后的图像实现(如图5-4所示):
- 波门设置后的图像
通过上图我们不难看出,我们已经找到了正确的波门,并且实现了目标的定位和跟踪,通过以上简单的方法实现了简易图像跟踪系统的设计,并且较稳定地对目标图像进行了跟踪。
以下附上实现简易图像跟踪系统的完整matlab程序:
I0=read_seqim(50);%任意读取一帧图像
figure(1),imshow(I0);%原图像显示
I0=double(I0);
figure(2),hist(I0,300);%原图像直方图显示
T1=50;T2=200;%观察并找出阈值
for i=1:200
I=read_seqim(i);
M=double(I);
for m=1:272
for n=1:512
if (M(m,n)>=T1)&&(M(m,n)<=T2)
M(m,n)=1;%设置背景灰度
else
M(m,n)=0;%设置目标灰度
end
end
end%%图像的分割和阈值处理
X=0;Y=0;X1=0;Y1=0;PINJUN=0;PINJUN1=0;
for m=1:272
for n=1:512
x=m*M(m,n); y=n*M(m,n); pinjun=M(m,n);
X=X+x;Y=Y+y;PINJUN=PINJUN+pinjun;
end
X1=X1+X;
Y1=Y1+Y;
PINJUN1=PINJUN1+PINJUN;
end
Xmean=X1/PINJUN1;
Ymean=Y1/PINJUN1;
Xmean=(Xmean*100-mod(Xmean*100,100))/100;
Ymean=(Ymean*100-mod(Ymean*100,100))/100;
%求取形心的计算
for m=(Xmean-16):(Xmean+16)
n=Ymean-32;
I(m,n)=1;
end
for m=(Xmean-16):(Xmean+16)
n=Ymean+32;
I(m,n)=1;
end
for n=(Ymean-32):(Ymean+32)
m=Xmean-16;
I(m,n)=1;
end
for n=(Ymean-32):(Ymean+32)
m=Xmean+16;
I(m,n)=1;
end%画出跟踪波门
figure(3),imshow(I);%连续读出每一帧图像,连续显示已达到视频播放的效果
end
本文主要介绍了数字图像处理的基本理论,图像的格式,MATLAB 仿真软件和基于MATLAB的数字图像处理环境,介绍了如何利用MATLAB及其图像处理工具箱进行数字图像处理。在第四章详细介绍了图形用户界面,介绍了常用图像操作、GUI的创建及其应用;第五章详细介绍了基于MATLAB的图像跟踪算法,通过学习对图像的读取、图像二值化处理、形心的求取;并都利用MATLAB来实现。
二值图像处理是最简单的技术,能够获得图像的信息;图像增强技术是数字图像处理中最基础和必需的技术;图像复原是最实用的图像处理技术,应用最广泛。
随着计算机处理能力的不断增强,数字图像处理学科在飞速发展的同时,也越来越广泛地向许多其他学科快速交叉渗透,使得图像作为信息获取以及信息的利用等方面也变得越来越重要。目前数字图像处理的应用越来越广泛,已经渗透到工业、医疗保健、航空航天、军事等各个领域,在国民经济中发挥越来越大的作用。
数字图像处理技术的迅速发展给人类带来了巨大的经济社会效益,大到卫星遥感进行全球环境气候检测,小到指纹识别技术在安全领域的广泛应用。MATLAB用更直观的,符合人们思维习惯的代码,代替了C和FORTRAN语言的冗长代码。应用MATLAB友好的界面和丰富、实用、高效的指令及模块,可以使人较快地认识、理解图像处理的相关概念,逐步掌握图像信号处理的基本方法,进而能够解决相关的工程和科研中的问题。
数字图像处理用MATLAB实现更加方便简单,由于在航空航天、生物医学工程、工业检测、机器人视觉、公安司法、军事制导、文化艺术等的领域有重大的成就,使得数字图像处理成为一门引人注目、前景远大的新型学科。研究
这方面的人也越来越多。
[1] 张德丰,《MATLAB数字图像处理》(第二版)[M],北京:机械工业出版社,2012.1
[2] 朱习军,隋思涟,《MATLAB在信号与图像处理中的应用》[M],北京:电子工业出版社,2009.3
[3] 陈超,《MATLAB应用实例精讲——图像处理与GUI设计篇》[M],北京:电子 工业出版社,2011.2
[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],北京:机械工业出版社,2011
[10]陈炳权,刘宏立,《数字图像处理技术的现状及其发展方向》[J],吉首大学学报,2009.01期,2
[11]李红俊,《数字图像处理技术及其应用》[J],中国学术期刊,2002.09期,1
[12]Rafael C.Gonzalez,Richard E.Woods,《Digital image processing》[M],电子工业出版社,2010.1
[13]Rafael C. Gonzalez,Richard E. Woods,Steven L. Eddins,《Digital image processing》(Second Edition)[M],电子工业出版社,2013.4
[14]Mu Dongzhou,《Hybrid Genetic Algorithm Based Image Enhancement Technology》[J],Internet Technology and Applications (iTAP),2011.06期,1
[15]周广芬,李鹏,杨久义.用MATLAB图像处理工具箱进行图形数字化的研究 河北科技大学 2005
要对一幅索引图像滤波,首先必须将它转换成真色彩图像,否则要的作用。图像类型转换模块的实现在许多图像处理工作中,都对图像类型有特定的要求,比如结果是毫无意义的。在MATLAB中,各种图像类型之间的转换关系如图(附图1-1)所示:
附图1-1 各种图像类型之间的转换关系
该模块以索引图像、灰度图像和真色彩图像之间的相互转换为例,具体实现代码如下:
m2bw:该函数的功能是通过设置亮度阈值将真色彩、索引、灰度图像转换成二值图。该函数的调用格式如下:
BW=im2bw(I,level)
BW=im2bw(x,map,level)
BW=im2bw(rgb,level)
分别表示将灰度图像、索引图像和真色彩图像转换成二值图像 BW,level 是归一化的阈值,取值在[0,1]之间。
灰度变换是一种简单而实用的方法,它可以使图像的动态范围增大,图像的对比度扩展,图像变清晰,特征明显,是图像增强的重要手段之一。它可分为比例线性变换、分段线性变换、非线性灰度变换。本例子采用的是分段线性变换。对感兴趣的(20~180)区间进行灰度变换,程序代码如下:
x1= getimage(gco);
figure
imshow(x1)
f0=0;g0=0;
f1=20;g1=10
f2=180;g2=230;
f3=255;g3=255;
figure,plot([f0,f1,
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);
(f<=f2)
)=r1*f+b2;
ow(mat2gray(g))
g(i,j)=0;
if(f>=f1)&g(i,j)
elseif(f>=f2)&(f<=f3)
g(i,j)=r3*f+b3;
end
end
end
figure
imshow(mat2gray(g))
附图2-1 灰度变化
附图2-2 原始图像 附图2-3 灰度图像
运行该程序后,得到分段线性变换后的图像。可以看出,通过这样一个变换,原图中灰度值在(0~20)和(180~255)之间的动态范围减少了,而原图中灰度值在 180~255 之间的动态范围增加了,从而这个范围内的对比度增加了,具体变化为图像中树干以上的区域两度明显增强。