Matlab 图像几何操作ppt课件_第1页
Matlab 图像几何操作ppt课件_第2页
Matlab 图像几何操作ppt课件_第3页
Matlab 图像几何操作ppt课件_第4页
Matlab 图像几何操作ppt课件_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

精选,1,第2章图像几何操作,2.1图像的裁剪、缩放与旋转2.2图像的几何变换2.3图像的邻域操作2.4图像的区域选取2.5图像增强2.6图像滤波,精选,2,2.1图像的裁剪、缩放与旋转,图像裁剪就是在原图像中裁剪出图像块来。根据裁剪区域的不同,可以对图像进行:矩形区域裁剪:imcrop函数(1.3节)多边形区域裁剪:roiploy函数(2.4节),精选,3,2.1图像的裁剪、缩放与旋转,图像缩放缩小:从图像中,删除部分像素。放大:向图像中,增加部分像素。增加像素的取值是根据周围相邻像素的值进行插值计算得到的。图像缩放的常用函数是imresize。通过查看imresize函数的帮助信息,可以看出,imresize可以使用三种不同的插值方法:最近邻插值法:imresize函数默认的插值方法双线性插值法双立方插值法,精选,4,2.1图像的裁剪、缩放与旋转,图像缩放:最近邻插值法nearest令新增加的像素的灰度值等于距它最近的输入像素的灰度值。其实现方法最为简单,处理速度快,但它只是将原始象素简单复制到其邻域内,随着放大倍数的增加,放大图像会出现相对严重的方块和锯齿,不能很好的保留原始图像的边缘信息。,精选,5,2.1图像的裁剪、缩放与旋转,图像缩放:双线性插值法bilinear要求新增加的像素的灰度值,由周围的4个像素的灰度值决定。双线性内插值法计算量大,但缩放后图像质量高,不会出现像素值不连续的的情况。由于双线性插值具有低通滤波器的性质,使高频分量受损,所以可能会使图像轮廓在一定程度上变得模糊。,精选,6,2.1图像的裁剪、缩放与旋转,图像缩放:双立方插值法bicubic能够克服以上两种算法的不足,计算精度高,但计算量大,因为计算新增加的像素的灰度值时,需要考虑周围的16个邻点。,精选,7,2.1图像的裁剪、缩放与旋转,图像缩放举例I=imread(cell.tif);figure(1),imshow(I)title(原始图像)pausefori=1:3nI=imresize(I,2*I,nearest);figure(1),imshow(nI)title(strcat(放大了,int2str(2*i),倍)pauseend,精选,8,2.1图像的裁剪、缩放与旋转,图像旋转Matlab使用imrotate函数旋转图像。在图像旋转的过程中,也可能涉及插值问题。默认采用最近邻插值法。【例】B=imread(blobs.png);imshow(B)figureimrotate(B,30,bilinear,crop)其中,crop表示旋转时图像底版大小保持不变,但图像可能被切割。若是loose,则图像底版大小可能会发生变化。,精选,9,2.1图像的裁剪、缩放与旋转,【例】使用imrotate函数旋转图像,制作动画效果I=imread(blobs.png);fori=1:20imrotate(I,3*i,loose);end,精选,10,2.2图像的几何变换,图像的几何变换是指图像几何操作后,内部结构比例等发生变化,但整体布局与形状没有改变。本节主要介绍图像的二维空间变换。,精选,11,2.2图像的几何变换,图像二维空间变换Matlab使用imtransform函数完成图像二维空间变换。imtransform函数的调用形式为:imtransform(I,T)参数I:要变换的图像参数T:由maketform函数产生的变换结构。根据变换结构的不同,可以实现不同的空间变换。例如:二维仿射变换投影变换,精选,12,2.2图像的几何变换,在函数maketform(P,)中,参数P可以是以下形式:affine仿射变换形式projective投影变换形式custom自定义函数进行变换box依靠函数中的另外参数产生仿射变换结构composite该参数实现多次调用tformfwd功能,精选,13,2.2图像的几何变换,【例】使用imtransform函数实现图像平面扭曲功能transformtype=affine;%仿射变换transformmatrix=0.500;0.510;001;%仿射变换要求变换矩阵的最后一列除最后一个元素为1之外,%其它的均为0T=maketform(transformtype,transformmatrix);I=imread(cameraman.tif);nI=imtransform(I,T);subplot(1,2,1),imshow(I)subplot(1,2,2),imshow(nI),精选,14,2.2图像的几何变换,仿射变换是由一个线性变换接上一个平移组成的。因此,仿射变换的矩阵表达可描述为:,请思考:在上例中,原图像的像素点(x,y)与变换后得到的像素点(x,y)之间的关系是?平移、比例缩放、旋转能否看成是仿射变换的特殊情况?,或用齐次坐标表示为:,精选,15,2.2图像的几何变换,两种特殊的仿射变换,平移,旋转,比例缩放,精选,16,2.2图像的几何变换,使用imtransform函数实现图像缩放功能transformtype=affine;transformmatrix=0.500;00.50;001;T=maketform(transformtype,transformmatrix);I=imread(cameraman.tif);nI=imtransform(I,T);subplot(1,2,1),imshow(I)subplot(1,2,2),imshow(nI),精选,17,2.2图像的几何变换,使用imtransform函数实现图像旋转功能transformtype=affine;transformmatrix=cos(pi/6)sin(pi/6)0;-sin(pi/6)cos(pi/6)0;001;T=maketform(transformtype,transformmatrix);I=imread(cameraman.tif);nI=imtransform(I,T);subplot(1,2,1),imshow(I)subplot(1,2,2),imshow(nI),精选,18,2.2图像的几何变换,二维投影变换可以把一幅图像按照近大远小的投影规律投影到一个平面上,从而产生立体的效果。【例】使用imtransform函数实现图像的二维投影变换figure(2)transformtype=projective;%投影变换transformmatrix=1.158100;-0.42280.6066-0.0074;4.22794.35661.0000;%transformmatrix=0.800;-0.20.8-0.003;3.51.51.5;T=maketform(transformtype,transformmatrix);I=imread(cameraman.tif);nI=imtransform(I,T);subplot(1,2,1),imshow(I)subplot(1,2,2),imshow(nI),精选,19,2.2图像的几何变换,投影变换的矩阵表达在进行乘法计算之后,通常齐次元素wc并不为1,所以为了映射回真实平面需要进行齐次除法,即每个元素都除以wc:实际地,仿射变换可看作是一种特殊的投影变换。它要求变换矩阵的最后一列除最后一个元素为1之外,其它的均为0。,精选,20,2.3图像的邻域操作,邻域操作方法充分地利用了图像相邻像素间的颜色、灰度等关系,实现对图像的平滑、增强、边缘提取、滤波和恢复等操作。,精选,21,2.3.1邻域操作,【例】对小狮子图像进行邻域操作,使小狮子图像的轮廓变得清晰。I=imread(shizi.bmp);I=double(rgb2gray(I);figure(1),subplot(1,2,1),imshow(I,)m,n=size(I);nI=zeros(m,n)C=-1-1-1;-18-1;-1-1-1;fori=2:m-1forj=2:n-1L=I(i-1:i+1,j-1:j+1).*C;nI(i,j)=sum(sum(L);endendfigure(1),subplot(1,2,2),imshow(nI,),精选,22,2.3.1邻域操作,矩阵C,称为滑动块矩阵、掩膜矩阵或空域滤波器。,精选,23,在矩阵C上进行滑动的时候,首先从图左上角开始,修改的是原图像的(2,2)元素,修改该元素的方法是:1使用滑动块矩阵C=与(即以原图像的(2,2)元素为中心的3*3邻域矩阵)对应元素相乘,得到了新的3*3矩阵D=2把新得到的矩阵D的所有元素相加,其和作为新图像的(2,2)元素的值。程序中使用的语句为:nI(i,j)=sum(sum(L)。该例子中,新图像的(2,2)元素的值为0。,精选,24,2.3.1邻域操作,接着修改的第2个元素是(2,3),然后是(2,4),(2,n-1),但(2,n)没有修改。接着修改第3行(3,2)到(3,n-1)元素,如此下去,最后一行没有修改。从上例可以看出,使用语言编写程序对图像进行邻域操作时,主要是利用多重循环语句实现。值得注意的是,循环结束后,新矩阵nI中会有很多负值,使用imshow函数能够自动对矩阵数据按比例进行调整。程序运行结果如下所示:,精选,25,2.3.2Matlab邻域操作函数,Matlab提供了可以实现邻域操作的函数,因此可以直接调用相应的邻域操作函数,完成各种邻域操作功能:nlfiltercolfiltblkproc,精选,26,2.3.2Matlab邻域操作函数,nlfilter函数的一般形式为:nI=nlfilter(I,MN,FUN)其中:I是被处理的图像,MN表示滑动块的高为M、宽为N。FUN是要对滑动覆盖区域进行操作的函数名,该函数可以是各种滤波算子,可以是任意定义的矩阵。【例】使用nlfilter函数对图像进行均值平滑邻域操作。I=imread(shizi.bmp);I=rgb2gray(I);figure(1),subplot(1,2,1);imshow(I);fun=inline(mean(mean(x);nI=nlfilter(I,33,fun);figure(1),subplot(1,2,2);imshow(nI,);,精选,27,2.3.2Matlab邻域操作函数,inline(mean(mean(x)的含义:根据参数字串mean(mean(x)创建内联函数,以便在后面的程序语句中调用该函数。nlfilter(I,33,fun)的含义:使用3行3列大小的滑动块在图像I上滑动,每滑动一次就以滑块遮住的部分作为参数x调用函数fun。由于fun即为上述定义的内联函数,因此新产生的图像nI中除边界外,每个像素都是图像I中某3行3列图像块的均值。函数nfilter在边界处用0填补。,精选,28,2.3.2Matlab邻域操作函数,调用函数nlfilter时,如果参数FUN有参数,则需要使用下面格式:nI=nlfilter(I,MN,FUN,P1,P2,.)其中,P1,P2,.为函数FUN的实参,把值传入函数体中。【例】若已有函数定义:functionr=myfun(t,p1,p2)r=mean(mean(t).*p1+p2;则可设计如下程序:I=imread(shizi.bmp);I=rgb2gray(I);figure(1),subplot(1,2,1);imshow(I);fun=myfun;p1=2;p2=1;nI=nlfilter(I,33,fun,p1,p2);figure(1),subplot(1,2,2);imshow(nI,);,精选,29,2.3.2Matlab邻域操作函数,colfilt函数与nlfilter函数的主要区别有:colfilt函数在处理图像时,先把滑动块遮住的图像块排成一个列向量,处理之后再恢复成图像块。nlfilter函数采取逐像素滑动的方式,colfilt函数在移动的时候可以选择:sliding:逐像素滑动distinct:逐图像块滑动,滑动时图像块互不重叠。,精选,30,2.3.2Matlab邻域操作函数,【例】使用colfilt函数进行图像邻域操作(逐像素)若已有函数定义:functionr=myfun(x,p1,p2)r=mean(x).*p1+p2;则可设计如下程序:I=imread(shizi.bmp);I=rgb2gray(I);figure(1),subplot(1,2,1),imshow(I,);fun=myfun;p1=2;p2=1;nI=colfilt(I,33,sliding,fun,p1,p2);figure(1),subplot(1,2,2),imshow(nI,),精选,31,2.3.2Matlab邻域操作函数,【例】使用colfilt函数进行图像邻域操作(逐图像块)若已有函数定义:functionr=myfun(x,len,p1,p2)r=mean(x)*p1+p2;r=ones(len,1)*r;则可设计如下程序:I=imread(shizi.bmp);I=rgb2gray(I);figure(1),subplot(1,2,1),imshow(I,);fun=myfun;m=3;n=3;len=m*n;p1=2;p2=1;nI=colfilt(I,mn,distinct,fun,len,p1,p2);figure(1),subplot(1,2,2),imshow(nI,),精选,32,2.3.2Matlab邻域操作函数,blkproc函数是专门进行分块操作的函数若已有函数定义:functionr=myfun(x,m,n,p1,p2)r=mean(mean(x)*p1+p2;r=ones(m,n)*r;则可设计如下程序:I=imread(shizi.bmp);I=rgb2gray(I);figure(1),subplot(1,2,1),imshow(I,);fun=myfun;m=3;n=3;len=m*n;p1=2;p2=1;nI=blkproc(I,mn,fun,m,n,p1,p2);figure(1),subplot(1,2,2),imshow(nI,),精选,33,2.3.2Matlab邻域操作函数,image=imread(cameraman.tif);image=im2double(image);T=dctmtx(8);B=blkproc(image,88,P1*x*P2,T,T);mask=11110000;11100000;11000000;10000000;00000000;00000000;00000000;00000000;B2=blkproc(B,88,P1.*x,mask);reconstructedImage=blkproc(B2,8,8,P1*x*P2,T,T);Subplot(1,2,1);Imshow(image);title(原图像);Subplot(1,2,2);Imshow(reconstructedImage);title(压缩图像);,精选,34,2.4图像区域选取,块选取函数imcrop函数:矩形区域选取Roipoly函数:可以完成各种多边形块的选取功能,返回结果是一个与输入图像一样大小的二值图像。曲线围成的区域在计算机中没有严格的连续曲线,所有的曲线都是多边形。所以可以用roipoly函数选取近似的曲边区域。,精选,35,2.4图像区域选取,I,m=imread(shamo.jpg);I=double(rgb2gray(I);figure(1),subplot(1,2,1),imshow(I,m)C1=110330380;C2=120200368;BW=roipoly(I,C1,C2);B=double(BW).*256;nI=(I+B);figure(1),subplot(1,2,2),imshow(nI,m),精选,36,2.4图像区域选取,I,m=imread(shamo.jpg);I=double(rgb2gray(I);figure(1),subplot(1,2,1),imshow(I,m)C1=10:pi:180;C2=100+floor(20*sin(C1);BW=roipoly(I,C1,C2);B=double(BW).*256;nI=(I+B);figure(1),subplot(1,2,2),imshow(nI,m),精选,37,2.5图像增强,图像增强是对图像进行操作,得到视觉效果更好或者更有用的新图像。狭义上的图像增强就是加强或减弱灰度图像的明暗对比度(将亮度的最大值和最小值之比称为对比度)。广义上的图像增强除了对灰度图像进行增强外,还包括彩色图像增强等。,精选,38,2.5.1灰度调整,灰度调整:增加明暗对比度的一种常用方法是灰度调整方法。灰度调整方法是基于灰度直方图的一种图像增强方法。所谓灰度直方图就是灰度图像的灰度值统计图,如下例所示:,精选,39,2.5.1灰度调整,【例】统计某幅图像的灰度信息,即计算图像中0-255种灰度级各自的像素点个数。I=imread(pout.tif);figure(1),subplot(1,2,1),imshow(I)nI=floor(double(I);m,n=size(nI);H=zeros(256);fori=1:mforj=1:nk=nI(i,j);H(k+1)=H(k+1)+1;endendfigure(1),subplot(1,2,2),bar(H),精选,40,2.5.1灰度调整,【例】按线性灰度变换规则,增强图像的明暗对比度。I=imread(pout.tif);I=double(I);a=90;b=120;na=0;nb=255;k=(nb-na)./(b-a);nI=na+k.*(I-a);nI=round(nI);m,n=size(I);fori=1:mforj=1:nifnI(i,j)nbnI(i,j)=nb;endendendsubplot(1,2,1),imshow(I,)subplot(1,2,2),imshow(nI,),精选,41,2.5.1灰度调整,精选,42,2.5.1灰度调整,精选,43,2.5.1灰度调整,精选,44,2.5.1灰度调整,精选,45,2.5.2灰度调整函数,在Matlab中,与灰度调整相关的函数主要有:imadjust用于将图像的灰度值调整到指定的范围。stretchlim用来计算灰度图像的最佳输入区间的。所谓最佳就是按照该区间输入,图像灰度的对比度最大。histeq用于自动完成图像灰度调整,使得调整后图像的灰度直方图趋于均衡化。brighten用来改变显示灰度图像时的亮度,但并不改变原始图像自身的灰度。,精选,46,2.5.2灰度调整函数,imadjust函数的一般调用格式为:nI=imadjust(I,low_inhigh_in,low_outhigh_out,gamma)其中:low_inhigh_in:用来限制输入范围,且取值范围落在0,1区间。例如,若low_in=0.2,则表示最小的输入灰度值为255*0.2。low_outhigh_out:用来限制输出范围,且取值范围落在0,1区间gamma:用来说明是否指数变换时的指数值。缺省时,gamma=1,表示线性变换,精选,47,2.5.2灰度调整函数,【例】使用imadjust函数对图像进行灰度调整I=imread(pout.tif);a=90;b=120;na=0;nb=255;nI=imadjust(I,a/255b/255,na/255,nb/255);figure(2),subplot(1,2,1),imshow(I,)figure(2),subplot(1,2,2),imshow(nI,),尝试给参数gamma传递一个大于1以及小于1的值,观察结果。,精选,48,2.5.2灰度调整函数,【例】使用函数imadjust对RGB彩色图像进行颜色调整。I=imread(peppers.png);nI=imadjust(I,.2.30;.6.71);figure(1),subplot(1,2,1),imshow(I)figure(1),subplot(1,2,2),imshow(nI),精选,49,2.5.2灰度调整函数,stretchlim函数的一般调用格式为:LOW_HIGH=stretchlim(I,TOL)LOW_HIGH=stretchlim(I,TOL)returnsapairofintensitiesthatcanbeusedbyimadjusttoincreasethecontrastofanimage.其中:TOL=LOW_FRACTHIGH_FRACT:用于说明在低灰度以及高灰度时的饱和度。饱和度可认为是某色调的纯色掺入白色光的比例如果TOL是个常量,则TOL=LOW_FRACT,同时HIGH_FRACT=1-LOW_FRACT,表明在低灰度以及高灰度时的饱和度相同.如果省略TOL,则默认TOL=0.010.99,饱和度为2%.如果TOL=0,则LOW_HIGH=min(I(:)max(I(:).,精选,50,2.5.2灰度调整函数,【例】I=imread(pout.tif);nI=imadjust(I,stretchlim(I),);figure(1),subplot(1,2,1),imshow(I,)figure(1),subplot(1,2,2),imshow(nI,)【例】I=imread(peppers.png);nI=imadjust(I,stretchlim(I);figure(1),subplot(1,2,1),imshow(I)figure(1),subplot(1,2,2),imshow(nI),精选,51,2.5.2灰度调整函数,histeq用于自动完成图像灰度调整,使得调整后图像的灰度直方图趋于均衡化。I=imread(pout.tif);figure(1),subplot(1,2,1),imshow(I);figure(1),subplot(1,2,2),imhist(I);nI=histeq(I);figure(2),subplot(1,2,1),imshow(nI);figure(2),subplot(1,2,2),imhist(nI);,精选,52,2.5.2灰度调整函数,brighten用来改变显示灰度图像时的亮度,但并不改变原始图像自身的灰度。它的一般调用格式为:brighten(beta)【例】I=imread(tire.tif);figure(1),imshow(I);figure(2),imshow(I);brighten(0.75);%函数brighten通常放在imshow之后,请思考为什么。,精选,53,2.6图像滤波,滤波是一种应用广泛的图像处理技术,可以通过滤波来强调或删除图像的某些特征。滤波是一种邻域操作,即处理后的图像每个象素值是原来该象素周围的颜色值经过某种计算得到的。2.3节介绍的图像邻域操作就是一种图像滤波。本节进一步地介绍和分析滤波技术。滤波函数imfilter滤波器的定义,精选,54,2.6.1图像滤波函数,函数imfilter是Matlab中使用较多的滤波函数,基本调用格式为:nI=imfilter(I,H,OPTION)其中:I为要进行滤波的图像矩阵,可以为多维的彩色图像矩阵(数组);H是已经定义的滤波算子。imfilter函数本身也是基于邻域滑动设计实现的,所以也涉及到边界如何填补的问题。如果调用时省略OPTION参数,则默认以0填补边界。参数OPTION可以选择边界填补参数:replicate:将边界内的值复制到边界处。symmetric:将边界内的值通过镜像对称反射方法填补到边界处。circular:把图像看成是一个二维周期函数来实现边界的填补。,精选,55,2.6.1图像滤波函数,【例】I=imread(football.jpg);h=ones(3,3)/9;%均值滤波nI1=imfilter(I,h);nI2=imfilter(I,h,replicate);nI3=imfilter(I,h,symmetric);nI4=imfilter(I,h,circular);figure(1),imshow(I),title(Original)figure(2),imshow(nI1),title(BoundaryDefault)figure(3),imshow(nI2),title(BoundaryReplication)figure(4),imshow(nI3),title(BoundarySymmetric)figure(5),imshow(nI4),title(BoundaryCircular),精选,56,2.6.1图像滤波函数,与nlfilter不同的是,imfilter函数不需要定义操作函数。被滑动块(或称滤波器)遮盖的图像块与滑动块之间进行何种操作,取决于参数OPTION:corr:相关运算。缺省时,默认为corr。滤波后,某像素点的值通常是某图像块与滑动块(或称滤波器)的对应元素相乘之后再取总和。conv:卷积运算滤波后,某像素点的值通常是某图像块与滑动块(或称滤波器)的首尾呼应的元素相乘之后再取总和得到。,精选,57,2.6.1图像滤波函数,【例】验证corr假定已有函数定义:functionr=myfun(t,h)r=sum(sum(t.*h);则可验证nI1=nI2I=floor(256*randn(8,8);fun=myfun;h=randn(3,3);nI1=nlfilter(I,33,fun,h);nI1=floor(nI1);nI2=imfilter(I,h);nI2=floor(nI2);sum(sum(nI1-nI2),精选,58,2.6.1图像滤波函数,【例】验证conv假定已有函数定义:functionr=myfun(t,h)t=t(:);h=h(:);len=length(h);v=zeros(len,1);fori=1:lenv(i)=t(i).*h(len-i+1);endr=sum(v);则可验证nI1=nI2I=floor(256*randn(8,8);fun=myfun;h=randn(3,3);nI1=nlfilter(I,33,fun,h);nI1=floor(nI1);nI2=im

温馨提示

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

评论

0/150

提交评论