数字图像处理基础
图形图像处理起源于20世纪20年代,当时通过海底电缆从英国伦敦到美国纽约采用数字压缩技术传输了第一幅数字照片,用来改善图像的质量。此后由于遥感等领域的应用,使得图形图像处理技术逐步得到发展。一直到20世纪50年代,随着大型数字计算机和太空科学研究计划的出现,人们才注意到图像处理的潜力。1964年在美国航空总署的喷气推进实验室开始用计算机技术改善从太空探测器获得的图像。当时利用计算机技术处理由太空船“徘徊者七号”(Ranger 7)发回的月球照片,以校正电视摄影机所存在的几何失真或响应失真。这标志着第三代计算机问世后,数字图像处理开始得到普遍应用。
近年来随着计算机与信息技术的高速发展,数字图像处理技术也得到了快速的发展,目前已成为计算机科学、医学、生物学、工程学、信息科学等领域各学科之间学习和研究的对象。
01. 数字图像
图像是用各种观测系统以不同形式和手段观测客观世界而获得的,可以直接或间接作用于人眼并进而产生视知觉的实体。其最广义的观点是指视觉信息。例如照片、图画、电视画面以及光学成像等。人类的大部分信息都是从图像中获得的。
用计算机进行图像处理的前提是图像必须以数字格式存储,人们把以数字格式存放的图像称之为数字图像。而我们常见的照片、海报、广告招贴画等都属于模拟图像。若要将模拟图像数字化后生成数字图像,需要使用诸如扫描仪之类的
1
图像处理笔记—李恒—2011.6
数字化设备。模拟图像经过扫描仪进行数字化后,或者由数码照相机拍摄的图片,在计算机中均是以数字格式存储的。
为了把图像数字化,必须进行在空间点阵上的抽样和灰度量化两个方面的工作。被抽样的点称为像素,抽样的精度随图像的种类而不同。这样一来,所谓数字图像就是灰度值的二维数组。一个单色静止图像可以用一个二维的光强度函数f(x,y)来表示,其中x与y表示空间坐标,而在任意点(x,y)的f值与在该点图像的亮度(或灰度)成正比。一个数字图像是图像f(x,y)在空间坐标和亮度上都数字化后的图像。可将数字图像视作一个矩阵,矩阵行与列的值决定一个点,而对应的矩阵元素值就是该点的灰度。这种矩阵的元素就是像素,所对应的灰度就是像素值。
表1.1是以数据结构的观点进行分类的图像种类。即在光谱方向、空间方向、时间轴方向上增加维数的图像,可以用多个二维数组来表示。在这里,不管是一个数组还是其集合,总是要组成用计算机容易处理的形式。因此在传送和复制时,只要在计算机内部进行处理,就不会被破坏而能保持完好的再现性。这是数字处理的一大优点。
表1.1 图像的种类 种 类 二值图像 灰度图像 彩色图像 多光谱图像 立体图像 备 注 文字,曲线,指纹等 通常的照片,n=6~8是标准的 根据三基色的表示 遥感图像用,m多为4~8 从左右视点得到的一对图像,用于立体观测 运动图像(时间序列图像){ft(x,y)},t =t1,…,tn 动态分析,动画等 形 式 f(x,y)=0,1 0≤f(x,y)≤2n-1 {fi(x,y)},i=R,G,B {fi(x,y)},i=1,…,m fL,fR 早期在英文里一般用picture代表图像,随着数字技术的发展,现在用image代表离散化的数字图像。图像中每个基本单元叫做图像元素,简称像素(picture element)。对于2-D图像,英文中常用pixel代表象素。对于3-D图像,英文中常用voxel代表其基本单元,简称体素(volume element)。
2
图像处理笔记—李恒—2011.6
02 数字图像处理 0.2.1 数字图像处理的概念
所谓数字图像处理(digital image processing),就是利用计算机对图像进行去除噪声、增强、恢复、分割、提取特征等的理论、方法和技术。由于图像处理是利用计算机和实时硬件实现的,因此也被称为计算机图像处理(computer image processing)。
在计算机处理出现之前,图像处理都是光学、照相处理和视频信号处理等模拟处理。例如,在利用透镜或棱镜的光学演算中使用各种滤光镜,利用胶卷具有的特性曲线进行的处理,在电子回路中的视频信号的处理等,都属于这一范畴。
在人们的日常生活中,图像处理已经得到广泛的应用。例如,利用指纹、虹膜、面部特征等进行身份识别;自动售货机钞票的识别;电脑成像技术等。而在医学领域,计算机图像处理已经成为疾病诊断的重要的手段,譬如显微镜照片、X射线透视、X射线CT(Computer Tomograph,计算机断层摄像)等。
0.2.2 数字图像处理的目的
数字图像处理是利用计算机的计算,实现与光学系统模拟处理相同效果的过程。一般来说,数字图像处理具有如下的目的:
⑴提高图像的视觉质量,以达到赏心悦目的目的。例如,去除称之为噪声等图像质量的退化因素;改变图像的亮度、颜色;增强图像中的某些成份、抑制某些成份;对图像进行几何变换等,从而改善图像的质量,以达到各种想要的艺术效果。
⑵提取图像中所包含的某些特征或特殊信息,以便于计算机分析。如用作模式识别,计算机视觉的预处理等等。这些特征包括很多方面,如频域特性、纹理特性、灰度/颜色特性、边界/区域特性、形状/拓扑特性以及关系结构等。
⑶对图像数据进行变换、编码和压缩,以便于图像的存储和传输。
3
图像处理笔记—李恒—2011.6
0.2.3 数字图像处理的内容
要有效解决众多的图像处理应用问题,必须研究出专门的图像处理方法,大致上可以将这些问题及其数字图像处理方式归纳为以下几类。
1. 图像获取、表示和表现(Image Acquisition, Representation and Presentation) 该过程主要是把模拟图像信号转化为计算机所能接受的数字形式,以及把数字图像显示和表现出来。这一过程主要包括摄取图像、光电转换及数字化等几个步骤。
2. 图像增强(Image Enhancement)
图像增强是用来强调图像的某些特征,以便于作进一步的分析或显示。当无法得知图像退化有关的定量信息时,可以使用图像增强技术较为主观地改善图像的质量。所以,图像增强技术是用于改善图像视感质量所采取的一种重要手段。它所完成的工作包括去除图像噪声,增强图像对比度等。例如,对比度的增强是用来使对比度低的图像更容易显现其特征,而低对比度的可能原因包括光线不足、图像感应器的动态范围不够以及在图像摄取时光圈设定错误等。图像增强的过程本身并没有增加原始资料所包含的信息,仅仅是把图像某些部分的特征更加强调罢了。图像增强的算法通常是交互式的,而且与所考虑的应用有着密切的联系。
3. 图像恢复(Image Restoration)
图像恢复是指在图像退化(图像品质下降)的原因已知时,对图像进行校正,重新获得原始图像的过程。使图像降质的因素有很多,包括感应器或拍摄环境的干扰,感应器的非线性几何失真,没有对焦精确所造成的模糊,摄象机与物体之间相对运动所造成的模糊等。图像恢复最关键的是对每一种退化都需要建立一个合理的模型。退化模型和特定数据一起描述了图像的退化,因此恢复技术是基于模型和数据的图像恢复,其目的是试图将受污染或降质的图像带回到原本不受污染的状况下所应得的干净图像,产生一个等价于理想成像系统获得的图像。虽然图像恢复与图像增强都会造成视觉上较佳的感受,但后者更关心的是图像特征增强或抽取,而不是去除退化或污染。
4
图像处理笔记—李恒—2011.6
4. 图像重建(Image Reconstruction)
图像重建的工作是由几个一维的图像投影来重建出更高维的物体图像。它与图像增强、图像恢复等不同。图像增强和图像恢复的输入都是图像,处理后输出的结果也是图像。而图像重建则是指从数据到图像的处理,即输入的是某种数据,经过处理后得到的结果是图像。一个图像的取得是以平行的X光或者其他的放射穿透光束照射物体,并在物体的背面接收此投影,接着在同一平面上改变光束照射的角度以获得不同的投影,再以某些重建算法将这些投影组合成物体的一个横剖面图像。这种技术主要用于医学图像、雷达图像处理、天文学星象观测、地质研究及无损压缩等。
5. 图像压缩(Image Compression)
图像压缩的目的是降低代表数字图像所需要的数据量,这样做的好处是可以减少图像传输时间以及存储空间。编码是实现图像压缩的重要手段。图像压缩编码主要是利用图像信号的统计特性以及人类视觉的生理学和心理学特性,对图像信号进行高效编码,即研究数据压缩技术,其目的是在保证图像质量的前提下压缩数据,以解决图像数据量大的矛盾。一般来说,图像编码的目的有三个:①减少数据存储量。②降低数据率以减少传输带宽。③压缩数据量,便于特征提取,为后续识别作准备。
从编码技术的发展来看,Kunt提出了第一代、第二代的编码概念。第一代编码是以去除冗余为基础的编码方法,如PCM、DPCM、ΔM、DCT、DFT、W-H变换编码以及以此为基础的混合编码法。第二代编码法多为20世纪80年代以后提出的,如Fractal编码法、金字塔编码法、小波变换编码法、模型基编码法、基于神经网络的编码法等等。这些编码方法有如下特点:①充分考虑人的视觉特性。②恰当地考虑对图像信号的分解与表述。③采用图像的合成与识别方案压缩数据。
6. 图像分割(Image Segmentation)
图像分割就是把图像分成区域的过程。这是从处理到分析的转变关键,也是图像自动分析的第一步。图像中通常包含多个对象,图像处理为达到识别和理解的目的,几乎都必须按照一定的规则将图像分割成区域,每个区域代表被成像的一个部分。图像自动分割是图像处理中最困难的问题之一。人类视觉系统能将所
5
图像处理笔记—李恒—2011.6
观察的复杂景物中的对象分开,并识别出每个物体,但对于计算机来说却是个难题。目前,大部分图像的自动分割还需要人工提供必须的信息来帮助识别,只有一部分领域开始使用。例如印刷字符自动识别(OCR),指纹识别等。
7. 图像分析(Image Analysis)
图像分析是试图从图像中分割、提取并描述某些特征,从而有利于计算机对图像的识别和理解,以产生有用的信息。图像处理应用的目标几乎都涉及到图像分析。要做图像分析,必须使计算机具有某种程度的智能。这些智能的特征包括:①能从含有许多不相干细节的背景中找到所需的信息。②能从范例中学习并将所学知识应用推广到其他状况中。③能从不完整的资料中推断出完整的信息。
0.3 图像工程 0.3.1 图像工程的内涵
图像技术在广义上来说是各种与图像有关的技术的总称。目前人们主要研究的是数字图像,主要应用的是计算机图像技术。这包括利用计算机和其它电子设备进行和完成的一系列工作,以及为完成各种功能而进行的硬件设计及制作等方面的技术。计算机图像技术的历史可以追溯到1946年世界上第一台电子计算机的诞生,但在20世纪50年代计算机主要还是用于数值计算。到20世纪60年代,第三代计算机的研制成功,以及快速傅立叶变换算法的发现和应用,使得对图像的某些计算得以实际实现。20世纪70年代,图像技术有了长足进步,而且第一本重要的图像处理专著(Rosenfeld 1976)也得以出版。进入20世纪80年代,各种硬件的发展使得人们开始处理3-D图像。
由于图像技术得到了极大的重视和长足的发展,人们需要对它们进行综合研究和集成应用,由此出现了图像工程。图像工程的概念在1982年首先提出,当时主要包括有关图像的理论技术,对图像数据的分析管理以及各种应用。图像工程的内容非常丰富,根据抽象程度和研究方法等的不同,可分为图像处理、图像分析和图像理解三个层次。换句话说,图像工程是既有联系又有区别的图像处理、图像分析及图像理解三者的有机结合,另外还包括它们的工程应用。
1. 图像处理
6
图像处理笔记—李恒—2011.6
图像处理的重点是图像之间进行的变换。虽然人们常用图像处理泛指各种图像技术,但比较狭义的图像处理主要是对图像进行各种加工,以改善图像的视觉效果并为自动识别打基础,或对图像进行压缩编码以减少所需的存储空间。
2. 图像分析
图像分析主要是对图像中感兴趣的目标进行检测和测量,以获得它们的客观信息,从而建立对图像的描述。如果说图像处理是一个从图像到图像的过程,则图像分析则是一个从图像到数据的过程。这里的数据可以是目标特征的测量结果,或是基于测量的符号表示,它们描述了目标的特点和性质。
3. 图像理解
图像理解的重点是在图像分析的基础上,进一步研究图像中各目标的性质和它们之间的相互关系,并得出对图像内容含义的理解以及对原来客观场景的解释,从而指导决策。如果说图像分析主要是以观察者为中心来研究客观世界,那么图像理解在一定程度上就是以客观世界为中心,借助知识、经验等来把握整个客观世界。
综上所述,图像处理、图像分析和图像理解是处在三个抽象程度和数据量各有特点的不同层次上。图像处理是比较低层次的操作,它主要在图像像素级上进行处理,处理的数据量非常大。图像分析则进入了中层,分割和特征提取把原来以像素描述的图像转变成比较简洁的非图像形式的描述。图像理解主要是高层操作,基本上是对从描述抽象出来的符号进行运算,其处理过程和方法与人类的思维推理有许多相似之处。
0.3.2 相关学科和领域
图像工程是一门系统地研究各种图像理论、技术和应用的交叉学科。从它的研究方法来看,它可以与数字、物理学、生物学、心理学、电子学、计算机科学等许多学科相互借鉴。从它的研究范围来看,它与模式识别、计算机视觉、计算机图形学等多个专业相互交叉。图像工程的研究进展还与人工智能、神经网络、遗传算法、模糊逻辑等理论和技术有密切的联系。它的发展应用与医学、遥感、通信、文档处理和工业自动化等许多领域也是密不可分的。
7
图像处理笔记—李恒—2011.6
图像工程与计算机图形学(Computer Graphics)、计算机视觉(Computer Vision)、模式识别(Pattern Recognition)等有着密切的关系。图形学原本是指用图形、图表、绘图等形式来表达数据信息的科学。而计算机图形学研究的就是用计算机技术生成这些形式的理论、方法和技术,即由非图像形式的数据描述来生成逼真的图像。它既可以生成现实世界中已经存在的物体的图形,也可以生成虚拟物体的图形,它和图像分析的对象和输出结果正好对调。从狭义上讲,模式识别指的是把基于特征的多维模式空间分成不同类别的识别理论。特别是指不依赖于图形和图像,适用于其他一般的模式分类的理论。模式识别和图形分析比较相似,只是前者试图把图像分解成可用符号较抽象地描述的类别。计算机视觉主要强调用计算机实现人的视觉功能,要用到图像工程三个层次的许多技术,目前的研究内容主要与图像理解相结合。
0.4 数字图像处理的应用
概括的说,数字图像处理技术的主要应用领域如下:
⑴通讯。包括图像传输、电视电话、电视会议等,主要是进行图像压缩甚至理解基础上的压缩。
⑵宇宙探测。由于太空技术的发展,需要用数字图像处理技术处理大量的星体照片。
⑶遥感。航空遥感和卫星遥感图像需要用数字技术加工处理,并提取有用的信息。主要用于地形地质分析,矿藏探勘,森林、海洋、水利、农业等资源调查,环境污染监测,自然灾害预测预报,气象卫星云图处理以及地面军事目标的识别等。由于数据量庞大,因此寻求处理及分析这些图像的自动方法,特别是图像对比度增强、分割及图像识别的技术显得极为重要。
⑷生物医学领域中的应用。图像处理在这一领域的应用非常广泛,无论是临床诊断还是病理研究都大量采用图像处理技术。它的直观、无创伤、安全方便等优点备受青睐。图像处理首先应用于细胞分类、染色体分类和放射图像等。20世纪70年代数字图像处理在医学上的应用有了重大突破。1972年,X射线断层扫描CT得到实用;1977年,白血球自动分类仪问世;1980年,人们实现了CT的立体重建。医学图像的种类包括X光图像、同位素图像、核磁共振图像、超
8
图像处理笔记—李恒—2011.6
声波图像、红外线图像以及显微图像等。对这些图像作对比度增强或伪彩色等的处理可帮助医生诊断疫病。
⑸工业生产中的应用。在生产线中对产品及其部件进行无损检测是图像处理技术的一个重要应用领域。这一领域的应用从20世纪70年代起取得了迅猛的发展,主要有产品质量检测;生产过程的自动控制;CAD和CAM等。
⑹军事、公安等方面的应用。例如军事目标的侦察、制导和警戒系统、自动灭火器的控制及反伪装;公安部门的现场照片、指纹、手迹、人像等的处理和辨识;历史文字和图片档案的修复和管理等。
⑺机器人视觉。机器视觉作为智能机器人的重要感觉器官,其主要任务是进行三维景物理解和识别。机器视觉主要用于军事侦察或处于危险环境的自主机器人;邮政、医院和家政服务的智能机器人;装配线工件识别、定位;太空机器人的自动操作等。
⑻科学可视化。图像处理和图形学的紧密结合,形成了科学研究领域新型的研究工具。例如考古学可用图像处理方法恢复模糊或其他降质状况的珍贵文物图像。
⑼视频和多媒体系统。电视制作系统中广泛使用图像处理、变换、合成;多媒体系统中静止图像和动态图像的采集、压缩、处理、存储和传输等。
⑽电子商务。图像处理技术在这一领域大有可为,如身份认证、产品防伪、水印技术等。
0.5 数字图像处理的发展方向
目前图像处理面临的主要任务是研究新的处理方法,构造新的处理系统,开拓新的应用领域。需要进一步研究的问题有如下几个方面:
⑴在进一步提高精度的同时着重解决处理速度问题。
⑵加强软件研究,开发新的处理方法,特别是要注意移植和见解借鉴其他学科的技术和研究成果,创造出新的处理方法。
9
图像处理笔记—李恒—2011.6
⑶加强边缘学科的研究工作,促进图像处理技术的发展。 ⑷加强理论研究,逐步形成图像处理科学自身的理论体系。 ⑸图像处理领域的标准化。
图像处理技术未来发展方向大致可归纳为:
⑴图像处理的发展将围绕高清晰度电视的研制,开展实时图像处理的理论及技术研究,向着高速、高分辨率、立体化、多媒体化、智能化和标准化方向发展。
⑵图像、图形相结合,朝着三维成像或多维成像的方向发展。
⑶硬件芯片研究。把图像处理的众多功能固化在芯片上,使之更便于应用。 ⑷新理论与新算法的研究。近年来随着一些新理论的引入及新算法的研究,将会成为今后图像处理理论与技术的研究热点。例如小波分析(Wavelet)、人工神经网络(artificial neural networks)、分形几何(Fractal)、形态学(Morphology)、遗传算法(Genntic Algorithms)等。
随着科学技术的进步以及人类需求的不断增加,图像处理科学无论是在理论上还是实践上,都会取得更大的发展。
MATLAB图像处理基础
0.7 图像文件格式及图像类型
0.7.1 MATLAB支持的几种图像文件格式:
⑴JPEG(Joint Photogyaphic Expeyts Group):一种称为联合图像专家组的图像压缩格式。
⑵BMP(Windows Bitmap):有1位、4位、8位、24位非压缩图像,8位RLE(Run length Encoded)的图像。文件内容包括文件头(一个BITMAP
10
图像处理笔记—李恒—2011.6
FILEHEADER数据结构)、位图信息数据块(位图信息头BITMAP INFOHEADER和一个颜色表)和图像数据。
⑶PCX(Windows Paintbrush):可处理1位、4位、8位、16位、24位等图像数据。文件内容包括文件头、图像数据和扩展色图数据。
⑷TIFF(Tagged Iamge File Format):处理1位、4位、8位、24位非压缩图像,1位、4位、8位、24位packbit压缩图像,1位CCITT压缩图像等。文件内容包括文件头、参数指针表与参数域、参数数据表和图像数据四部分。
⑸PNG(Portable Network Graphics):包括1位、2位、4位、8位和16位灰度图像,8位和16位索引图像,24位和48位真彩色图像。
⑹GIF(Graphics Interchange Format):任何1位到8位的可交换的图像。 ⑺HDF(Hierarchial Data Format):有8位、24位光栅图像数据集。 ⑻ICO(Windows Icon resource):有1位、4位、8位非压缩图像。 ⑼CUR(Windows Cursor resource):有1位、4位、8位非压缩图像。 ⑽XWD(X Windows Dump):包括1位、8位Zpixmaps,XYBitmaps,XYPixmmmaps。
⑾RAS(Sun Raster image):有1位bitmap、8位索引、24位真彩色和带有透明度的32位真彩色。
⑿PBM(Portable Bitmap)。 ⒀PGM(Portable Graymap)。 ⒁PPM(Portable Pixmap)。
0.7.2 MATLAB支持五种图像类型
即二值图像、索引图像、灰度图像、RGB图像和多帧图像阵列。
11
图像处理笔记—李恒—2011.6
有关它们的定义见下表2.1
表2.1 图像类型及其对应的像素数据类型
图像类型 二值图图像为m×n的整数矩阵,元素值范围[0,1] 像 索引图图像为m×n的整数矩阵,元素值范围[0,p] 像 灰度图图像为m×n的浮点数矩阵,元素值范围[0,1] 像 RGB图图像为m×n×3的浮点数矩阵,元素值范围[0,1] 像 图像为m×n的整数矩阵,元素值范围[0,1] 图像为m×n的整数矩阵,元素值范围[0,p-1] 图像为m×n的整数矩阵,元素值范围[0,255]或[0,65535] 图像为m×n×3的整数矩阵,元素值范围[0,255]或[0,65535] Double数据 uint8和uint16数据 其中,多帧图像阵列是由多帧图像组成的,每一帧图像可以为前四种图像中的一种,但组成一个多帧图像阵列的图像必须为同一种。cat函数可以将具有相同尺寸的几个独立图像存成多帧文件。对于多帧图像也可以从中提取单帧。
0.8 图像类型判断及转换
1.在MATLAB中如果要判断一个图像文件的类型,可使用如下指令: l isbw:若图像为二值图像,则返回真。 l isgray:若图像为灰度图像,则返回真。 l isind:若图像为索引图像,则返回真。 l isrgb:若图像为RGB图像,则返回真。
2.在MATLAB系统中,要将一个类型的图像文件转换成另一个类型的图像文件,只需将前一个文件的图像数据用imread读出,再用imwrite以适当的格式写到后一个图像文件中去即可。另外,要将灰度图像I转换成RGB图像,可运用cat指令。cat函数可以把一些单一的图像合并成图像序列。在图像序列中每个图像需有相同的大小,如果是索引图像,色图也要一致。
12
图像处理笔记—李恒—2011.6
此外,MATLAB还提供了若干函数,用于图像类型的转换。这些函数有: l dither:用抖动法(dithering)转换图像。该函数通过颜色抖动(颜色抖动即改变边沿像素的颜色,使像素周围的颜色近似于原始图像的颜色,从而以空间分辨率来换取颜色分辨率)来增强输出图像的颜色分辨率。该函数可以把RGB图像转换成索引图像或把灰度图像转换成二值图像。
l gray2ind:灰度图像或二值图像向索引图像转换。 l grayslice:设定阈值将灰度图像转换为索引图像。
l im2bw:设定阈值将灰度、索引、RGB图像转换为二值图像。 l im2double:将图像数组转换为double型。 l im2uint8:将图像数组转换为uint8型。
l im2uint16:将图像数组转换为uint16型。该函数不支持二值图像序列的转换。
l ind2gray:索引图像向灰度图像转换。 l ind2rgb:索引图像向RGB图像转换。 l mat2gray:将一个数据矩阵转换为灰度图像。
l rgb2gray:RGB图像向灰度图像转换或将彩色色图转换成灰度色图。 l rgb2ind:RGB图像向索引图像转换。包含三种不同方法:均衡量化、最小值量化、色图映射。
l im2java:一般图像向Java图像转换。 l label2rgb:标志图像向RGB图像转换。
13
图像处理笔记—李恒—2011.6
0.9 图像的查询及读写
在MATLAB中要查询一个图像文件的信息,只要用imfinfo指令加上文件及其完整路径名即可。函数调用格式为:
info = imfinfo(filename,fmt) info = imfinfo(filename)
参数fmt对应于所有图像处理工具箱中所有支持的图像文件格式。 MATLAB提供了两个重要的用于图像文件的读写的指令,分别是从图像文件中读取数据的imread,以及将数据写入到图像文件中的imwrite。
1.imread的常见调用格式为: A = imread(filename,fmt)
其作用是将文件名用字符串filename表示的,扩展名用fmt表示的图像文件中的数据读到矩阵A中。如果filename所指的为灰度级图像,则A为一个二维矩阵;如果filename所指的为RGB图像,则A为一个m×n×3的三维矩阵。Filename表示的文件名必须在MATLAB的搜索路径范围内,否则需指出其完整路径。
imread的其他几种重要的调用格式为: [X,map] = imread(filename.fmt) […] = imread(filename) […] = imread(URL,…)
[…] = imread(…,idx) (CUR,ICO and TIFF only) […] = imread(…,‟frames‟,idx) (GIF only) […] = imread(…,ref) (HDF only)
[…] = imread(…,‟BackgroundColor‟,BG) (PNG only)
14
图像处理笔记—李恒—2011.6
[A,map,alpha] = imread(…) (ICO,CUR and PNG only)
上面一些参数的含义如下:idx是指读取图标(cur、ico、tiff)文件中第idx个图像,默认值为1。‟frame‟,idx是指读取gif文件中的图像帧,idx值可以是数量、向量或‟all‟。ref是指整数值。alpha是指透明度。
2.imwrite的常用调用格式为: imwrite(A,filename,fmt) imwrite(X,map,filename,fmt) imwrite(…,filename)
imwrite(…,Param1,Val1,Param2,Val2…)
其中imwrite(…,Param1,Val1,Param2,Val2…)可以让用户控制HDF、JPEG、TIFF等一些图像文件格式的输出特性。
在MATLAB中,默认的保存类型是uint8。由于PNG和TIFF格式支持16位的图像,所以保存这类图像时,保存类型就是uint16。
10 图像的显示
显示图像的最基本的手段是使用image函数。该函数还产生了图像对象的句柄,并允许对对象的属性进行设置。此外,imagesc函数也具有image的功能,所不同的是imagesc函数还自动将输入数据比例化,以全色图的方式显示。
imshow函数比image和imagesc更常用,它能自动设置句柄图像的各种属性。imshow可用于显示各类图像。对于每类图像,调用方法如下:
l imshow filename:显示图像文件。
l imshow(BW):显示二值图像,BW为黑白二值图像矩阵。
l imshow(X,map):显示索引图像,X为索引图像矩阵,map为色彩图示。
15
图像处理笔记—李恒—2011.6
l imshow(I):显示灰度图像,I为二值图像矩阵。
l imshow(RGB):显示RGB图像,RGB为RGB图像矩阵。
l imshow(I,[low high]):将非图像数据显示为图像,这需要考虑数据是否超出了所显示类型的最大允许范围,其中[low high]用于定义待显示数据的范围。
有关图像显示的函数或其辅助函数,除了上述的以外,MATLAB还提供了一些用于进行图像的特殊显示的函数。
l colorbar:为图像的显示增加一个颜色条,这一用法对于了解被显示图像的灰度级别特别有用。
l getimage:获取图像数据。
l immovie:将多帧索引图像制作成连续图像格式。其调用格式为: mov = immovie(D,map)
不过这种功能只对索引图像有效,其中D为多帧索引图像阵列,map为索引图像的对应色阶。对于其他类型图像,则需要首先将其转换为索引图像。
l montage:多帧图像的一次显示。它能将每一帧分别显示在一幅图像的不同区域,所有子区的图像都用同一个色彩条。
l movie:播放多帧连续图像。
l subimage:在一个图形区域内显示多个图像。 l truesize:调整图像显示的尺寸。
l warp:显示图像的纹理表面图。前面提到的图像显示手段都只能在二维平面上显示,MATLAB6.5的一个强大功能是能将平面图像显示在空间三维曲面上。这是由warp函数的纹理成图功能来实现的,该功能能通过双线性插值将平面图像投影到三维曲面上。
16
图像处理笔记—李恒—2011.6
l zoom:将图像或二维图形进行放大或缩小显示。zoom本身是是一个开关键,zoom on用于打开缩放模式,zoom off用于关闭该模式,zoom in用于放大局部图像,zoom out用于缩小图像。
至于多个图像的显示,则可分为两个方面:在不同的图形窗口显示不同的图像,可以用figure指令来实现;在同一个图形窗口显示多图,可以用subplot来实现。
11 几个基本术语
在运用MATLAB进行数字图像处理之前,我们必须明确几个基本术语: 1)位图:是根据图像的尺寸和分辨率创建和保存的图像,由扫描输入。 2)矢量图:使用专用软件绘制的,以数学方程式的方式保存的图像,所以矢量图的清晰度与分辨率无关。
3)象素:是图像在计算机显示中的度量单位,可以变化,可大可小。 4)分辨率:是用于度量图像在显示器中清晰程度的一个参数,分辨率越高,图像越清晰。分辨率是与象素相关的,即单位长度上的象素数就是分辨率。由此可知,分辨率越高,象素的几何尺寸就越小。
5)图像文件的大小:指一幅图像在计算机中保存时所占用的磁盘空间,其大小与所用的颜色模式有关。灰度图像中的每一个灰度象素只占用一个字节(8位),RGB图像中红、绿、蓝各占用一个字节。另外,图像文件的大小也直接与其分辨率有关,原因是当分辨率增加时,一幅图像所包含的象素量急剧增加。
6)句柄:通俗地说就是对象的代号或标志,它能使计算机方便地从众多对象中找到所需要的对象并对之加以相应的操作。MATLAB中的句柄图形对象包括轴、文本、菜单、控制框、图像等。
17
图像处理笔记—李恒—2011.6
12 MATLAB 图像文件格式简介
针对MATLAB的数字图像处理功能,我们讨论它可以处理的几种图像文件格式:
A)PCX格式。可处理1、4、8、16、24位等图像数据。文件内容包括文件头 、图像数据、扩展调色板数据。
B)BMP格式,即位图文件,整幅图可视为一个数字矩阵。它包括1、4、8、24位非压缩图像,8位RLE(行程编码)图像。文件内容包含文件头、位图信息数据块和图像数据。选择BMP格式保存一幅灰度模式图像时,可选择以Windows格式保存。而且在选中4位或8位位图时,还可选压缩(RLE)项,在用RLE方式压缩保存后图像将毫无损失。这是用得最广的图像格式之一,在本文中都对这种格式的图像进行操作。
C)HDF格式。有8位,24位光栅图像数据集。
D)JPEG格式。是一种联合图像专家组的图像压缩格式,是目前所用对静止灰度或彩色图像的压缩标准。它实际上定义了3种编码系统:
a.基于DCT的有损编码基本系统,可用于绝大多数压缩场合; b.用于高压缩比、高精度或渐进重建应用的扩展编码系统;
c.用于无失真应用场合的无损系统。JPEG没有规定文件格式、图像分辨率或所用的彩色空间模型,这使它就有可能适用于MATLAB。
D)TIFF格式。处理1、4、8、24位非压缩图像,1、4、8、24位 packbit 压缩图像,1位CCITT压缩图像等。文件内容包括:文件头、参数指针表与参数域、参数数据表和图像数据四部分。它是一种用途广泛的文件格式,其特点是可移植性好,几乎所有的扫描仪及在Windows、Macintosh平台上常用的版面设计软件都支持TIFF文件格式。以这种格式保存的图像文件结构比较复杂,在不压缩存放时文件比较大。
E)XWD格式。1、8位Zpixmaps, Xybitmaps, 1位XYPixmaps。
18
图像处理笔记—李恒—2011.6
F)TGA格式。处理1、4、8、16、24位非压缩图像和行程编码图像。文件包由5个固定长度字段和3个可变长度字段组成。
3.3 MATLAB图像文件类型
根据数据矩阵和图像象素点颜色的匹配关系,MATLAB中的图像可分为三类:索引图像、灰度图像和RGB图像。
1)索引图像:它的数据信息包括一个数据矩阵和一个双精度色图矩阵,它的数据矩阵中的值直接指定该点的颜色为色图矩阵中的某一种。色图矩阵中,每一行表示一种颜色,每行有三个数据,分别表示该种颜色中红、绿、蓝的比例情况,所有元素值都在[0,1]内。
2)灰度图像:它的数据矩阵中的元素值一般都在[0,1]或[0,255]之间,灰度图像根据这些数据利用线性插值来和色图中的颜色种类匹配。
3)RGB图像:图像中每个象素的颜色用三个数据来存储,分别指定红、绿、蓝三原色在象素颜色中的比例关系,组成一个三维数组。
13 MATLAB中图像的存储运算和显示方式
在MATLAB中,数值一般都采用double型(64位)存储和运算,为了节省存储空间,MATLAB为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称为8位型像。函数image能够直接显示8位图像,但8位型数据和double型数据在image中意义不一样,对于索引图像,数据矩阵中的值指定该像素的颜色种类在色图矩阵中的行数。当数据矩阵中的值为0时,表示用色图矩阵中第一行表示的颜色绘制;当数据矩阵中的值为1时,表示用色图矩阵中的第二行表示的颜色绘制该像素,数据与色图矩阵中的行数总是相差1。所以,索引图像double型和uint8型在显示方法上没有什么不同,只是8位数据矩阵的值和颜色种类之间有一个偏差1。调用格式均为image(x); colormap(map);对于灰度图像,uint8表示范围[0,255],double型表示范围[0,1]。可见,double型和uint8型灰度图像不一样,二者转换格式为:
19
图像处理笔记—李恒—2011.6
I8=uint8 (round (I64*255)); I64=double (I8)/255;
反之,imread根据文件中的图像种类作不同的处理。当文件中的图像为灰度图像时,imread把图像存入一个8位矩阵中,把色图矩阵转换为双精度矩阵,矩阵中每个元素值在[0,1]内;当为RGB图像时,imread把数据存入到一个8位RGB矩阵中。
本软件的处理统一针对BMP格式的灰度图。在编程时图像读入与输出均要求转换为uint8型,中间运算处理过程则要用double型。
14 从零开始学用MATLAB
MATLAB一般在编辑框中编程存盘后在命令框内运行,在Figure框中显示图像。在用它作数字图像处理的过程中,最常碰到的问题有:
① 图像读入 imread („文件名.格式‟,‟格式‟),必须是上文提过的MATLAB支持的7种格式之一,而用Photoshop制作的PSD图像保存了所有通道和图层的信息,不能直接用MATLAB来处理。显示图像用imshow (h) 语句,h 为图像句柄;在一幅图片中显示子图用subplot规定子图的位置和大小,用subimage(h)输出子图。输出图像若需要永久保存,则可用imwrite (h,map, ‟filename.bmp‟,‟bmp‟), 写入存储器。注意在该语句前要设置调色板,即map=(gray(256))。
② 结构化程序语句写法不同于C语言。比如if, for 之后要用end 表示这一块结束。有关条件的语句都不用加括号,而用冒号来表示递增,如
for i=1:3:10
表示 i从1以步长3递增到10,即做三次循环。
③ 要注意图像格式的转化。须知不同的图像格式对应不同的处理方式,如果处理与格式不符,将引起错误。比如范例中的图片lena256.bmp表现为灰度图,但其实质仍为RGB图像。如果不用语句rgb2gray将其转化为256级灰度图,经变换后图像会变红或变蓝。
20
图像处理笔记—李恒—2011.6
④ 数组的定义方式与C语言不同。由于C语言中含N个元素的一维数组A的下标从0到N-1,数组定义为A[N];同样的数组,MATLAB规定的下标是从1到N,所以不能再用A[N]来表示数组,只能用它表示数组的第N个元素。赋值时用A代表数组。
⑤ 由于在本演示软件中,涉及较多点运算,所以运行速度较慢。等待时未知其是否顺利运行。这时最好在最外层循环加上计数标志,即变量名,这样对程序运行的影响不大,却可以知道程序的运行情况,有助于查错。但如果在内层循环加标志的话,将大大减慢运行速度。
⑥ 尽管MATLAB允许未定义使用数组,但在实际应用中这样经常出错,特别是遇到在double和uint8型之间的转换时。所以最好还是养成用前定义的习惯,避免出现不必要的错误。
⑦ 在做完一定量的运算后,一般要用Clear清除内存变量,以防影响后面的程序运行。
15 matlab调试工具
在开发函数M文件过程中,不可避免地出现错误,即故障。MATLAB提供了很多函数和方法,帮助调试函数。
在MATLAB表达式中,有两类错误:语法错误和运行错误。当MATLAB计算一个表达式的值或一个函数被编译到内存时会发现语法错误。一旦发现语法错误,MATLAB立即标志这些错误,并提供有关所遇到的错误类型,以及发生错误处M文件的行数。给定这些反馈信息,就很容易纠正这些错误。
而另一方面,即使MATLAB标志了运行错误,但找出错误一般比较困难。当发现运行错误时,MATLAB把控制权返回给命令窗口和MATLAB的工作空间。失去了对发生错误的函数空间的访问权,因此,用户不能询问函数工作空间中的内容排除问题。
当一些操作结果导致空矩阵或NaNs时,最容易发生运行错误。所有有关NaNs的操作都返回NaNs值。因此,如果有可能出现NaNs结果,则当出现NaNs时,最好运用逻辑函数isnan来执行一些缺省操作。因为空矩阵为零维,所以对
21
图像处理笔记—李恒—2011.6
空矩阵寻址常常导致错误。函数find表示了可产生空矩阵结果的一般情况。如果函数find的空矩阵输出用于索引其它数组,所返回的值也将是空的。这样,空矩阵具有传播性质。例如:
>>x=pi*(1 : 4) % example data >>i=find(x>20) % use find function >>y=2*x(i) % propagate the empty matrix
很清楚,当希望y具有有限维数和值时,可能发生运行错误。当执行一个操作或使用可返回空结果的函数时,逻辑函数isempty有利于为空矩阵定义一个缺省值,这样避免运行错误。
有几种调试函数M文件的方法。对于简单的问题,可直接使用下列的方法组合:
1、去掉文件中所选择的行的分号,以便中间结果显示在命令窗口中。 2、在文件中加入显示感兴趣的变量的语句
3、把keyboard命令放在文件中所选择的地方,给键盘暂时控制权。这样,可以查询函数空间并按需要改变其值。
4、在M文件开始,在function语句前加上%,将函数M文件改变为脚本M文件。当MATLAB执行该脚本M文件时,该空间就是MATLAB工作空间。这样,当发生错误时可以询问。
当M文件大,递归调用或者多次嵌套(即调用其它M文件函数,被调用M文件函数又调用其它M文件函数,等等)时,用MATLAB的调试函数会更方便。与上述所列方法相反,这些调试函数不要求将有问题的M文件进行编辑。表3.1所给出的这些函数类似于其它高级编程语言中所提供的函数。有关进一步的信息,以及它们的使用实例,参阅《MATLAB用户指南》。
表3.1
MATLAB调试函数
22
图像处理笔记—李恒—2011.6
dbclear: dbcont: dbdown: dbquit: dbstack: dbstatus: dbstep: dbstop: dbtype: dbup:
取消断点 在断点后恢复运行 工作空间下移 退出调试模式 列出谁调用谁 列出所用的断点 执行一行或多行 设置断点
列出带行号的M文件 工作空间上移
16 图像类型转换函数和实例
默认情况下,matlab将图象中的数据存储为double型,即64位浮点数;matlab还支持无符号整型(uint8和uint16);uint型的优势在于节省空间,涉及运算时要转换成double型。
im2double():将图象数组转换成double精度类型 im2uint8():将图象数组转换成unit8类型 im2uint16():将图象数组转换成unit16类型 图像类型转换函数:
dither() 通过颜色抖动,把真彩图像转换成索引图像或灰度图象转换成二值图像
gray2ind() 将灰度图像(或二值图像)转换成索引图像 grayslice() 通过设定的阈值将灰度图象转换成索引图像
im2bw() 通过设定亮度阈值将灰度、真彩、索引图象转换成二值图像 ind2gray() 将索引图象转换成灰度图象
23
图像处理笔记—李恒—2011.6
ind2rgb() 将索引图象转换成真彩色图像 mat2gray() 将一个数据矩阵转换成一幅灰度图象 rgb2gray() 将真彩转换成灰度图象 rgb2ind() 将真彩转换成索引图象 图像类型与类型间的转换
1.索引图像:包括一个数据矩阵X和一个色图阵MAP。矩阵元素值指向MAP中的特定颜色向量。
2.灰度图像:数据矩阵I,I中的数据代表了颜色灰度值。矩阵中的元素可以是double类型、8位或16位无符号的整数类型。
3.RGB图像:即真彩图像。矩阵中每个元素为一个数组,数组的元素定义了像素的红、绿、蓝颜色值。RGB数组可以是double类型、8位或16位无符号的整数类型。
4.二值图像:一个数据阵列,每个象素只能取0或1。 矩阵的基本运算 行列式求值:det(A) 矩阵加减:+、- 矩阵相乘:*
矩阵左除:A/B %相当于inv(A)*B 矩阵右除:A\\B %相当于A*inv(B) 矩阵的幂:^ 矩阵转置:'
24
图像处理笔记—李恒—2011.6
矩阵求共轭(实部相同,虚部相反):conj(X) 矩阵求逆:inv(X) 级数的求和与收敛
symsum(fun,var,a,b):其中fun是通项表达式,var为求和变量,a为求和起点,b为求和终点;
例如:I为1/[n*(2n+1)]从1到正无穷的和,求I syms n;
f1=1/(n*(2*n+1)); I=symsum(f1,n,1,inf) 计算结果为: I =2-2*log(2) 空间曲面 mesh()函数语法: mesh(Z):
mesh(X,Y,Z,C):其中C是用来定义相应点颜色等属性的数组 例:求x^2+y^2=z的空间曲面 x=-4:4; y=x;
[X,Y]=meshgrid(x,y);%生成x,y坐标
25
图像处理笔记—李恒—2011.6
Z=X.^2+Y.^2; mesh(X,Y,Z) 曲面图
[x,y]=meshgrid(xa,ya) 当xa,ya分别为m维和n维行向量,得到x和y均为n行m列矩阵。meshgrid常用于生成x-y平面上的网格数据;
mesh(x,y,z)绘制网面图,是最基本的曲面图形命令,其中x、y、z是同阶矩阵,表示曲面三维数据;
mesh(xa,ya,z) xa,ya分别为m维和n维向量,z为n行m列矩阵。等价于先[x,y]=meshgrid(xa,ya)再mesh(x,y,z);
surf(x,y,z)绘制曲面图,与mesh用法类似;
contour(x,y,z)绘制等高线图,与mesh用法类似,可指定z的范围; contour3(x,y,z)绘制三维等高线图,与mesh用法类似,可指定z的范围。 空间曲线
例:求方程组的空间曲线 1。化为参数方程组 x=t y=sqrt[t(1-t)] z=sqrt[1-x^2-y^2] 2. 程序 t=0:0.001:1; x=t;
26
图像处理笔记—李恒—2011.6
y=sqrt(t.*(1-t)); z=sqrt(1-x.^2-y.^2); plot3(x,y,z,z,-y,z)
其中.*为数组相乘,.^为数组乘方
matlab实现离散余弦变换压缩(JPEG压缩原理)
比部分上篇文章已经介绍过,为了保持文章的完整性,继续保留。 JPEG图像压缩算法:
输入图像被分成8*8或16*16的小块,然后对每一小块进行二维DCT(离散余弦变换)变换,变换后的系数量化、编码并传输;
JPEG文件解码量化了的DCT系数,对每一块计算二维逆DCT变换,最后把结果块拼接成一个完整的图像。在DCT变换后舍弃那些不严重影响图像重构的接近0的系数。
DCT变换的特点是变换后图像大部分能量集中在左上角,因为左上放映原图像低频部分数据,右下反映原图像高频部分数据。而图像的能量通常集中在低频部分。
实例程序: function Jpeg
I=imread('D:\\MATLAB7\oolbox\\images\\imdemos\\cameraman.tif'); %该图片在安装matlab的目录中找,原图为灰度图象 I=im2double(I);%图像存储类型转换 T=dctmtx(8);%离散余弦变换矩阵 B=blkproc(I,[8 8],'P1*x*P2',T,T');
27
图像处理笔记—李恒—2011.6
%对原图像进行DCT变换 mask=[1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
B2=blkproc(B,[8 8],'P1.*x',mask); %数据压缩,丢弃右下角高频数据 I2=blkproc(B2,[8 8],'P1*x*P2',T',T); %进行DCT反变换,得到压缩后的图像 imshow(I) title('原始图像') figure; imshow(I2) title('压缩后的图像') 应用到的函数:
I=imread('图像文件名') :读取图像数据,保存在矩阵I中;
28
图像处理笔记—李恒—2011.6
imshow(I) :显示灰度图像I,其他用法见matlab帮助; I2=im2double(I1) :把图像数组I1转换成double精度类型;
D=dctmtx(n) :二维离散余弦变换函数,返回n*n离散余弦变换矩阵。 一个n*n的变换矩阵T被定义成: Tpq=1/sqrt(n) 当p=0,0<=q<=M-1;
Tpq=sqrt(2/n)*cos[pi*(2q+1)*p/2n] 当1<=p<=M-1,0<=q<=M-1。
B=blkproc(A,[m n],fun,P1,P2...) :块操作函数。对图像A的每个不同的m*n块应用fun函数,P1,P2等为fun函数参数。在图像边缘用0来扩展;只有当fun的返回矩阵是m*n矩阵时,B和A的大小才相同。
figure:强制生成一个新的个绘图窗口; 非线性方程求解 fsolve(fun,x0,options)
其中fun为待解方程或方程组的文件名; x0位求解方程的初始向量或矩阵; option为设置命令参数 建立文件fun.m: function y=fun(x)
y=[x(1)-0.5*sin(x(1))-0.3*cos(x(2)), ... x(2) - 0.5*cos(x(1))+0.3*sin(x(2))];
29
图像处理笔记—李恒—2011.6
>>clear;x0=[0.1,0.1];fsolve(@fun,x0,optimset('fsolve')) 注: ...为续行符
m文件必须以function为文件头,调用符为@;文件名必须与定义的函数名相同;fsolve()主要求解复杂非线性方程和方程组,求解过程是一个逼近过程。
不定积分与定积分 不定积分:int(fun,var) 例:求∫sinaxsinbxsincxdx syms a b c x
y=sin(a*x)*sin(b*x)*sin(c*x); int(y,x); pretty(ans)
定积分:int(fun,var,a,b) 其中a,b分别为上下限 求解线形方程 solve,linsolve 例:
A=[5 0 4 2;1 -1 2 1;4 1 2 0;1 1 1 1];
%矩阵的行之间用分号隔开,元素之间用逗号或空格 B=[3;1;1;0]
30
图像处理笔记—李恒—2011.6
X=zeros(4,1);%建立一个4元列向量 X=linsolve(A,B)
diff(fun,var,n):对表达式fun中的变量var求n阶导数。 例如:F=sym('u(x,y)*v(x,y)'); %sym()用来定义一个符号表达式 diff(F); %matlab区分大小写
pretty(ans) %pretty():用习惯书写方式显示变量;ans是答案表达式 求极限 limit:
例:limit(F,x,a,left);对表达式F求极限,变量为x,从左边趋近a。 inf:正无穷; -inf:负无穷。 matlab之基本绘图函数 clear:清空内存中的变量;
figure:强制生成一个新的个绘图窗口; syms x y t :声明变量; fplot(函数表达式,绘图区间);
plot(横坐标向量,纵坐标向量,颜色/线形等参数) ezplot(函数表达式):简单的fplot,easy fplot
axis([xmin xmax ymin ymax ...]):设置坐标轴显示范围
31
因篇幅问题不能全部显示,请点此查看更多更全内容