技术凝聚实力专业创新出版第24章图像处理工具箱数字图像处理的研究主要有两个方面:其一是为了便于人工分析而对图像信息的改进,包括图像去噪、增强、图像恢复等;其二是为了便于机器自动理解,对图像进行的分割、理解等。本章主要针对数字图像处理的前一个方面,目的是使读者对利用MATLAB进行图像处理有一个初步的了解,引领读者走过这个“门槛”。这里不准备对MATLAB图像处理工具箱的所有内容逐项做介绍,而着重从基本概念、基本操作入手,抽取一些经常使用的功能,使本章自成体系,主要内容如下:MATLAB数字图像处理中涉及的一些基本概念,基本的图像数据操作;数字图像的灰度变换;数字图像的代数运算;数字图像的几何运算,包括图像缩放、旋转、裁剪;数字图像滤波。技术凝聚实力专业创新出版24.1数字图像基础本节介绍一些与数字图像相关的概念,包括数字图像的采样和量化、数字图像的类型及表示,这些概念以及相关的符号会在本章后续内容中经常用到。本节另一个重要的内容是介绍MATLAB图像数据的读入、显示、输出等操作,这些操作是后续图像处理的前提。技术凝聚实力专业创新出版24.1.1数字图像的生成图像是由“照射”源和形成图像的“场景”元素对光能的反射或吸收相结合而产生的。照射可能由电磁能源引起,如雷达、红外线或X射线,也可能是非传统光源,如超声波等。场景可能是熟悉的物体,也可能是分子、沉积岩、大脑等。图显示了数字图像生成的典型过程,成像系统获取场景反射的能量,并将其映射到图像平面,经过采样和量化即得到数字图像。技术凝聚实力专业创新出版24.1.2图像的类型MATLAB图像处理工具箱为多种类型的数字图像提供了支持,它们不仅在存储方式上存在差别,相应的操作、处理也有所不同,这里着重从存储方式的不同考虑各种图像类型。MATLAB图像处理工具箱支持的图像类型有以下4种。技术凝聚实力专业创新出版24.1.3读写图像数据函数imread从图像文件中读取图像数据,imread支持大多数常用的图像格式,表列出了imread支持的图像格式。技术凝聚实力专业创新出版24.1.4显示图像数据MATLAB图像处理工具箱有两个函数,imshow和imtools可以用于数字图像的显示。imshow是基本的显示函数,例如,对前面已经读入的图像数据I(pout图像数据),在MATLAB命令窗口输入以下代码。imshow(I)技术凝聚实力专业创新出版24.1.5转换图像格式图像格式的转换是图像处理过程中经常要做的工作,往往需要将图像从一种格式转换为另一种格式,这样才能完成某些图像处理任务,之后再将图像转换到原来的格式。图像的转换包括图像类型的转换,如灰度图转换为二值图;以及图像数据存储格式的转换,如uint8型灰度图转换为single型灰度图。下面首先介绍图像类型的转换。函数dither将灰度图转换为二值图或RGB图转换为索引图。X=dither(RGB,map)将RGB图转换为灰度图,这里需要提供一个Colormap;BW=dither(I)将灰度图I转换为二值图。技术凝聚实力专业创新出版24.2图像的灰度变换技术凝聚实力专业创新出版24.2.1图像的直方图灰度图(包括二值图)的直方图表示每个灰度级范围内像素点的个数,索引图的直方图表示每个色条(即Colormap矩阵的每一行)对应的像素点个数。图像的直方图有多种用途,如数字化参数的选择边界阈值的选择(参见图)等。MATLAB图像处理工具箱利用imhist得到灰度图、二值图、索引图的直方图,其一般的调用格式为:imhist(I);imhist(I,n);imhist(X,map)。技术凝聚实力专业创新出版24.2.2灰度变换灰度变换用于改变图像的对比度。例如,对灰度图pout(图24.32),其直方图如图所示。从直方图上可以看到,pout的大部分像素分布在中间较窄的灰度范围内,使得pout整体对比度较低。利用灰度变换,将pout直方图中间部分拉伸至整个灰度范围[0,255]能够增强对比度,MATLAB图像处理工具箱中实现该功能的函数是imadjust。技术凝聚实力专业创新出版24.2.3直方图均衡第24.2.2小节的灰度变换实际上是指定了灰度变换函数的灰度变换,而对不同的图像还需要设定不同的参数,因此这种方法的效率是很低的。直方图均衡能够根据待处理图像的直方图自适应地给出灰度变换函数,使得调整后图像的直方图能尽可能地接近预先定义的直方图。MATLAB图像处理工具箱中利用函数histeq对灰度图和索引图作直方图均衡,histeq一般的调用格式为:J=histeq(I,hgram);J=histeq(I,n);J=histeq(I);[J,T]=histeq(I,...);newmap=histeq(X,map,hgram);newmap=histeq(X,map);[newmap,T]=histeq(X,...)。技术凝聚实力专业创新出版24.3图像的代数运算图像的代数运算具有明显的物理意义,例如对多幅图像求和平均可用于去噪,图像的差可用于缓变背景条件下的动目标检测等。一般地,图像的代数运算是像素对像素的运算,因此上面的矩阵运算是按位运算。图像代数运算不改变图像的数据存储格式,运算过程中均以浮点数进行运算,运算结果转换为原来的数据类型。用户可以利用数组的加减乘除实现图像的代数运算,但是要注意灰度值的取值范围,实际上,MATLAB图像工具箱已经为用户提供了相关的函数用于图像的加、减、乘、除,它们分别是imadd、imsubtract、immultiply、imdivide,这些函数将自动处理图像代数运算过程中的溢出。技术凝聚实力专业创新出版24.3.1图像加法对同一幅受加性噪声污染的图像求平均可以提高图像的信噪比,从而实现图像的去噪。技术凝聚实力专业创新出版24.3.2图像乘法利用1、0组成的掩膜图与待处理图像相乘可以遮住图像的指定部分。技术凝聚实力专业创新出版24.3.3图像减法图像减法可以用于去除背景和运动目标检测等。假设图中间的黑色小方块是一个运动目标,通过图像的减法能够检测到该目标。在MATLAB命令窗口输入以下指令求上图与图的差图像。imshow(imsubtract(I,J))技术凝聚实力专业创新出版24.3.4图像除法图像除法可以产生对彩色或多光谱图像十分重要的比率图像,关于这部分内容,这里不做介绍,读者如有兴趣可以查阅相关的书籍和MATLAB帮助文档。技术凝聚实力专业创新出版24.4图像的几何运算图像的几何运算用改变图像的形状,包括缩放、旋转、扭曲等,如图所示。图像的几何运算涉及空间变换和灰度插值,空间变换防止图像内容支离破碎,灰度插值计算目标图像中对应原图像非整点的像素灰度值。本节将介绍几种最基本的几何运算,包括图像的缩放、旋转和裁剪。技术凝聚实力专业创新出版24.4.1缩放图像MATLAB图像处理工具箱利用函数imresize对图像进行缩放操作,其一般的调用格式为:B=imresize(A,m);B=imresize(A,m,method);B=imresize(A,[mrowsncols],method)。其中A、B分别为输入、输出图像;method是缩放过程中使用的插值方法,可以是’nearest’(最近邻插值)、’bilinear’(双线性插值)或’bicubic’(双立方插值),默认的插值方法是最近邻插值;m为放大因子,m大于1时,图像被放大,小于1时,图像被缩小,也可以分别设置变换后图像的高度mrows和宽度ncols,这能克服放大因子只能对高度和宽度同比缩放的缺陷。技术凝聚实力专业创新出版24.4.2旋转图像MATLAB图像处理工具箱利用函数imrotate对图像进行旋转操作,其一般的一般调用格式为:B=imrotate(A,angle);B=imrotate(A,angle,method)。其中A、B分别为输入、输出图像;angle为逆时针旋转的角度,angle为负时,表示顺时针旋转;method是旋转过程中使用的插值方法,可以是’nearest’(最近邻插值)、’bilinear’(双线性插值)或’bicubic’(双立方插值),默认的插值方法是最近邻插值。旋转操作会使图像尺寸变大,imrotate对原图像边界之外的像素用0填充,显示的是黑色的背景。技术凝聚实力专业创新出版24.4.3裁剪图像通过图像的裁剪操作能够得到图像的部分图,MATLAB图像工具箱利用函数imcrop实现图像的裁剪,其一般的调用格式为:I2=imcrop(I,rect);X2=imcrop(X,map,rect);RGB2=imcrop(RGB,rect)。上述三种调用格式分别用于灰度图(包括二值图)、索引图和RGB图的裁剪。rect定义裁剪的矩形区域,如果不指定rect,MATLAB允许用户通过鼠标选定裁剪区域。例如,对灰度图circuit,在MATLAB命令窗口输入以下指令读入图像数据I,I=imread('circuit.tif');技术凝聚实力专业创新出版24.5线性滤波线性滤波是一类非常重要的图像处理方法,主要用于图像增强、图像去噪等。图像的线性滤波是一种邻域处理(NeighbothoodOperation)方法,输出图像的像素值是输入图像对应像素及其邻域像素的线性组合。本节首先介绍与线性滤波相关的两个概念,即卷积和相关,接着介绍线性滤波函数imfilter,并给出了一些应用例子。技术凝聚实力专业创新出版24.5.1卷积和相关线性滤波可以用卷积实现,输出图像的像素值是输入图像对应像素及其邻域像素的线性加权,权重矩阵称为卷积窗。图说明了图像卷积的过程,图像I为,卷积窗为。现在要计算像素点(2,4)卷积后的结果,卷积过程如下:技术凝聚实力专业创新出版24.5.2线性滤波MATLAB图像处理工具箱利用函数imfilter对图像作线性滤波,其一般的调用格式为:B=imfilter(A,H);B=imfilter(A,H,option1,option2,...)。其中A、B分别为输入、输出图像。线性滤波器可以由相关或卷积实现,默认情况下由相关实现,可以通过设置option3=‘conv’,使线性滤波由卷积实现。H为对应的相关窗或卷积窗;通过设置option1决定线性滤波器对边界的处理方式,’replicate’使用最近邻边界填充,默认情况下option1=0,边界由0填充。技术凝聚实力专业创新出版24.6排序滤波线性滤波通过对邻域像素的线性组合得到输出图像的像素值,这是一种线性处理方法。从上节给出的一些示例中我们可以看到线性滤波在图像去噪方面具有局限性,要么牺牲图像的细节,换得信噪比的提高;要么以信噪比的下降为代价,而保护图像的边缘,这两者往往不能同时兼顾。本节将要介绍的排序滤波是一种非线性处理方法,它在保护图像细节方面有很大的优势,而且信噪比损失不大,在图像处理中有广泛的应用。排序滤波通过对邻域像素的升序排序,取第r个像素值作为输出图像的像素值。排序滤波也有对应的滤波窗口,滤波窗口超出图像边界时需要考虑边界的处理,可以用0填充或是最近邻边界填充等。MATLAB图像处理工具箱中利用函数ordfilt2对图像作排序滤波,其一般的调用格式为:B=ordfilt2(A,order,h)技术凝聚实力专业创新出版24.6.1中值滤波中值滤波是排序滤波的一种,通过取邻域像素值的中位数作为输出图像的像素值。MATLAB图像处理工具箱为中值滤波提供了专门的函数medfilt2,其一般的调用格式为:B=medfilt2(A,[MN])其中A、B为输入输出图像,为滤波窗口的大小,默认情况下。注意:虽然也可以利用odrfilt2实现中值滤波,但是考虑到效率,通常不这样做。技术凝聚实力专业创新出版24.6.2最大(小)值滤波最大值、最小值滤波,通过取邻域像素最大或最小值作为输出图像的像素值。MATLAB图