《图形图像的几何变换.ppt》由会员分享,可在线阅读,更多相关《图形图像的几何变换.ppt(43页珍藏版)》请在三一文库上搜索。
1、图像的几何变换,1 基本知识 2 图像的读取和显示 3 几何变换的概念 4 图像的缩放原理以及平移 5 图像旋转、相加、相减等操作 (二次课),基本知识,变量的定义 p=1 矩阵的定义 s=zeros(2,3,4) p=zeros(2,3) p=2 4 5; 4 5 6 p(:,1) 获取第一列 p(1,:) 获取第一行 p(1,2:3) 获取第一行的第2到第3列,矩阵的下标从开始,基本知识,row,col,con=size(s) 获取矩阵s的大小 row,col=size(p) 获取矩阵p的大小 for a=1:2:60 end if a10 b=10 else b=6 end,基本知识,f
2、ix(x) :获取变量的整数部分 floor(x): 小于x的最大整数 ceil(x) :大于x的最小整数 round(x): 四舍五入 figure:在新的图中显示信息 subplot(x,y,n): 在一幅图上x*y的 plot(x,y,r*),plot(x,y,r*s,LineWidth,2, MarkerSize,10),线宽,标记大小,基本知识,图像读取 x,map= imread(filename) x,map =imread(filename,type) 显示图像 image(x) imshow(x) unit8(x) 将double型数据转换为无符号的整数,在图像进行显示前必须
3、进行的一个转换,图像保存 imwrite(x,filename,type) 彩色图变灰色图的方法 0.299*R+0.587*G+0.114*B,图像的空间平移、比例缩放、旋转、仿射变换和图像插值,改变像素的空间位置或估算新空间位置上的像素值。,对于单色(灰度)图像而言,每个像素的亮度用一个数值来表示,通常数值范围在0到255之间,0表示黑、255表示白,其它值表示处于黑白之间的灰度 彩色图像可以用红、绿、蓝三元组的二维矩阵来表示。通常,三元组的每个数值也是在0到255之间,0表示相应的基色在该像素中没有,而255则代表相应的基色在该像素中取得最大值,图像的质量 1.平均亮度 2.对比度 是指
4、一幅图象中灰度反差的大小。 对比度=最大亮度/最小亮度,3.清晰度 由图像边缘灰度变化的速度来描述。 4.分解力或分辨率,移变换平移变换,最邻近插值(近邻取样法) 对于通过反向变换得到的一个浮点坐标,对其进行简单的取整,得到一个整数型坐标,这个整数型坐标对应的像素值就是目的像素的像素值,图像大比例放大时的马赛克效应,放大10倍,思考: 如果比例太大,两种方法都会出现马赛克效应。你有没有办法解决?,(Sx-0)/(SW-0)=(Dx-0)/(DW-0),Sx=Dx*SW/DW,(Sy-0)/(SH-0)=(Dy-0)/(DH-0),Sy=Dy*SH/DH,二次线性插值公式为: tmpColor0
5、=Color0*(1-u) + Color2*u; tmpColor1=Color1*(1-u) + Color3*u; DstColor =tmpColor0*(1-v) + tmpColor2*v; 展开公式为: pm0=(1-u)*(1-v); pm1=v*(1-u); pm2=u*(1-v); pm3=u*v; 则颜色混合公式为: DstColor = Color0*pm0 + Color1*pm1 + Color2*pm2 + Color3*pm3;,5.5.1 图像的缩小,一、图像的尺寸减半 2M*2N的图像缩小为:M*N的图像。 处理方法是: 取偶数行和偶数列构成新的图像。,图像
6、的减半缩小效果,二、依比例的缩小: M*N大小的图像缩小为:L*S大小。 其中:M/N=L/S=k. 1.计算c= L / M 2.设旧图像是F(x,y),新图像是I (x,y) 则:I (x,y) =F(int(c*x),int(c*y),取:2,3,4,6,7,8列;2,3,4行,图像的按比例缩小效果,三、不依比例缩小 这种操作一定带来图像的几何畸变。 M*N大小的图像缩小为:L*S大小。 其中:M/L=k1, N/S=k2. 1.计算c1=1/k1,c2=1/k2 2.设旧图像是F(x,y),新图像是I (x,y) 则:I (x,y) =F(int(c1*x),int(c2*y),取:2
7、,3,5,6列;2,4行,图像的不按比例任意缩小,5.5.2 图像的放大,图像的缩小操作中,是从现有的信息里如何挑选所需要的有用信息。 图像的放大操作中,则需对尺寸放大后所多出来的空格填入适当的值,这是信息的估计问题,所以较图像的缩小要难一些。 一、图像的成倍放大 常用的方法是:原来的一个点的值填到一个2*2的小块中去。,二、图像的按比例放大方法: 方法一: 将一点的值用一个小块来代替。即:,方法二: M*N大小的图像放大为:L*S大小。 其中:M/N=L/S=k. 1.计算c= L / M 2.设旧图像是F(x,y),新图像是I (x,y) 则:I (x,y) =F(int(c*x),int
8、(c*y),三、任意不依比例放大 这种操作一定带来图像的几何畸变。 M*N大小的图像放大为:L*S大小。 其中: L / M =k1, S / N =k2. 1.计算c1=k1,c2=k2 2.设旧图像是F(x,y),新图像是I (x,y) 则:I (x,y) =F(int(c1*x),int(c2*y),图像不按比例放大,图像的旋转,图像的旋转实际上是坐标系的旋转,下图给出了图像旋转的原理示意图。,图像的旋转,为了尽量不扩大画布,所以是以画面的中心点为坐标原点进行旋转的。所以有: 设图像大小为M*N,作新图像的画布为M1*N1.,图像的旋转,因为像素的坐标都是整数,所以当用前面的方法旋转时,
9、会出现画面上有许多的空点,(即白点)这就影响了旋转图像的效果。为此我们还需要进行图像的空点的插值。,图像的旋转效果,图像的旋转,最简单的方法是行插值或是列插值方法: 1. 找出当前行的最小和最大的非白点的坐 标,记作:(i,k1)、(i,k2)。 2. 在(k1,k2)范围内进行插值,插值的方法 是:空点的像素值等于前一点的像素值。 3. 同样的操作重复M1行。,图像的旋转,插值处理示意图:,图像旋转中的插值处理效果,X,MAP=imread(lajiao.JPG,JPG); image(X) x1=X; row col=size(x1(:,:,1); newrow=floor(1.414*r
10、ow); newcol=floor(1.414*col); x3=ones(newrow,newcol,3)*255; sita=6.26*0.8; for i=1:1:row for j=1:1:col x=round(i-row/2)*cos(sita)+(j-col/2)*sin(sita)+newrow/2); y=round(-(i-row/2)*sin(sita)+(j-col/2)*cos(sita)+newcol/2); if xnewrow x=newrow; end,if ynewcol y=newcol; end x3(x,y,1)=X(i,j,1); x3(x,y,2)
11、=X(i,j,2); x3(x,y,3)=X(i,j,3); end end figure x4=uint8(x3) image(x4) imwrite(x4,hh.jpg,jpg),图像相加,图像相加,p1=imread(person1.bmp); p2=imread(person.bmp); rowp1, colp1,np1 =size(p1); rowp2,colp2,np2=size(p2); new =zeros(rowp1,colp1,3); threshold=0; a1=0.5; a2=1-a1; for i=1:rowp1 for j=1:colp1 new(i,j,1)=
12、ceil(p1(i,j,1)*a1+p2(i,j,1)*a2); new(i,j,2)=ceil(p1(i,j,2)*a1+p2(i,j,2)*a2); new(i,j,3)= ceil(p1(i,j,3)*a1+p2(i,j,3)*a2); end end figure subplot(2,2,1) imshow(p1) subplot(2,2,2) imshow(p2) subplot(2,2,3) new =uint8(new) imshow(new),图像相减,图像相减,p1=imread(back.bmp); p2=imread(person.bmp); rowp1, colp1,n
13、p1 =size(p1); rowp2,colp2,np2=size(p2); new =zeros(rowp1,colp1,3); threshold=40; for i=1:rowp1 for j=1:colp1 new(i,j,1)= p1(i,j,1)-p2(i,j,1); new(i,j,2)= p1(i,j,2)-p2(i,j,2); new(i,j,3)= p1(i,j,3)-p2(i,j,3); if new(i,j,1) threshold new(i,j,1)=0;%new(i,j,1)+255; end if new(i,j,2) threshold new(i,j,2)=0;%new(i,j,2)+255; end if new(i,j,3) threshold new(i,j,3)=0;%new(i,j,3)+255; end end end,