数字图像处理及应用修改三.docx
《数字图像处理及应用修改三.docx》由会员分享,可在线阅读,更多相关《数字图像处理及应用修改三.docx(27页珍藏版)》请在冰豆网上搜索。
数字图像处理及应用修改三
数字图像处理及应用
谢公金
数学学院07级1班
指导教师:
张森
摘要
本文先介绍了数字图像处理的发展现状及其应用优势,再阐述了MATLAB在图像处理方面的强大功能及其工具箱,然后结合实例细致讲述了图像处理各个层面的应用。
MATLAB在数值计算、数据处理、自动控制、图像、信号处理、神经网络、优化计算、模糊逻辑、小波分析等众多领域有着广泛的用途,特别是MATLAB的图像处理和分析工具箱支持索引图像、RGB图像、灰度图像、二进制图像,并能操作*.bmp、*.jpg、*.tif等多种图像格式文件。
灵活地运用MATLAB提供的图像处理分析函数及工具箱,会大大简化具体的编程工作,充分体现在图像处理和分析中的优越性。
关键词:
图像处理灰度图像工具箱
引言
数字图像处理又称计算机图像处理,它是将模拟的图像信号转换成离散的数字信号并利用计算机对其进行处理的过程,其输入是原始图像,输出则是改善后的图像或者是从图像中提取的一些特征,以提高图像的实用性,从而达到人们所要求的预期效果。
数字图像处理技术最早出现于20世纪20年代,但直到20世纪50年代,电子计算机发展到了一定水平,人们才开始利用计算机来处理图形和图像信息。
随着图像处理技术的深入发展,从20世纪70年代开始,计算机技术、人工智能和思维科学研究迅速发展,人们已经开始研究如何用计算机系统解释图像,实现类似人类视觉系统来理解外部世界,这种处理技术成为图像理解或计算机视觉。
随着计算机软件、硬件技术日新月异的发展和普及,图像处理技术已经成为人类生活中不可缺少的一部分。
1.1数字图像处理定义
数字图像处理(DigitalImageProcessing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。
[2]
1.2数字图像处理主要研究的内容
数字图像处理主要研究的内容有以下几个方面:
通过学习数字图像处理及其相关内容,对数字图像有了更深的认识。
数字图像处理涉及到了很多应用,是一门综合性很强的交叉学科,是未来技术向智能化发展的最富有前景,也最富有挑战的领域。
其主要内容有图像变换、图像增强、图像复原、图像压缩、图像分割。
其中主要详谈了图像压缩。
由于图像数据量的庞大在图像的存储、传输、处理时非常困难而图像压缩通过减少图像数据中的冗余信息从而用更加高效的格式存储和传输数据,因此图像数据的压缩就显得非常重要。
图像变换中的变换都是酉变换,即变换核满足正交条件的变换。
经过酉变换后的图像往往更有利于特征抽取、增强、压缩和图像编码。
图像增强是增强图象中的有用信息,将原来不清晰的图像变得清晰或强调某些感兴趣的特征,从而达到增强视觉效果的目的。
图像复原则通过处理退化图像使之更趋近于原图,满足人们视觉上的需要。
图像分割是在一幅图像中,把需要的图像从背景中分离出来,以便于进一步处理。
1.3数字图像处理的基本特点
(1)数字图像处理的信息大多是二维信息,处理信息量很大。
对计算机的计算速度、存储容量等要求较高。
(2)数字图像处理占用的频带较宽。
与语言信息相比,占用的频带要大几个数量级,这就对频带压缩技术提出了更高的要求。
(3)数字图像中各个像素是不独立的,其相关性大。
因此,图像处理中信息压缩的潜力很大。
(4)由于图像是三维景物的二维投影,一幅图象本身不具备复现三维景物的全部几何信息的能力,很显然三维景物背后部分信息在二维图像画面上是反映不出来的。
因此,要分析和理解三维景物必须作合适的假定或附加新的测量,例如双目图像或多视点图像。
在理解三维景物时需要知识导引,这也是人工智能中正在致力解决的知识工程问题。
(5)数字图像处理后的图像一般是给人观察和评价的,因此受人的因素影响较大。
由于人的视觉系统很复杂,受环境条件、视觉性能、人的情绪爱好以及知识状况影响很大,作为图像质量的评价还有待进一步深入的研究。
另一方面,计算机视觉是模仿人的视觉,人的感知机理必然影响着计算机视觉的研究。
2MATLAB在图像处理中的应用
MATLAB6.x提供了近2O种图像处理函数,覆盖了图像处理包括近期研究成果在内的几乎所有的技术方法,平且是学习和研究图像处理的人员难得的宝贵资料和工具箱。
这些函数按功能可分成图像显示、图像文件、图像算术运算、几何变换、图像登记、像素值与统计、图像分析、图像增强、线性滤波、线性二元滤波设计、图像去模糊、图像变换、邻域与块处理、灰度与二值图像的形态学运算、结构元素创建与处理、基于边缘的处理、色彩映射表操作、色彩空间变换及图像类型与类型转换
MATLAB数字图像处理工具箱函数包括以下几类:
(1)图像显示函数;
(2)图像文件输入、输出函数;(3)图像几何操作函数;(4)图像像素值及统计函数;(5)图像分析函数;(6)图像增强函数;(7)线性滤波函数;(8)二维线性滤波器设计函数;(9)图像变换函数;(10)图像邻域及块操作函数;(11)二值图像操作函数;(12)基于区域的图像处理函数;(13)颜色图操作函数;(14)颜色空间转换函数;(15)图像类型和类型转换函数。
2.1常用图像操作
2.1.1图像类型转换
MATLAB图像处理工具箱支持4种图像类型,分别为真彩色图像(RGB)、索引色图像、灰度图像(I)和二值图像(BW)。
由于有的函数对图像类型有限制,因此这4种类型可以用工具箱的类型转换函数相互转换。
MATLAB可操作的图像文件包括BMP,HDF,JPEG,PCX,TIFF和XWD等格式。
例如,要对一幅索引色图像滤波,首先应该将它转换成真彩色图像或者灰度图像,这时MATLAB将会对图像的灰度进行滤波,即通常意义上的滤波。
如果不将索引色图像进行转换,MATLAB则对图像调色板的序号进行滤波,是没有意义的。
CLEAR
Z=IMREAD('C:
\2.jpg');
IMSHOW(Z);
IMWRITE(Z,’C:
\2.bmp','bmp')
图1
函数IM2BW
功能:
将图像转换成二进制图像。
语法:
BW=IM2BW(I,level)
BW=IM2BW(X,map,level)
BW=IM2BW(RGB,level)
例:
loadtrees
BW=IM2BW(X,map,0.4);
IMSHOW(X,map)
FIGURE,IMSHOW(BW)
图2、二进制转换对比图
将彩色影像转换为黑白影像如图2
语法:
I=RGB2GRAY(RGB)
说明:
这个命令是把R.G.B彩色影像转化为黑白的影像。
代码1;
I=IMREAD('C:
\2.jpg');
W=RGB2GRAY(I);
IMSHOW(W)
代码2;
BW=ROICOLOR(W,100,300);
IMSHOW(BW)
图3、色影转换对比图
2.1.2图像文件的读写与显示操作
MATLAB为用户提供了专门的函数,以从图像格式的文件中读写图像数据。
IMREAD0函数用于读入各种图像文件,IMWRITE()函数用于输出图像,IMFINFO()函数用于读取图像文件的有关信息。
把图像显示于屏幕有IMREAD()、IMAGE()等函数。
用SUBPLOT()函数能将一个图像窗口分成几个部分,但同一个图像窗口内只能有一个调色板。
SUBIMAGE函数可在一个图像窗口内使用多个调色板,使得各种图像能在同一个图像窗口中显示,用ZOOM()函数可实现对图像的缩放。
见图4、5
代码:
LOADMRI
MONTAGE(D,map)
图4、医学缩放图
LOADTREES
[X2,map2]=IMREAD('forest.tif');
SUBPLOT(1,2,1),SUBIMAGE(X,map)
SUBPLOT(1,2,2),SUBIMAGE(X2,map2)
图5、风景缩放图
2.1.3图像几何操作
图像的切割
用IMCROP()函数可剪切图像中的一个矩形子图。
CLEAR
W=IMREAD('C:
\2.jpg');
I=IMCROP(W,[150,50,200,200]);
IMSHOW(I)
图6、正常卡通切割图
图像旋转见图6、7
I=IMROTATE(W,-45,'bilinear');
IMSHOW(I)
图7、旋转图
调整大小
B=IMRESIZE(A,m,method)
可返回一个M倍于原图像A的图像B。
将影像显示在圆柱体和球体上
CYLINDER:
产生圆柱体
语法:
[x,y,z]=cylinder(r,n)
说明:
r为一向量,表示圆柱体的半径;n为环绕圆形所设置的点数;用SURF(x,y,z)产生圆柱的表面。
SPHERE:
产生球形表面
语法:
[x,y,z]=SPHERE(n)
说明:
A.产生3个(n+1)-by-(n+1)的矩阵,以供圆形表面使用。
B.如果n值没有指定,则认为n取20
[x,y,z]=SPHERE;
WARP(x,y,x,w)
图8、
2.2图像变换功能
在图像处理技术中,图像的(正交)变换技术有着广泛的应用,是图像处理的重要工具。
通过变换图像,改变图像的表示域及表示数据,可以给后续工作带来极大的方便。
常运用于图像压缩、滤波、编码和后续的特征抽取或信息分析过程。
例如,傅立叶变换(FourierTransform)可使处理分析在频域中进行,使运算简单;而离散余弦变换(DiscreteCosineTransform)可使能量集中在少数数据上,从而实现数据压缩,便于图像传输和存储。
2.2.1傅立叶变换
傅立叶变换的定义
函数f(t)的一维傅立叶变换由下式定义:
其中,
=-1.傅立叶变换是一个线性变换,将一个具有n个实变量的复函数变换为另一个具有n个实变量的复函数。
F(s)的逆变换定义为:
注意:
正反傅立叶变换的唯一区别是幂的符号。
函数f(t)和F(s)被称作一个傅立叶变换对,对任一函数f(t),其傅立叶变换F(s)是唯一的,反之亦然。
二维傅立叶正、反变换分别定义为:
其中,
是一幅图像,F(u,v)是它的频谱。
通常
是两个实变量u和v的复值函数,变量u是对应于x轴的空间频率,变量v是对应于y轴的空间频率。
②离散傅立叶变换
由于实际问题的时间或空间函数的区间是有限的,或者频谱有截止频率。
将
和
的有效宽度同样等分为N个小间隔,对连续傅立叶变换进行近似的数值计算,得到离散的傅立叶变换定义。
(1)一维离散傅立叶变换
离散傅立叶变换是直接处理离散时间信号傅立叶变换。
如果要对一个连续信号进行计算机数字处理,那么就必须经过离散化处理,这样对连续信号进行的傅立叶变换的积分过程就会自然演变为求和过程。
(2)二维离散傅立叶变换
只考虑两个变量,就很容易将一维离散傅立叶变换推广到二维。
一个M×N大小的二维函数f(x,y),其离散傅立叶变换对为
在数字图像处理中,图像一般取样为方形矩阵,即N×N,其傅立叶变换及其逆变换为
③离散K-L变换
K-L变换又称为霍特林变换和主干成分分析。
一般而言,这一方法的目的是寻找任意统计分布的数据集合之主要分量的子集。
相应的基向量组满足正交性且由它定义的子空间最优的考虑了数据的相关性。
将原始数据集合变换到主分量空间使单一数据样本的互相关性降低到最低点。
④小波变换
小波变换的基本思想是通过一个母函数在时间上的平移和在尺度上的伸缩得到一个函数族,然后利用这族函数去表示或逼近信号或函数,获得一种能自动适应各种频变成分的有效的信号分析手段。
其应用的目的是为了得到信号或图像的局部频谱信息。
在图像处理的广泛应用领域中,傅立叶变换起着非常重要的作用,具体表现在包括图像分析、图像增强及图像压缩等方面。
利用计算机进行傅立叶变换的通常形式为离散傅立叶变换,采用这种形式的傅立叶变换有以下两个原因:
一是离散傅立叶变换的输入和输出都是离散值,适用于计算机的运算操作;二是采用离散傅立叶变化变换,可以应用快速傅立叶变换来实现,提高运算速度。
在MATLAB工具箱中,提供了FFT20和IFFT20函数用于计算二维快速傅立叶变换及其逆变换,FFTN0和IFFTN0函数用于计算,t维傅立叶变换和逆变换。
FFT2
功能:
进行二维快速傅里叶变换。
见图9、10
语法:
B=FFT2(A)
B=FFT2(A,m,n)
举例
LOADIMDEMOSSATURN2
IMSHOW(SATURN2)
图9
B=FFTSHIFT(FFT2(SATURN2));
IMSHOW(LOG(abs(B)),[]),COLORMAP(jet(64)),COLORBAR
图10
F=ZEROS(30,30);
F(5:
24,13:
17)=1;
IMSHOW(F,'notruesize')
F=FFT2(F);
F2=LOG(abs(F));
FIGURE,IMSHOW(F2,[-15],'notruesize');
COLORMAP(jet);COLORBAR
2.2.2离散余弦变换
在图像处理工具箱中,DCT20和IDCT2()函数实现二维离散余弦变换及逆变换。
大多数情况下,DCT(DiscreteCosineTransform)用于压缩图像,JPEG图像格式就采用了DCT算法。
在JPEG图像压缩算法中,图像被分成8x8或者16x16的图像块,然后对每个图像块进行DCT变换。
DCT变换被量化、编码及传输。
在接收端,量化的DCT系数被解码,并用来计算每个图像块的逆DCT变换,最后把各图像块拼接起来构成一幅图像。
对一幅典型的图像而言,许多DCT变换的系数近似为0,把它们去掉并不会明显影响重构图像的质量。
DCT2
功能:
进行二维离散余弦变换。
见图11、12、13
语法:
B=DCT2(A)
B=DCT2(A,m,n)
B=DCT2(A,[mn])
举例
RGB=IMREAD('C:
\4.jpg');
I=RGB2GRAY(RGB);
IMSHOW(RGB)
IMSHOW(I)
图11
J=DCT2(I);
IMSHOW(log(abs(J)),[]),COLORMAP(jet(64)),COLORBAR
图12
J(abs(J)<10)=0;
K=IDCT2(J)/255;
IMSHOW(K)
图13
2.2.3RADON变换
图像处理工具箱的RADON()函数是用来计算指定方向上图像矩阵的投影,二元函数投影是在某一方向上的线积分。
如(,y)在垂直方向上的线积分是,在x方向上的投影,在水平方向上的积分是在y方向上的投影。
用IRADON0函数可实现逆RADON变换,常常用于投影成像中,这个变换能把RADON变换反变换回来,故可以从投影数据重建原始图像。
但大多数应用中,很少甚至没有所谓的用原始图像来计算投影。
例如,X射线吸收重建,投影是通过测量X射线辐射在不同角度通过物理切片时的衰减得到的。
原始图像可以认为是通过切面的截面。
这里,图像的密度代表切片的密度。
投影通过特殊的硬件设备获得,而切片内部图像通过IRADON重建的。
这可以用来对活的生物体或者不透明物体实现无损成像。
见图14、15
代码:
IMREAD('C:
\4.jpg');
BW=EDGE(I,'prewitt');
SUBPLOT(1,2,1);
IMSHOW(I),TITLE('原图');
SUBPLOT(1,2,2);
IMSHOW(BW),TITLE('二值边缘图像');
图14
THETA=0:
179;
[R,xp]=RADON(BW,THETA);
IMAGESC(THETA,xp,R);COLOORMAP(jet);
XLABEL('THETA(degrees)');YLABEL('x''');
TITLE('THETA方向对应的RADON变换R随着x''的变化图');
COLORBAR
图15
2.2.4离散小波变换
离散小波变换是对连续小波变换的尺度和位移按照2的幂次进行离散化得到的,又称二进制小波变换。
实际上,人们是在一定尺度上认识信号的。
人的感官和物理仪器都有一定的分辨率,对低于一定尺度的信号的细节是无法认识的,因此对低于一定尺度信号的研究也是没有意义的。
为此,应该将信号分解为对应不同尺度的近似分量和细节分量。
小波分解的意义就在于能够在不同尺度上对信号进行分析,而且对不同尺度的选择可以根据不同的目的来确定。
信号的近似分量一般为信号的低频分量,其细节分量一般为信号的高频分量。
因此,对信号的小波分解可以等效于信号通过了一个滤波器组,其中一个滤波器为低通滤波器,另一个为高通滤波器。
MATLAB工具箱中的DWT0和IDWT0函数可实现一维离散小波变换及其反变换,WAVEDC0和WAVEREC()用于一维信号的多层小波分解和多层重构等。
2.3图像增强功能
图像增强是数字图像处理过程中常用的一种方法,目的是采用一系列技术去改善图像的视觉效果或将图像转换成一种更适合于人眼观察和机器自动分析的形式。
常用的图像增强方法有以下几种。
2.3.1灰度直方图均衡化
均匀量化的自然图像的灰度直方图通常在低灰度区间上频率较大,使得图像中较暗区域中的细节看不清楚。
采用直方图修整可使原图像灰度集中的区域拉开或使灰度分布均匀,从而增大反差,使图像的细节清晰,达到增强目的。
直方图均衡化可用histeq0函数实现。
HISTEQ
功能:
用柱状图均等化增强对比。
见图16、17、18
语法:
J=HISTEQ(I,hgram)
J=HISTEQ(I,n)
[J,T]=HISTEQ(I,...)
举例
I=IMREAD('C:
\4.jpg');
W=RGB2GRAY(I);
J=HISTEQ(W);
IMSHOW(I)
图16
IMSHOW(W)
FIGURE,IMSHOW(J)
图17
IMHIST(W,64)
FIGURE;IMHIST(J,64)
图18
2.3.2灰度变换法
照片或电子方法得到的图像,常常表现出低对比度(即整个图像偏亮或偏暗),为此需要对图像中的每一像素的灰度级进行灰度变换,扩大图像灰度范围,达到改善图像质量的目的。
这一灰度调整过程可以用IMADJUST0函数实现
IMADJUST
功能:
调整图像灰度值或颜色映像表。
见图19、20
语法:
J=IMADJUST(I,[lowhigh],[bottomtop],gamma)
NEWMAP=IMADJUST(map,[lowhigh],[bottomtop],gamma)
RGB2=IMADJUST(RGB1,...)
举例
代码:
J=IMADJUST(w,[0.30.7],[]);
IMSHOW(W)
FIGURE,IMSHOW(J)
图19
LILY=IMREAD('C:
\4.jpg');COLORMAP
IMSHOW(LILY)
J=IMADJUST(LILY,[01],[10],1.5)
FIGURE
SUBIMAGE(J);
图20
2.3.3平滑与锐化滤波
平滑技术常用于平滑图像中的噪声,基本采用在空间域上的求平均值或者中值问题,或在频域上采取低通滤波。
在灰度连续变化的图像中,通常认为与相邻像素灰度相差很大的突变点为噪声。
灰度突变代表了一种高频分量,低通滤波则可以削弱图像的高频成分,平滑了图像信号,但也可能使图像目标区域的边界变得模糊。
而锐化技术采用的是频域上的高通滤波方法,通过增强高频成分减少图像中的模糊,特别是模糊的边缘部分得到了增强,但同时也放大了图像的噪声。
在MATLAB中,各种滤波方法都是在空间域中通过不同的卷积模板(即滤波算子)实现,可用FSPECIAL0函数创建预定义的滤波算子,然后用FILTER0或CONV20函数在实现卷积运算的基础上进行滤波。
WIENER2
功能:
进行二维适应性去噪过滤处理。
见图21、22
语法:
J=WIENER2(I,[mn],noise)
[J,NOISE]=WIENER2(I,[mn])
举例
I=IMREAD('C:
\4.jpg');
J=IMNOISE(W,'GAUSSIAN',0,0.005);
K=WIENER2(J,[55]);
IMSHOW(J)
FIGURE,IMSHOW(K)
图21
数字滤波器
语法:
Y=FILTER2(b,x,'shape')
使用FILTER2滤波器,将一幅影像转换成一幅平面浮雕的影像。
CLEAR
I=IMREAD('C:
\4.jpg');
I2=RGB2GRAY(I);
J=FILTER2([1020;-10-20],I2,'valid');
IMSHOW(I2);
FIGURE,IMSHOW(J,[])
图22
2.3.4真彩色增强
在彩色图像处理中,选择合适的彩色模式是很重要的。
为在屏幕上显示彩色团一定要借用RGB模型,但HIS模型在许多处理中有其独特的优点。
第一,在HIS模型中,亮度分量与色度分量是分不开的。
第二,在HIS模型中,色调与饱和度的概念与人的感知是紧密相连的。
下面调用IMFILTER函数对一幅真彩色图像使用二维滤波器进行滤波,相当与使用同一个二维滤波器对数据的每一个平面单独进行滤波。
见图23
代码:
RGB=IMREAD('C:
\4.jpg');
H=ONES(5,5)/25;
RGB2=IMFILTER(RGB,H);
FIGURE
(1)
IMSHOW(RGE)
FIGURE
(2)
IMSHOW(RGB2)
图23
2.4边缘检测和图像分割功能
边缘检测是一种重要的区域处理方法。
边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景区分开来。
边缘检测是利用物体和背景在某种图像特性上的差异来实现的,这些差异包括灰度、颜色或者纹理特征。
实际上,就是检测图像特性发生变化的位置。
边缘检测包括两个基本内容:
一是抽取出反映灰度变化的边缘点;二是剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线。
如果一个像素落在边界上,那么它的邻域将成为一个灰度级变化地带。
对这种变化最有用的两个特征是灰度的变化率和方向。
边缘检测算子可以检查每个像素的邻域,并对灰度变化率进行量化,也包括对方向的确定,其中大多数是基于方向导数掩模求卷积的方法。
MATLAB工具箱提供的EDGE()函数可针对SOBEL算子、PREWITT算子、ROBERTS算子、LOG算子和CANNY算子实现检测边缘的功能。
基于灰度的图像分割方法也可以用简单的MATLAB代码实现。
[7]
图像分割:
图像分割是指根据灰度、彩色、空间、纹理、几何形状等特征把图像划分成若干个互不相交的区域,使这些特征在同一区域内,表现出一致性或相似性,而在不同区域间表现出明显的不同。
简单的说就是在一幅图像中,把目标从背景中分离出来,以便于进一步处理。
图像的分割包括基于阈值的分割、基于边缘的分割、基于区域的分割、基于运动的分割等。
图像的边缘化处理:
见图24
代码1:
I=IMREAD('C:
\2.jpg');W=RGB2GRAY(I);IMSHOW(W)
代码2:
H=EDGE(W,'CANNY');
IMSHOW(W)
图24
除以上介绍的一些基本的图像处理功能外,还有许多基于数学形态学与二值图像