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