Matlab 图像几何操作.ppt
《Matlab 图像几何操作.ppt》由会员分享,可在线阅读,更多相关《Matlab 图像几何操作.ppt(64页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第2 2章章 图像几何操作图像几何操作 l2.1 2.1 图像的裁剪、缩放与旋转图像的裁剪、缩放与旋转l2.2 2.2 图像的几何变换图像的几何变换 l2.3 2.3 图像的邻域操作图像的邻域操作l2.4 2.4 图像的区域选取图像的区域选取l2.5 2.5 图像增强图像增强l2.6 2.6 图像滤波图像滤波 2.1 图像的裁剪、缩放与旋转l图像裁剪图像裁剪就是在原图像中裁剪出图像块来。就是在原图像中裁剪出图像块来。l根据裁剪区域的不同,可以对图像进行:根据裁剪区域的不同,可以对图像进行:矩形区域裁剪:矩形区域裁剪:imcrop函数(函数(1.3节)节)多边形区域裁剪:多边形区域裁剪:roi
2、ploy函数(函数(2.4节)节)2.1 图像的裁剪、缩放与旋转l图像缩放图像缩放缩小:从图像中,删除部分像素。缩小:从图像中,删除部分像素。放大:向图像中,增加部分像素。增加像素的取值放大:向图像中,增加部分像素。增加像素的取值是根据周围相邻像素的值进行插值计算得到的。是根据周围相邻像素的值进行插值计算得到的。l图像缩放的常用函数是图像缩放的常用函数是imresize。通过查看。通过查看imresize函数的帮助信息,可以看出,函数的帮助信息,可以看出,imresize可以使用三种不同的插值方法:可以使用三种不同的插值方法:最近邻插值法:最近邻插值法:imresize函数默认的插值方法函数默
3、认的插值方法双线性插值法双线性插值法双立方插值法双立方插值法2.1 图像的裁剪、缩放与旋转l图像缩放:最近邻插值法图像缩放:最近邻插值法 nearest令新增加的像素的令新增加的像素的灰度值等于距它最近的输入像素灰度值等于距它最近的输入像素的灰度值。的灰度值。其实现方法最为简单,处理速度快,但它只是将原其实现方法最为简单,处理速度快,但它只是将原始象素简单复制到其邻域内始象素简单复制到其邻域内,随着放大倍数的增加,随着放大倍数的增加,放大图像会出现相对严重的方块和锯齿,不能很好放大图像会出现相对严重的方块和锯齿,不能很好的保留原始图像的边缘信息。的保留原始图像的边缘信息。2.1 图像的裁剪、缩
4、放与旋转l图像缩放:双线性插值法图像缩放:双线性插值法 bilinear要求新增加的像素的灰度值,由周围的要求新增加的像素的灰度值,由周围的4个像素的个像素的灰度值决定。灰度值决定。双线性内插值法计算量大,但缩放后图像质量高,双线性内插值法计算量大,但缩放后图像质量高,不会出现像素值不连续的的情况。由于双线性插值不会出现像素值不连续的的情况。由于双线性插值具有低通滤波器的性质,使高频分量受损,所以可具有低通滤波器的性质,使高频分量受损,所以可能会使图像轮廓在一定程度上变得模糊。能会使图像轮廓在一定程度上变得模糊。2.1 图像的裁剪、缩放与旋转l图像缩放:双立方插值法图像缩放:双立方插值法 bi
5、cubic能够克服以上两种算法的不足,计算精度高,但计能够克服以上两种算法的不足,计算精度高,但计算量大,因为计算新增加的像素的灰度值时,需要算量大,因为计算新增加的像素的灰度值时,需要考虑周围的考虑周围的16个邻点个邻点。2.1 图像的裁剪、缩放与旋转l图像缩放举例图像缩放举例I=imread(cell.tif);figure(1),imshow(I)title(原始图像原始图像)pausefor i=1:3 nI=imresize(I,2*I,nearest);figure(1),imshow(nI)title(strcat(放大了放大了,int2str(2*i),倍倍)pauseend2
6、.1 图像的裁剪、缩放与旋转l图像旋转图像旋转MatlabMatlab使用使用imrotateimrotate函数旋转图像。函数旋转图像。在图像旋转的过程中,也可能涉及插值问题。默认在图像旋转的过程中,也可能涉及插值问题。默认采用最近邻插值法。采用最近邻插值法。【例】【例】B=imread(blobs.png);imshow(B)figureimrotate(B,30,bilinear,crop)其中,其中,crop表示旋转时图像底版大小保持不变,表示旋转时图像底版大小保持不变,但图像可能被切割。但图像可能被切割。若是若是loose,则图像底版大小可能会发生变化。,则图像底版大小可能会发生变化
7、。2.1 图像的裁剪、缩放与旋转l【例】使用【例】使用imrotate函数旋转图像,制作动画效果函数旋转图像,制作动画效果I=imread(blobs.png);for i=1:20 imrotate(I,3*i,loose);end2.2 2.2 图像的几何变换图像的几何变换l图像的几何变换是指图像几何操作后,图像的几何变换是指图像几何操作后,内部结构比例等发生变化,但整体布局内部结构比例等发生变化,但整体布局与形状没有改变。与形状没有改变。l本节主要介绍图像的二维空间变换。本节主要介绍图像的二维空间变换。2.2 2.2 图像的几何变换图像的几何变换l图像二维空间变换图像二维空间变换Matl
8、ab使用使用imtransform函数完成图像二维空间变换。函数完成图像二维空间变换。imtransform函数的调用形式为:函数的调用形式为:imtransform(I,T)参数参数I:要变换的图像:要变换的图像参数参数T:由:由maketform函数产生的变换结构。根据变换结函数产生的变换结构。根据变换结构的不同,可以实现不同的空间变换。例如:构的不同,可以实现不同的空间变换。例如:l二维仿射变换二维仿射变换l投影变换投影变换2.2 2.2 图像的几何变换图像的几何变换l在函数在函数maketform(P,)中,参数中,参数P可以是以下可以是以下形式:形式:affine仿射变换形式仿射变换
9、形式projective 投影变换形式投影变换形式custom 自定义函数进行变换自定义函数进行变换box 依靠函数中的另外参数产生仿射变换结构依靠函数中的另外参数产生仿射变换结构composite该参数实现多次调用该参数实现多次调用tformfwd功能功能2.2 2.2 图像的几何变换图像的几何变换l【例】使用【例】使用imtransform函数实现图像平面扭曲功能函数实现图像平面扭曲功能transformtype=affine;%仿射变换仿射变换transformmatrix=0.5 0 0;0.5 1 0;0 0 1;%仿射变换要求变换矩阵的最后一列除最后一个元素为仿射变换要求变换矩阵的
10、最后一列除最后一个元素为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)2.2 2.2 图像的几何变换图像的几何变换l仿射变换是由一个线性变换接上一个平移组成仿射变换是由一个线性变换接上一个平移组成的。因此,仿射变换的矩阵表达可描述为:的。因此,仿射变换的矩阵表达可描述为:l 请思考:请思考:l 在上例中,原图像的像素点在上例中,原图像
11、的像素点(x,y)与变换后得到的像素点与变换后得到的像素点(x,y)之间的关系是?之间的关系是?l 平移、比例缩放、旋转能否看成是仿射变换的特殊情况?平移、比例缩放、旋转能否看成是仿射变换的特殊情况?或用齐次坐标表示为:或用齐次坐标表示为:2.2 2.2 图像的几何变换图像的几何变换l两种特殊的仿射变换两种特殊的仿射变换平移平移旋转旋转比例缩放比例缩放2.2 2.2 图像的几何变换图像的几何变换l使用使用imtransform函数实现图像缩放功能函数实现图像缩放功能transformtype=affine;transformmatrix=0.5 0 0;0 0.5 0;0 0 1;T=make
12、tform(transformtype,transformmatrix);I=imread(cameraman.tif);nI=imtransform(I,T);subplot(1,2,1),imshow(I)subplot(1,2,2),imshow(nI)2.2 2.2 图像的几何变换图像的几何变换l使用使用imtransform函数实现图像旋转功能函数实现图像旋转功能transformtype=affine;transformmatrix=cos(pi/6)sin(pi/6)0;-sin(pi/6)cos(pi/6)0;0 0 1;T=maketform(transformtype,tr
13、ansformmatrix);I=imread(cameraman.tif);nI=imtransform(I,T);subplot(1,2,1),imshow(I)subplot(1,2,2),imshow(nI)2.2 2.2 图像的几何变换图像的几何变换l二维投影变换可以把一幅图像按照近大远小的投二维投影变换可以把一幅图像按照近大远小的投影规律投影到一个平面上,从而产生立体的效果。影规律投影到一个平面上,从而产生立体的效果。l【例】使用【例】使用imtransform函数实现图像的二维投影变换函数实现图像的二维投影变换figure(2)transformtype=projective;%
14、投影变换投影变换transformmatrix=1.1581 0 0;-0.4228 0.6066 -0.0074;4.2279 4.3566 1.0000;%transformmatrix=0.8 0 0;-0.2 0.8 -0.003;3.5 1.5 1.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)2.2 2.2 图像的几何变换图像的几何变换l投影变换的矩阵表达
15、投影变换的矩阵表达l在进行乘法计算之后,通常齐次元素在进行乘法计算之后,通常齐次元素 wc 并不并不为为 1,所以为了映射回真实平面需要进行齐次,所以为了映射回真实平面需要进行齐次除法,即每个元素都除以除法,即每个元素都除以 wc:l实际地,仿射变换可看作是一种特殊的投影变换。它实际地,仿射变换可看作是一种特殊的投影变换。它要求要求变换矩阵的最后一列除最后一个元素为变换矩阵的最后一列除最后一个元素为1之外,之外,其其它的均为它的均为0。2.2.3 3 图像的邻域操作图像的邻域操作l邻域操作方法充分地利用了图像相邻像素间的邻域操作方法充分地利用了图像相邻像素间的颜色、灰度等关系,实现对图像的平滑
16、、增强、颜色、灰度等关系,实现对图像的平滑、增强、边缘提取、滤波和恢复等操作。边缘提取、滤波和恢复等操作。2.2.3.1 3.1 邻域操作邻域操作l【例】对小狮子图像进行邻域操作,使小狮子图像的轮廓【例】对小狮子图像进行邻域操作,使小狮子图像的轮廓变得清晰。变得清晰。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;-1 8 -1;-1 -1 -1;for i=2:m-1 for j=2:n-1 L=I(i-1:i+1,j
17、-1:j+1).*C;nI(i,j)=sum(sum(L);end endfigure(1),subplot(1,2,2),imshow(nI,)2.2.3.1 3.1 邻域操作邻域操作l矩阵矩阵C,称为滑动块矩阵、掩膜矩阵或空域滤波器。称为滑动块矩阵、掩膜矩阵或空域滤波器。在在矩矩阵阵C上上进进行行滑滑动动的的时时候候,首首先先从从图图左左上上角角开开始始,修修改改的的是原图像的是原图像的(2,2)元素,修改该元素的方法是:元素,修改该元素的方法是:1使用滑动块矩阵使用滑动块矩阵C=与与 (即以(即以原图像的原图像的(2,2)元素为中心的元素为中心的3*3邻域矩阵)对应元素相乘,邻域矩阵)对
18、应元素相乘,得到了新的得到了新的3*3矩阵矩阵D=2把新得到的矩阵把新得到的矩阵D的所有元素相加,其和作为新图像的的所有元素相加,其和作为新图像的(2,2)元素的值。程序中使用的语句为:元素的值。程序中使用的语句为:nI(i,j)=sum(sum(L)。该例子中,新图像的该例子中,新图像的(2,2)元素的值为元素的值为0。2.2.3.1 3.1 邻域操作邻域操作接着修改的第接着修改的第2个元素是个元素是(2,3),然后是,然后是(2,4),(2,n-1),但,但(2,n)没有修改。没有修改。接着修改第接着修改第3行行(3,2)到到(3,n-1)元素,如此下去,最后一行没有修改。元素,如此下去,
19、最后一行没有修改。l从上例可以看出,使用语言编写程序对图像进行邻域操作时,从上例可以看出,使用语言编写程序对图像进行邻域操作时,主要是利用多重循环语句实现。主要是利用多重循环语句实现。l值得注意的是,循环结束后,新矩阵值得注意的是,循环结束后,新矩阵nI中会有很多负值,使中会有很多负值,使用用imshow函数能够自动对矩阵数据按比例进行调整。函数能够自动对矩阵数据按比例进行调整。l程序运行结果如下所示:程序运行结果如下所示:2.3.2 2.3.2 MatlabMatlab邻域操作函数邻域操作函数lMatlab提供了可以实现邻域操作的函数,因此提供了可以实现邻域操作的函数,因此可以直接调用相应的
20、邻域操作函数,完成各种可以直接调用相应的邻域操作函数,完成各种邻域操作功能:邻域操作功能:nlfiltercolfiltblkproc2.3.2 2.3.2 MatlabMatlab邻域操作函数邻域操作函数lnlfilternlfilter函数的一般形式为:函数的一般形式为:nInI=nlfilter(I,Mnlfilter(I,M N,FUN)N,FUN)l其中其中:I I 是被处理的图像,是被处理的图像,M NM N表示滑动块的高为表示滑动块的高为M M、宽为宽为N N。FUNFUN是要对滑动覆盖区域进行操作的函数名,该函数可以是各种滤波算子,是要对滑动覆盖区域进行操作的函数名,该函数可以
21、是各种滤波算子,可以是任意定义的矩阵。可以是任意定义的矩阵。【例】使用【例】使用nlfilternlfilter函数对图像进行均值平滑邻域操作。函数对图像进行均值平滑邻域操作。I=imread(shizi.bmp);I=rgb2gray(I);figure(1),subplot(1,2,1);imshow(I);fun=inline(mean(mean(x);nI=nlfilter(I,3 3,fun);figure(1),subplot(1,2,2);imshow(nI,);2.3.2 2.3.2 MatlabMatlab邻域操作函数邻域操作函数linline(mean(mean(x)的含义
22、:的含义:根据参数字串根据参数字串mean(mean(x)创建内联函数,以便创建内联函数,以便在后面的程序语句中调用该函数。在后面的程序语句中调用该函数。lnlfilter(I,3 3,fun)的含义:的含义:使用使用3行行3列大小的滑动块在图像列大小的滑动块在图像I上滑动,每滑动一上滑动,每滑动一次就以滑块遮住的部分作为参数次就以滑块遮住的部分作为参数x调用函数调用函数fun。由于由于fun即为上述定义的内联函数,因此新产生的图即为上述定义的内联函数,因此新产生的图像像nI中除边界外,每个像素都是图像中除边界外,每个像素都是图像I中某中某3行行3列图列图像块的均值。像块的均值。函数函数nfi
23、lter在边界处用在边界处用0填补。填补。2.3.2 2.3.2 MatlabMatlab邻域操作函数邻域操作函数l调用函数调用函数nlfilter时,如果参数时,如果参数FUN 有参数,则需要使用有参数,则需要使用下面格式:下面格式:nI=nlfilter(I,M N,FUN,P1,P2,.)l其中,其中,P1,P2,.为函数为函数FUN的实参,把值传入函数体中。的实参,把值传入函数体中。l【例】若已有函数定义:【例】若已有函数定义:function r=myfun(t,p1,p2)r=mean(mean(t).*p1+p2;则可设计如下程序:则可设计如下程序:I=imread(shizi.
24、bmp);I=rgb2gray(I);figure(1),subplot(1,2,1);imshow(I);fun=myfun;p1=2;p2=1;nI=nlfilter(I,3 3,fun,p1,p2);figure(1),subplot(1,2,2);imshow(nI,);2.3.2 2.3.2 MatlabMatlab邻域操作函数邻域操作函数lcolfilt函数与函数与nlfilter函数的主要区别有:函数的主要区别有:colfilt函数在处理图像时,先把滑动块遮住的图像块函数在处理图像时,先把滑动块遮住的图像块排成一个列向量,处理之后再恢复成图像块。排成一个列向量,处理之后再恢复成图
25、像块。nlfilter函数采取逐像素滑动的方式,函数采取逐像素滑动的方式,colfilt函数在移函数在移动的时候可以选择:动的时候可以选择:lsliding:逐像素滑动:逐像素滑动ldistinct:逐图像块滑动,滑动时图像块互不重叠。:逐图像块滑动,滑动时图像块互不重叠。2.3.2 2.3.2 MatlabMatlab邻域操作函数邻域操作函数l【例】【例】使用使用colfilt函数进行图像邻域操作(逐函数进行图像邻域操作(逐像素)像素)若已有函数定义:若已有函数定义:function r=myfun(x,p1,p2)r=mean(x).*p1+p2;则可设计如下程序:则可设计如下程序:I=i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 图像几何操作 图像 几何 操作
限制150内