29
张引,潘云鹤.面向车辆牌照字符识别的预处理算法.计算机应用研究,1999,7:85- 87. [22] 刘玲,张兴会。智能化车牌识别系统研究。仪器仪表学报。2005,25(4),476~478 .
翻译中文
前言
数字图像处理的特点在于需要大量的实验工作来确定给定问题的求解方法。本章将简要地介绍将数字图像处理中的理论与现代软件及成为一个原型环境的方法,其目的是为求解图像处理中的各类问题提供有着良好支持的工具集。 1.1背景知识
图像处理系统基础设计的一个重要特点是测试及试验的有效程度,正常情况下,这在得出可接受的解决办法之前是需要的。这一特点意味着公式化方法和快速圆形候选求解方法的是现在减少运算开销及时间方面会起重要作用。
以教学素材的方式在软件环境的充分支持下填补理论与应用之间空白的著作并不多。本书的主要目的是将宽泛的理论概念与现代图像处理软件工具实现这些概念所需要的知识集成在一本书中。在后续章节中,素材的基础理论主要源于Gonzalez and Woods所著(并由Prentice Hall出版社出版)的教材《数字图像处理》。软件原码和支持工具基于Math Works公司的MATLAB图形处理工具箱中的软件包。本书的素材与Gonzalez and Woods所著的教材《数字图像处理》中描述的结构、符号及风格相同,这样,两本书相互参考就简单多了。
本书自成体系。为了掌握本书的内容,读者应有图像处理方面引导性的准备,学习过本科高年级或研究生一年级的正规课程,或者具有自学变成所必需的背景。读者还应熟悉MATLAB以及初步的计算机编程基础知识,例如要有大学二年级获三年级水平的面向技术的编程语言方面的指示。由于MATLAB是面向数组的语言,所以矩阵分析的基本知识也很有用。
本书的特点是以原理为基础,通过教材的形式进行组织和表达,而不是一本手册。因此,在开发任何新的编程设想之前首先会介绍理论和软件的基本概念。利用大量的例子说明并且进一步阐述本书的材料,这些例子涵盖了从医学和工业检测到遥感和天文。这一方法可以从简单概念到图像处理高级算法的实现循序渐进地介绍。然而,已经熟悉MATLAB、IPT和图像处理基础的读者可以直接进入感兴趣的特殊应用,在这种情况下,书中的函数就可作为IPT函数的一种扩展来使用。本书中开发的所有函数都有丰富的文档资料,并且每个函数的源代码都包含在各章节或附录C。 本书后续章节中开发了60多个函数。这些函数把IPT中大约175个函数及补充并扩展了近35%。另外,为了配合特殊应用,新汉书还举了例子,这些例子说明了八已有的MATLAB和IPT函数与新的源码结合在一起的方法,以便在数字图像处理较宽泛的领域内开发原型求解方案。工具箱函数以及本书中开发的函数可在大多数操作系统下运行。本书的WEB站点提供了一个完整的列表。 1.2什么是数字图像处理
一幅图像可以定义为一个二维函数f(x,y),其中x 和y是空间坐标,而f在任意一对坐标(x,y)
处的幅度称为该点处图像的亮度或灰度。当x,y和f的幅值都是有限的离散值时,称该图像位数字图像。数字图像处理就使用计算机处理数字图像。注意,数字图像是由有限数量的元素组成的,每个元素都有一个特殊的位置和数值。这些元素成为画素或像素。像素是广泛用于定一数字图像元素的术语。第2章中将正是地讨论这些定义。
视觉是我们感觉中最高级的,因此,图像在人类赶制中起着最重要的作用并不令人奇怪。然而,人类的视觉限制在电磁波谱的可视波段,而成像机器几乎覆盖了全部电磁波谱,其范围从伽玛射线靠无线电波。他们还可以在人类不常涉及的图像源所产生的图像上进行处理,包括超声波、电子显微镜和计算机产生的图像。这样,数字图像处理就包含了很宽泛的应用领域。
图像处理所涉及的领域到底有多广,作者们并无统一的见解。有时,人们将图像处理为其输入和输出均是图像的一个科学。但我们认为这存在局限性,并有点认为界定的意思。例如,在这种定义之下,计算图像的平均亮度这种简单任务将不被认为是图像处理操作。另外,存在像计算机视觉这样的领域,其最终目的使用计算机来模仿人类视觉,包括学习和推理,并根据视觉输入采取相应的行动。该领域本身是人工智能的一个分支,其目的是模仿人类智能。人工智能的研究领域从发展的意义上看还处于初始阶段,迄今站要比预期的慢得多。图像分析领域(也称图像理解)介于图像处理和计算机视觉之间。
图像处理和计算机视觉之间并没有明显的界限,但我们可通过考虑三种类型的计算机化处理来加以划分:地基、中级和高级处理。低级处理包括原始操作,如降低噪声的图像预处理、对比度增强和图像锐化。低级处理的特点是其输入与输出均为图像。图像的中级处理涉及诸如分割这样的任务,几把土乡分为区域或对象,然后对对象进行描述,以便把他们简化为师和计算机处理的形式,并对单个对象进行分类(识别)。中级处理的特点是,其输入通常是图像,但输出则是从这些图像中提取的属性(诸如边缘、轮廓以及单个对象的特征)。最后,高级处理通过执行通常与人类视觉相关的感知寒暑,来队是别的对象进行总体确认。
基于前面的注释,我么可知图像处理和图像分析之间的重叠之处是图像中单个区域或对象的识别。这样,本书中所谓的数字图像处理就包含了其输入和输出都是图像的过程,从图像中提取特征的过程,以及对单个对象进行识别的过程。为说明这些概念,我们现在考虑文本的自动分析这一领域。该领域的图像获取过程,包括文本、于处理图像、提取(分割)个别字符、以适应计算机处理的形式描述字符以及识别这些个别字符,就在本书中所谓的数字图像处理范围之内。弄清这些内容后就了解了图像分析和计算机是觉得领域。正像我们所定义的那样,数字图像处理已成功用于许多领域,给人们带来了巨大的社会和经济价值。
如前一章所述,MATLAB为数字图像处理来了一套广泛的函数,这些函数处理的是多位数组,而土乡(二位数值数组)正是多维数组的一种特例。图像处理工具箱(IPT)扩展MATLAB是数值计算能力的函数,这些函数与MATLAB语言的简洁表示,使得大量的图像处理操作可以按简洁明了的编码方式进行,从而为求解图像出问题提供一个理想的软件圆形环境。在这一章中,我们将介绍MATLAB表示法的基本知识,讨论大量的IPT基本属性和寒暑,并介绍能进一步增强IPT的程序设计概念。因此,本章中的内容是后续大部分章节的内容的基础。 2.1数字图像的表示
一幅图像可以被定为一个二维函数f(x,y),其中x和y是空间(平面)坐标,f在任何坐标电(x,y)处的振幅成为图像在该点的亮度。灰度是用来表示黑白图像亮度的一个术语,而擦色图像是由单个二位图像组合形成的。例如,在RGB彩色系统中,一幅彩色图像是由三幅独立的分量图像(红、
绿、蓝)组成的。因此,许多为黑白图像处理开发的技术适用于彩色图像处理,方法是分别处理三幅独立的分量图像即可。彩色图像处理将在第6章详细讲解。
图像关于x和y坐标以及振幅连续。要将这样的一幅图像转换成数字形式,就要求数字化坐标和振幅。将坐标值数字化成为取样;将振幅数字化成为量化。因此,当f的x,y分量和振幅都是有限且离散的量时,称该图像位数字图像。 2.1.1坐标约定
取样和量化的结果是一个实数矩阵。在本书中,我们使用两种主要的方法来表示数字图像。假设对一幅图像(x,y)取样后,得到了一幅有着M行和N烈的图像。我们称这幅图像的大小位M*N。坐标(x,y)的值是离散量。为使符号表示清洗和方便,我们为这些离散坐标使用整数值。在很多图像处理书籍中,图像原点定义在(x,y)= (0,0)处。沿图像第一行的下一座标值为(x,y)=(0,0)。注意,符号(0,1)用来表示沿第一行的第二个取值,而不表试图像在取样时的实际物理坐标值。
工具箱中用于表示数组的坐标约定于前段所述的坐标约定有两处不同。首先,工具箱使用(r,c)而不是(x,y)来表示行于列,但坐标顺序与前段所述的坐标顺序一致。在这种情况下,坐标元组(a,b)的第一个元素表示行,第二个元素表示列。另一区别是该坐标系统得原点在(r,c)=(1,1)处。因此,r是从1到M的整数,c从1到N的整数。
IPT文档将之成为像素坐标。IPT还采用另一种较少使用的坐标约定,称为空间坐标,这种坐标使用x来表示列,使用y来表示行。这与我们所用的变量x与y正好相反。在本书中,除少量例外外,我们将不使用IPT的空间坐标约定,但读者在IPT文档中一定会遇到这种术语。 2.2读取图像
使用函数imread可以将图像读入MATLAB环境,imread的语法为
Imread(‘filename’)
其中,filename是一个含有图像文件全名的字符串(包括任何可用的扩展名)。例如,命令行 >>f=imread(‘chestxray.jpg’);
将JPEG图像chestxray读入图像数组f。注意,这里使用单引号(‘)来界定filename字符串。命令行结尾处的分号在MATLAB中用于取消输出。若命令行中未包含分号,则MATLAB会立即显示该行中指的运算的结果。在MATLAB命令行窗口中出现的提示符(〉〉)指明了命令行的开始。 就像上面的这个命令行一样,当filename中不包含任何路径信息时,imread会从当前目录中寻找并读取图像文件。若当前目录中没有所需要的文件,则它会尝试在MATLAB搜索路径中寻找该文件。要想读取指定路径中的图像,最简单的办法就是在filename中输入完整或相对的路径。 〉〉f=imread(‘D:\\myimages\\chestxray.jpg’);
从驱动器D上名位myimages的文件夹中读却图像文件读取图像文件chestxray.jpg;而 〉〉f=imread(‘.\\myimages\\chestxray.jpg’);
从当前的工作目录中名为myimages的子目录中读取图像文件chestxray.jpg。MATLAB桌面工具条上的当前目录窗口会显示MATLAB的当前工作路径,并提供一种非常简单的方法来手工改变当前的路径。 2.3显示图像
在MATLAB桌面上图像一般是用函数imshow来显示,该函数可基本语法为
Imshow(f,G)
其中,f是一个图像数组,G是显示该图像的灰度级数。若将G省略,则默认的灰度级数是256。语法
Imshow(f,[low high])
会将所有小于或等于low的值都显示为黑色,所有大于或等于high的值都显示为白色。介于low和high之间的值将以默认的级数显示为中等亮度值。最后,语法
Imshow(f,[ ])
可以将变量low设置为数组f的最小值,将变量high设置为数组f的最大值。函数imshow的这一形式在显示一幅动态范围较小的图像或既有正值又有负值的图像是非常有用。
函数pixval经常用来交互地显示单个像素的亮度值。该函数可以显示覆盖在图像上的光标。当光标随着鼠标在图像上移动时,光标所在位置的坐标和该点的亮度值会在该图形窗口的下方显示出来。处理彩色图像时,红、绿、蓝分量的坐标也会显示出来。若按下鼠标左键不放,则pixal将显示光标初始为之间的欧几里得距离。此处应注意的事,语法
Pixal
会在上一次显示的图像上显示光标。单击光标窗口上的X按钮可将其关闭。 2.4保存图像
使用函数imwrite可以图像写到磁盘上,该函数的语法为
Imwrite(f,’filename’)
在该语法结构中,filename中包含的字符串必须是一种可视别的文件格式扩展名。换言之,所要使用的文件格式要由第三个输入参量明确地指定。例如,下面的命令可将图像f写为TIFF格式且名为
Patient10_run1的文件:
>>imwrite(f,’patient10_run1’,’tif’) 或
〉〉imwrite(f, ’patient10_run1.tif’)
若filename中不包含路径信息,则imwrite会将文件保存到当前的工作目录中。
函数imwrite可以有其他的参数,具体取决于所选的文件格式。后续章节中的大部分工作都是处理JPEG或TIFF格式的图像,所以我们将注意力放在这两种格式上。 另一种常用但只适用于JPEG图像的函数是imwrite,其语法为
Imwrite(f,’filename.jpg’,’quality’,q)
其中,q是一个在0到100之间的整数(由于JPEG压缩,q越小,图像的退化就越严重)。 2.6图像类型 2.6.1亮度图像
一幅亮度图像是一个数据矩阵,其归一化的取值表示两度。若亮度图像的像素都是uint8类或uint16类,则他们的整数直翻胃分别是[0,255]和[0,655365]。若图像是double类,则像素的取值就是浮点数。规定双精度型归一化亮度图像的取值范围是[0,1]。 2.6.2二值图像
二值图像在MATLAB中具有非常特殊的意义。一幅二值图像是一个取值只有0和1的逻辑数组。因而,一个取值只包含0和1的uint8类数组,在MATLAB中并不认为是二值图像。使用logical函数可以把数值数组转换为二值数组。因此,若A是一个由0和1构成的数值数组,则可使用如
下语句创建一个逻辑数组B:
B=logical(A)
若A中含有除了0和1之外的其它元素,则使用logical函数就可以将所有非零的量变换为逻辑1,而将所有的0值变换为逻辑0。使用关系和逻辑运算符也可以创建逻辑数组。 要测试一个数组是否为逻辑数组,可以使用函数islogical:
Islogical(c)
若c是逻辑数组,则该函数返回1;否则,返回0。 2.6.3术语注释
前两节用了大量的笔墨来阐明术语“数据类”和“图像类型”。通常,在我们提到一幅图像时,是指一幅“data_class image_type图像”,其中的data_class是一种类,而image_type则是本节开始时定义的图像类型之一。因此,一幅图像的特性是由数据类和图像类型这两者来表征的。例如,“uint8亮度图像”表示一幅像素都是uint8数据类的亮度图像。工具箱中的有些函数支持所有的数据类,而有些函数只支持特殊的数据类。例如,前面提到的二值图像中的像素只能是logical数据类。