数字图象处理学生讲义.ppt_第1页
数字图象处理学生讲义.ppt_第2页
数字图象处理学生讲义.ppt_第3页
数字图象处理学生讲义.ppt_第4页
数字图象处理学生讲义.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

用MATLAB进行的数字图像处理,目录,1、对于数字图象处理的基本调用(二值化、图像的输入和图像的显示) 2、边缘检测(edge) 3、选择图像中的多边形区域(roipoly)以及按灰度值选择区域(roicolor) 4、roifilt2区域滤波、filter2均值滤波、roifill区域填充 5、FFT变换补零操作和改变图像的显示象限 6、图像腐蚀和膨胀,1、对于数字图象处理的基本调用,、图像的输入(imread) 调用方法: 找到你要调用的图像的路径和格式,如C:Users11Desktopwuguo.jpg,调用格式为 I=imread(C:Users11Desktopwuguo.jpg),这样图像就会以rgb矩阵的形式寄存在matlab中,、图像的输出(imshow) 对于你已经拥有的二维矩阵,对其调用imshow程序进行图像显示,格式为 imshow(I) 需要注意的是,imshow一般显示的是unit8格式的矩阵,如果矩阵的规格是double模式,则需用格式imshow(I,)进行显示,否则容易显示出一片空白,、图像的二值化(rbg2gray) 所谓的二值化就是将彩色的图像转变成黑白双色的图像,在图像处理中是将每个点的r、b、g数据按照一定的加权运算得到,调用格式为 I1=rgb2gray,关于对imread、imshow、rgb2gray调用的举例,参考程序为: clear all close all I1 = imread(C:Users11Desktopwuguo.jpg); I=rgb2gray(I1); subplot(1,2,1); imshow(I1); subplot(1,2,2); imshow(I),显示结果,图1 左图为输出一般的图像,右图为将图像进行灰度化后的显示结果,2、边缘检测(edge),所谓的边缘检测是将灰度化后的图像进行亮度检测,并勾勒出亮度达到阈值条件的点 调用格式: BW = edge(I) %比较常用的调用方式 采用灰度或一个二值化图像I作为它的输入,并返回一个与I相同大小的二值化图像BW,在函数检测到边缘的地方为1,其他地方为0。 BW = edge(I,sobel) 自动选择阈值用Sobel算子进行边缘检测。,BW = edge(I,sobel,thresh) 根据所指定的敏感度阈值thresh,用Sobel算子进行边缘检测,它忽略了所有小于阈值的边缘。当thresh为空时,自动选择阈值。 BW = edge(I,sobel,thresh,direction) 根据所指定的敏感度阈值thresh,在所指定的方向direction上,用Sobel 算子进行边缘检测。Direction可取的字符串值为horizontal(水平方向)、vertical(垂直方向)或both(两个方向)。 BW,thresh = edge(I,sobel,.) 返回阈值,程序举例: clear all close all I1 = imread(C:Users11Desktopwuguo.jpg); I=rgb2gray(I1); subplot(1,2,1); imshow(I); subplot(1,2,2); J=edge(I); imshow(J);,显示结果,图2、左图为灰度图,右图为边缘检测后显示的图形,3、选择图像中的多边形区域(roipoly)以及按灰度值选择区域(roicolor),、选择图像中的多边形区域(roipoly) roipoly 功能:用于选择图像中的多边形区域。 用法:BW = roipoly(I,c,r) BW = roipoly(I) BW = roipoly(x,y,I,xi,yi) BW,xi,yi = roipoly(.) x,y,BW,xi,yi = roipoly(.) BW = roipoly(I,c,r)表示用向量c、r指定多边形各点的X、Y坐标。BW选中的区域为1,其他部分的值为0. BW = roipoly(I)表示建立交互式的处理界面。 BW = roipoly(x,y,I,xi,yi)表示向量x和y建立非默认的坐标系,然后在指定的坐标系下选择由向量xi,yi指定的多边形区域。,程序举例: clc clear filename,pathname,q=uigetfile(*.*;*.bmp;*.jpg;*.png); if q0 lujing=strcat(pathname,filename); I = imread(lujing); figure imshow(I); end p=size(I,3); if p=3 r=I(:,:,1); g=I(:,:,2); b=I(:,:,3); I1=rgb2gray(I);,else I1=I; end hold on x,y,c=ginput(1); m(1)=x; n(1)=y; plot(x,y,r); k=2; while(c=1) x1,y1,c1=ginput(1); if c1=1 m(k)=x1; n(k)=y1; plot(x,y,r); line(m(k-1) m(k),n(k-1) n(k); k=k+1; c=c1; else break end end line(m(k-1) m(1),n(k-1) n(1);,BW = roipoly(I1,m,n); if p=3 r1=double(r).*double(BW); g1=double(g).*double(BW); b1=double(b).*double(BW); i1=cat(3,r1,g1,b1); figure imshow(mat2gray(i1); else i2=double(I1).*double(BW); figure imshow(mat2gray(i2); end,图3、左图为显示输入的图像,右图为经过鼠标剪切过之后的显示图像,显示结果:,、roicolor,功能:可以根据颜色选定区域。 用法:BW = roicolor(A,low,high) BW = roicolor(A,v) BW = roicolor(A,low,high)色图范围为low high,返回这些像素选择区域。BW为大小和A相同的数组,若A中元素值在low high范围内,则返回值1,否则返回0. BW = roicolor(A,v)返回图像A中像素与向量v相匹配的区域,BW为二值图像,1值为A中与v相匹配的地方。,程序举例: clear all close all I1 = imread(C:Users11Desktopwuguo.jpg); I=rgb2gray(I1); J=roicolor(I,5,30); subplot(1,2,1); imshow(I); subplot(1,2,2); imshow(J),结果显示:,图4、左图为输入图像,右图为对图像进行灰度区域选择产生的图像,、roifilt2,功能:用于对一个区域进行滤波。 用法:J = roifilt2(h,I,BW) J = roifilt2(I,BW,fun) J = roifilt2(I,BW,fun,P1,P2,.) J = roifilt2(h,I,BW)表示使用滤波器h对图像I中用二值掩模BW选中的区域滤波。BW为和I大小相同的二值图像。 J = roifilt2(I,BW,fun,P1,P2,.)表示用fun函数处理区域滤波图像I。参数P1、P2等为fun函数的输入参数。 例子:I = imread(eight.tif); c = 222 272 300 270 221 194; r = 21 21 75 121 121 75; BW = roipoly(I,c,r); h = fspecial(unsharp);,参考程序 I1 = imread(C:Users11Desktopwuguo.jpg); I=rgb2gray(I1); imshow(I); hold on; x,y,c=ginput(1); m(1)=x; n(1)=y; plot(x,y,r); k=2;,while(c=1) x1,y1,c1=ginput(1); if c1=1 m(k)=x1; n(k)=y1; plot(x,y,r); line(m(k-1) m(k),n(k-1) n(k); k=k+1; c=c1; else break end end line(m(k-1) m(1),n(k-1) n(1);,BW = roipoly(I,m,n); h = fspecial(unsharp); %指定滤波器 J = roifilt2(h,I,BW); figure imshow(J)%, figure, imshow(J),结果展示,、roifill(ROIregion-of-interest),功能:对指定区域进行填充。 用法:J = roifill(I,c,r) J = roifill(I) J,BW = roifill(.) J = roifill(x,y,I,xi,yi) x,y,J,BW,xi,yi = roifill(.) J = roifill(I,c,r) 填充由向量c,r指定的多边形,c和r分别为多边形的各顶点X、Y坐标。可用于擦除图像中的小物体。 J = roifill(I)用于交互式处理界面。 J = roifill(I,BW)用BW(和I大小一致)掩模填充此区域。如果为多个多边形,则分别执行插值填充。,参考程序 I1 = imread(C:Users11Desktopwuguo.jpg); I=rgb2gray(I1); imshow(I); hold on; x,y,c=ginput(1); m(1)=x; n(1)=y; plot(x,y,r); k=2;,while(c=1) x1,y1,c1=ginput(1); if c1=1 m(k)=x1; n(k)=y1; plot(x,y,r); line(m(k-1) m(k),n(k-1) n(k); k=k+1; c=c1; else break end end line(m(k-1) m(1),n(k-1) n(1); J=roifill(I,m,n); figure imshow(J),结果展示:,图6、左图为没填充的图片,有图为对选择区域进行填充的图片,filter2:均值滤波,filter2(B,X),B为滤波器.X为要滤波的数据,这里将B放在X上,一个一个移动进行模板滤波.,clear all close all I1 = imread(C:Users11Desktopwuguo.jpg); I=rgb2gray(I1); subplot(1,2,1); imshow(I); J=filter2(fspecial(unsharp),I); subplot(1,2,2); imshow(J,),显示结果:,五、FFT变换补零操作和改变图像的显示象限,FFT的补零操作和一维的相似,调用格式为: F=fft2(f,a,b);其中f为你要变换的图像矩阵,a、b分别为变换后的行数和列数,例:有一矩形函数f(m,n),矩形区域为1,其余为0,对该矩形作傅立叶变换。,clear; N=100; f=zeros(50,50); f(15:35,23:28)=1; subplot(2,1,1) imshow(f) subplot(2,1,2) F=fft2(f); imshow(log(abs(F),对于fft2的举例,从上幅图像中可以看到,直流成分主要集中在右上角,分辨率比较低。通过fftshift函数提供补零和直流成分显示区域调整后得到调整以后的结果如上图所示。,N=100; f=zeros(50,50); f(15:35,23:28)=1; subplot(2,1,1) imshow(f) F=fft2(f,256,256); F2=fftshift(F); subplot(2,1,2) imshow(log(abs(F2);,fftshift函数实现补零操作和改变图象显示象限,傅里叶逆变换ifft2,傅里叶逆变换和一维的傅里叶相似,需要注意的是,傅里叶逆变换后会因为浮点计算误差而产生虚数,因此在图像展示时可以展示实部,例如: imshow(abs(F),fftshift改变图像的显示象限,clear all close all N=100; f=zeros(50,50); f(15:35,23:28)=1; subplot(2,1,1) imshow(f) F=fft2(f,256,256); F2=fftshift(F); subplot(2,1,2) imshow(log(abs(F2);,六、膨胀与腐蚀,腐蚀:删除对象边界某些像素。 膨胀:给图像中的对象边界添加像素。 在操作中,输出图像中所有给定像素的状态都是通过对输入图像的相应像素及邻域使用一定的规则进行确定。在膨胀操作时,输出像素值是

温馨提示

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

评论

0/150

提交评论