第三次实验报告数字图像处理实验 —图像的几何变换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字图像处理实验—图像的几何变换
姓名:***
班级:信息10-1
学号:36号
实验三、图像的几何变换
一、 实验目的
1.学习几种常见的图像几何变换,并通过实验体会几何变换的效果;
2.掌握图像平移、剪切、缩放、旋转、镜像、错切等几何变换的算法原理及编程实现
3.掌握matlab 编程环境中基本的图像处理函数
4.掌握图像的复合变换
二、 实验原理
1 初始坐标为(x , y )的点经过平移(0x ,0y ),坐标变为('x ,'y ),两
点之间的关系为:⎩⎨⎧+=+=0
0''y y y x x x ,以矩阵形式表示为:
⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥
⎥⎥⎦⎤=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡11 0 0y 1 0 0 11''00y x x y x 2 图像的镜像变换是以图象垂直中轴线或水平中轴线交换图像的变换,分为垂直镜像变换和水平镜像变换,两者的矩阵形式分别为:
⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤-=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡11 0 00 1 0 0 0 11''y x y x ⎢⎢⎢⎣⎡⎥
⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡11 0 00 1- 0 0 0 11''y x y x 3 图像缩小和放大变换矩阵相同:
⎢⎢⎢⎣⎡⎥
⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡11 0 00 0 0 0 1''y x y x S S y x 当1 ,1≤≤y x S S 时,图像缩小;1 ,1≥≥y x S S 时,图像放大。
4 图像旋转定义为以图像中某一点为原点以逆时针或顺时针方向旋转一定角度。其变换矩阵为:
⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡11 0 00 cos sin 0 sin cos 1''y x y x θθθθ 该变换矩阵是绕坐标轴原点进行的,如果是绕一个指定点(b a ,)旋转,则现要将坐标系平移到该点,进行旋转,然后再平移回到新的坐标原点。
三、实验步骤
1 启动MA TLAB程序,对图像文件分别进行平移、垂直镜像变换、水平镜像变换、缩放和旋转操作,与实验箱运行结果进行比对;
2 记录和整理实验报告
四、实验程序
X=imread('E:\test.jpg');
figure,imshow(X);title('原图')
%缩放
A=[0.5 0 0;0 2 0;0 0 1];
T=maketform('affine',A);
Z=imtransform(X,T);
figure,imshow(Z),title('图像缩放');
%图像旋转
A=[cos(pi/4) sin(pi/4) 0;-sin(pi/4) cos(pi/4) 0;0 0 1];
T=maketform('affine',A);
Z=imtransform(X,T);
figure,imshow(Z);title('图像旋转');
%水平剪切
A=[1 0 0;0.5 1 0;0 0 1];
T=maketform('affine',A);
Z=imtransform(X,T);
figure,imshow(Z);title('水平剪切');
%垂直剪切
A=[1 0.5 0;0 1 0;0 0 1];
T=maketform('affine',A);
Z=imtransform(X,T);
figure,imshow(Z);title('垂直剪切');
%水平镜像
A=[-1 0 0;0 1 0;1 0 1];
T=maketform('affine',A);
Z=imtransform(X,T);
figure,imshow(Z);title('水平镜像');
%垂直镜像
A=[1 0 0;0 -1 0;0 1 1];
T=maketform('affine',A);
Z=imtransform(X,T);
figure,imshow(Z);title('垂直镜像');
五、实验结果图
原图图像缩放图像旋转
垂直剪切
垂直镜像
六、结果分析
1.图像的平移。经典的图像平移有两种算法,一种不会改变图像大小,另一种可以相应扩大图像。本程序采用了第一种算法。为了使图像能按照用户指定的水平平移量和垂直平移量移动,作者首先定义了一个参数设定窗,并在图像平移菜单的事件处理函数中对此对话框进行定义,获取平移量。然后调用图像平移函数,从而实现将图像中所有的点(像素)都按照指定的平移量水平、垂直移动,平移后的图像上的每一点都可以在原图像中找到对应的点。
2.图像的镜像。图像的水平镜像操作是将图像的左半部分和右半部分以图像垂直中轴线为中心镜像进行对换;图像的垂直镜像操作是将图像上半部分和下半部分以图像水平中轴线镜像进行对换。可以一个个像素进行镜像,也可以利用位图存储的连续性进行整行复制。对于水平镜像作者采用前者,而垂直镜像采用后者,对两种方法都进行了尝试。
3.图像的转置。即将图像像素的x坐标和y坐标互换。它和图像的镜像变换类似,不同之处在于图像转置后DIB的头文件也要进行相应的改变,即更新宽度和高度信息。因此传递给图像转置函数的参数是直接指向DIB的指针,而不是直接指向DIB像素的指针。程序首先一个个像素进行转置复制,然后互换DIB 中图像的高宽,实现图像转置的功能。
4.图像的缩放。程序将图像按用户设定的X轴方向的缩放比率和Y轴方向的缩放比率进行缩放。此操作产生的图像中的像素可能在原图中找不到相应的像素点,因此必须进行近似处理。此处理有多种方法,可以采用最邻近插值算法,也可以采用别的插值算法。后者处理效果要好一些,但是运算量也相应增加很多,因此本程序采用前者,即最邻近插值算法。最后,由于缩放改变了图像的高度和宽度,因此还需要对DIB头文件的高度和宽度信息进行更新。
5.图像的旋转。程序将图像以图像中心为原点,按照用户设定的旋转角度进行旋转。和图像的平移一样,可以采用不同的算法,既可以把转出显示区域的部分图像截去,也可以扩大图像范围以显示所有图像,在本程序中采用后者。同时为了减小运算量,将图像以图像中心为坐标系原点进行旋转,而不是用户指定的任意一点。