MATLAB在数字图像处理中的应用课件_第1页
MATLAB在数字图像处理中的应用课件_第2页
MATLAB在数字图像处理中的应用课件_第3页
MATLAB在数字图像处理中的应用课件_第4页
MATLAB在数字图像处理中的应用课件_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MATLAB在数字图像处理中的应用

MATLAB中,一幅图像可能包含一个数据矩阵,也可能包含一个颜色映射表矩阵。

MATLAB中有4种基本的图像类型:(1)索引图像;(2)灰度图像;(3)RGB图像(4)二值图像1、索引图像MATLAB在数字图像处理中的应用MATL1索引图像包括一个数据矩阵X,一个颜色映像矩阵map。其中map是一个包含三列和若干行的数据矩阵,其每一个元素的值均为【0,1】之间的双精度浮点型数据。map矩阵的每一列分别表示红色、绿色和蓝色的颜色值。在MATLAB中,索引图像是从像素值到颜色映射表值的“直接映射”。像素颜色由数据矩阵X作为索引指向矩阵map进行索引。例如,值1指向矩阵map中的第一行,2指向第二行,依次类推。索引图像包括一个数据矩阵X,一个颜色映像矩阵map。2….41568…..….28379……….……………….0000.29460.12340.23450.32450.25890.3689……[X,map]=imread(‘trees.tif’)image(X)colormap(map)….41568…..03显示结果如图6.4.1所示:2、灰度图像MATLAB中,一幅灰度图像是一个数据矩阵I,其中I中的数据均代表了在一定范围内的颜色灰度值。MATLAB把灰度图像存储为一个数据矩阵,该数据矩阵中的的元素分别代表了图像中的像素。在MATLAB中,要显示一幅灰度图像,需要调用函数imagesc(即imagescale,图像缩放函数)。例6.4.2用imagesc函数显示一幅灰度图像。显示结果如图6.4.1所示:2、灰度图像4>>x=imread('trees.tif');>>imagesc(x);>>colormap(gray)显示结果如图6.4.2所示:3、RGB图像RGB图像,即真彩图像,在MATLAB中存储为n×m×3的数据矩阵。数组中的元素定义了图像中每一个像素的红、绿、蓝颜色值。像素的颜色由保存在像素位置上的红、绿、蓝的灰度值的组合来确定。>>x=imread('trees.tif');5图形文件格式把RGB图像存储为24位的图像,红、绿、蓝分别占8位。例6.4.3调用image函数显示RGB图像。>>RGB=imread('flowers.tif');>>image(RGB)显示结果如图6.4.3所示:4、二值图像与灰度图像相同,二值图像只需要一个数据矩阵,每个像素只取两个灰度值。图形文件格式把RGB图像存储为24位的图像,6例:用imshow函数显示一个二值图像。>>imshowcircles.tif显示结果如图6.4.4所示:5、在一个图形窗口中显示多幅图像为了便于在多幅图像之间进行比较,需要将这些要比较的图像显示在一个图形窗口中,用subimage函数。subimage(X,map),subimage(I),subimage(RGB)分别用于显示索引色、灰度及真彩色图像。subimage(x,y,…)表示将图像按指定的坐标系(x,y)显示。例:用imshow函数显示一个二值图像。>7RGB1=imread(‘football.jpg’);RGB2=imread(‘greens.jpg’);I1=imread(‘rice.tif’);I2=imread(‘testpat1.tif’);subplot(2,2,1);subimage([0,500],[0,500],RGB1);subplot(2,2,2);subimage([0,500],[0,500],RGB2);RGB1=imread(‘football.8subplot(2,2,3);subimage([0,500],[0,500],I1);subplot(2,2,4);subimage([0,500],[0,500],I2);subplot(2,2,3);96、增强对比度X1=imread('pout.tif');figure,imshow(X1)f0=0;g0=0;f1=70;g1=30;f2=180;g2=230;f3=255;g3=255;figure,plot([f0,f1,f2,f3],[g0,g1,g2,g3])6、增强对比度X1=imread('pout.tif');10axistight,xlabel('f'),ylabel('g')title('intensitytransformation')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;axistight,xlabel('f'),ylabel(11[m,n]=size(X1);X2=double(X1);fori=1:mforj=1:nf=X2(i,j);g(i,j)=0;if(f>=0)&(f<=f1)g(i,j)=r1*f+b1;[m,n]=size(X1);12elseif(f>=f1)&(f<=f2)g(i,j)=r2*f+b2;elseif(f>=f2)&(f<=f3)g(i,j)=r3*f+b3;endendendfigure,imshow(mat2gray(g))elseif(f>=f1)&(f<=f2)13原图像、变换曲线和处理后的图像如下:原图像、变换曲线和处理后的图像如下:14MATLAB在数字图像处理中的应用课件157、利用MATLAB工具箱中的函数imadjust()增强对比度。代码如下:X1=imread('pout.tif');figure,imshow(X1)J=imadjust(X1,[0.250.6],[],1.2322);figure,imshow(J)7、利用MATLAB工具箱中的函数imadjust()增16J=adjust(I,[lowhigh],[bottomtop],gamma)表示返回图像I经调整后的图像J。[lowhigh]为原图像中要变换的灰度范围,[bottomtop]指定了变换后的灰度范围,其中low,high,bottom,top的取值范围都使0~1,并且low<high,bottom<top,这是因为在MATLAB中将0~255的灰度范围影射到0~1的范围内。gamma为矫正量,它指定了变换曲线的形状,描述了I和J的值之间的关系;通常当gamma大于1时,图像变暗,而当gamma小于1时,图像变亮。J=adjust(I,[lowhigh],178、采用对数形式的变换函数进行动态范围压缩。g=c*log(1+f)其中,c是比例尺常数,运行如下代码段实现对数变换:X1=imread('circuit.tif');figure,imshow(X1)[m,n]=size(X1);X2=double(X1);fori=1:m8、采用对数形式的变换函数进行动态范围压缩。18forj=1:ng(i,j)=c*log(X2(i,j)+1);endendfigure,imshow(mat2gray(g));9图像二值化处理。forj=1:n9图像二值化处理。19X1=imread('pout.tif');figure,imshow(X1)f1=100;figure,plot([0,f1,f1,255],[0,0,255,255,])axistight,xlabel('f'),ylabel('g')title('intensitytransformation')[m,n]=size(X1)X2=double(X1);X1=imread('pout.tif');20fori=1:mforj=1:nf=X2(i,j);g(i,j)=0;if(f>=0)&(f<=f1)g(i,j)=0;elseif(f>=f1)&(f<=255)g(i,j)=255;fori=1:m21endendendfigure,imshow(mat2gray(g))变换曲线和变换结果分别如下图:end变换曲线和变换结果分别如下图:22MATLAB在数字图像处理中的应用课件2310、实现直方图均衡化用J=histeq(I,n)函数来完成这项工作,其中I是原始图像矩阵,J是变换后所得的图像矩阵。实现代码如下:I=imread('tire.tif');J=histeq(I);imshow(I)figure,imshow(J)figure,imhist(I,64)figure,imhist(J,64)10、实现直方图均衡化用J=histeq(24原始图像原始直方图

原始图像25直方图均衡化所得图像直方图均衡化后的直方图直方图均衡化所得图像直方图均衡化后的直方图2611、实现直方图规定化I=imread('tire.tif');hgram=0:225J=histeq(I,hgram);imshow(I)figure,imshow(J)figure,imhist(J,64)11、实现直方图规定化I=imread(27J=histeq(I,hgram)可实现直方图规定化,其中hgram是由用户指定的矢量,规定将原始图像I的直方图近似变换成hgram。

J=histeq(I,hgram)可实现直方图28使用直方图均衡化得到的结果在一些较暗的区域有些细节仍不太清楚;规定化所得的结果比均衡化更亮,对应于均衡化图像中较暗区域的一些细节更清晰。从直方图上看,灰度值高的一边更为密集。二、图像间的代数运算

代数运算是指对两幅图像进行点对点的加、减、乘、除计算而的到输出图像的运算。1.图像相减运算设有图像f(x,y)和h(x,y),它们的差为:使用直方图均衡化得到的结果在一些较暗的区域有29g(x,y)=f(x,y)-h(x,y)图像相减可以用于去除一幅图像中所不需要的加性图案,加性图案可能是缓慢变化的背景阴影、周期性的噪声,或在图像上每个象素处均已知的附加污染等。减法也可以用于检测同一场景的两幅图像之间的变化。例如通过对一场景的序列图像的减运算可检测运动。在计算用于确定物体边界位置的梯度时,也要用到图像减运算。g(x,y)=f(x,y)-h(x,y30例1显示采用离散余弦变换压缩的图像与原图像的差别。用原图像与压缩后的图像相减,实现代码如下:I=imread('cameraman.tif');I=double(I)/255;T=dctmtx(8);B=blkproc(I,[88],'P1*x*P2',T,T');例1显示采用离散余弦变换压缩的图像与原图像的差别。31mask=[1111000011100000110000001000000000000000000000000000000000000000];mask=[1111000032B2=blkproc(B,[88],'P1.*x',mask);I2=blkproc(B2,[88],'P1*x*P2',T',T);imshow(I),figure,imshow(I2)M=I2-I;figure,imshow(mat2gray(M))B2=blkproc(B,[88],'P1.*x',mas33

原始图像经压缩、解压后的图像相减所得图像

342.图像相加运算设有图像f(x,y)和h(x,y),它们的和为g(x,y)=f(x,y)+h(x,y)图像相加的一个重要应用是对同一场景的多幅图像求平均值。这种方法经常用来有效地降低加性随机躁声的影响。图像相加也可以用来将一幅图像的内容叠加到另一幅图像上去,以达到二次暴光的效果。例1实现图像相加。I=imread('saturn.tif');figure,imshow(I)2.图像相加运算设有图像f(x,y)和h(x,y),它35[m,n]=size(I);J(m,n)=0;fori=1:3X=imnoise(I,'gaussian');figure,imshow(X)Y=double(X);J=J+Y/3;endfigure,imshow(mat2gray(J))[m,n]=size(I);36MATLAB在数字图像处理中的应用课件37图6.4.1索引图像

图6.4.1索引图像38图6.4.2灰度图像图6.4.2灰度图像39图6.4.3真彩图像图6.4.3真彩图像40图6.4.4二值图像图6.4.4二值图像41三.边缘检测常用的边缘检测算子有Robert算子、Sobel算子、Prewitt算子、LOG算子、Canny算子,以下分别进行介绍。1.Robert算子Robert算子是一种利用局部差分算子寻找边缘的算子,其模板如图所示。

100-101-10Robert算子三.边缘检测常用的边缘检测算子有Robert算子42在MATLAB中可以由函数实现,语法格式如下:BW=edge(I,’roberts’)BW=edge(I,’roberts’,thresh)BW=edge(I,’roberts’)自动选择阈值用Robert算子进行边缘检测。BW=edge(I,’roberts’,thresh)根据所指定的敏感度阈值thresh用Robert算子进行边缘检测,它忽略了所有小于阈值的边缘。当thresh为空([])时,自动选择阈值。在MATLAB中可以由函数实现,语法格式如下:432.Sobel算子Sobel算子的两个卷积计算核如图所示,图像中的每个点都用这两个核做卷积,第一个核对水平边缘响应最大,第二个核对垂直边缘响应最大。

121000-1-2-110-120-210-1

2.Sobel算子Sobel算子的两个卷积计算44edge函数实现的语法格式如下:BW=edge(I,’sobel’)BW=edge(I,’sobel’,thresh)BW=edge(I,’sobel’,thresh,direction)BW=edge(I,’sobel’)自动选择阈值用Sobel算子进行边缘检测。BW=edge(I,’sobel’,thresh)根据所指定的敏感度阈值thresh用Soble算子进行边缘检测,它忽略了所有小于阈值的边缘。当thresh为空([])时,自动选择阈值。edge函数实现的语法格式如下:BW=ed45BW=edge(I,’sobel’,thresh,direction)根据所指定的敏感度阈值thresh,在所指定的方向direction上,用Sobel算子进行边缘检测。direction可取的字符串值为’horizontal’(水平方向)、’vertial’(垂直方向)或’both’(两个方向)。3.Prewitt算子Prewitt算子的两个卷积计算核如图所示。10-110-110-1111000-1-1-1BW=edge(I,’sobel’,thresh,direc46edge函数实现的语法格式如下:BW=edge(I,’prewitt’)BW=edge(I,’prewitt’,thresh)BW=edge(I,’prewitt’,thresh,direction)BW=edge(I,’prewitt’)自动选择阈值用Prewitt算子进行边缘检测。BW=edge(I,’prewitt’,thresh)根据所指定的敏感度阈值thresh用Prewitt算子进行边缘检测,它忽略了所有小于阈值的边缘。当thresh为空([])时,自动选择阈值。edge函数实现的语法格式如下:BW=ed47BW=edge(I,’prewitt’,thresh,direction)根据所指定的敏感度阈值thresh,在所指定的方向direction上,用Prewitt算子进行边缘检测。direction可取的字符串值为’horizontal’(水平方向)、’vertial’(垂直方向)或’both’(两个方向)。4.LOG算子LOG算子先用高斯低通滤波器将图像进行预先平滑,然后用拉普拉斯算子找出图像中的陡峭边缘,最后用零灰度值进行二值化产生闭合的、连通的轮廓,消除了所有内部点。BW=edge(I,’prewitt’,thresh480-10-14-10-10-1-1-1-18-1-1-1-1edge函数实现的语法格式如下:BW=edge(I,’log’)BW=edge(I,’log’,thresh)BW=edge(I,’log’,thresh,sigma)0-10-14-10-10-1-1-1-18-1-1-1-149BW=edge(I,’log’,thresh,sigma)根据所指定的敏感度阈值thresh和标准偏差sigma,用LOG算子进行边缘检测,默认时sigma等于2。I=imread('rice.tif');BW1=edge(I,'sobel');BW2=edge(I,'roberts');BW3=edge(I,'prewitt');BW4=edge(I,'log');BW5=edge(I,'canny');h=fspecial('gaussian',5);BW=edge(I,’log’,thresh,sig50BW6=edge(I,'zerocross',[],h);subplot(2,3,1),imshow(BW1)title(‘sobel算子’)subplot(2,3,2),imshow(BW2)title('roberts算子')subplot(2,3,3),imshow(BW3)title(‘prewitt算子’)subplot(2,3,4),imshow(BW4)title('log算子')subplot(2,3,5),imshow(BW5)title('canny算子')BW6=edge(I,'zerocross',[],h);51subplot(2,3,6),imshow(BW6)title('zerocross算子')四.图像的几何处理图象的几何处理包括:图像的旋转、图像的剪切、图像的缩放和基于区域的图像处理。1、图象的旋转函数imrotate()可以通过一种特定的插补方法来改变显示图象的角度,其语法格式如下:B=imrotate(A,angle,method)B=imrotate(A,angle,method,’crop’)subplot(2,3,6),imshow(BW6)四.图像52其中A是图象的数据矩阵,angle是图象的旋转角度,method可以是nearest、bilinearh或bicubic,它们分别近邻插补方法、双线性插补方法和双立方插补方法,参数corp表示剪切。例如1.用双线性插补方法改变图象logo.tif显示的角度A=imread('logo.tif');J=imrotate(A,30,’bilinear’,’crop’);subplot(1,2,1);imshow(A);其中A是图象的数据矩阵,angle是图象的旋转角度,53title('原始图象');subplot(1,2,2);imshow(J);title('旋转30°后的图象')2、图象的剪切函数imcrop()可以实现图象的剪切,其语法格式有如下几种:X2=imcrop(X,map):对索引图象进行交互式的剪切。I2=imcrop(I):对灰度图象进行交互式的剪切。title('原始图象');2、图象的剪切54RGB=imcrop(RGB):对RGB图象进行交互式的剪切。RGB2=imcrop(RGB,RECT):对RGB图象进行非交互式的剪切。例2.对RGB图象lily.tif按给定的矩形区域[1001007080]进行剪切。rgb=imread('lily.tif');subplot(1,2,1);subimage(rgb);RGB=imcrop(RGB):对RGB图象进行交互式的剪切55title('原始图象');subplot(1,2,2);rgb2=imcrop(rgb,[1001007080]);subimage(rgb2);title('剪切后的图象');3、图象的缩放函数imresize()可以通过一种特定的插补方法来调整图象的大小,其语法格式如下:title('原始图象');3、图象的缩放56B=imresize(A,[mrowsncols],method):用method指定的插补方法返回大小为mrows*ncols的图象。B=imresize(A,m,method):用method指定的插补方法返回大小等于A的m倍的图象B。例如3.对图像的大小进行调整。A=imread('ic.tif');imshow(A);title('原始图象');B=imresize(A,[mrowsncols],met57figure;subplot(1,2,1);B1=imresize(A,2,'bilinear');imshow(B1);title('用bilinear法放大2倍后的图象');subplot(1,2,2);B2=imresize(A,0.5,'nearest');figure;58imshow(B2);title('用nearest法缩小0.5倍后的图象');五、平滑滤波器1.线性平滑滤波器线性低通滤波

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论