imtransformn函数进行数据传递转换,达到错切的效果。
2.3 GUI界面之间的转换
1、GUI界面之间的转换靠回调函数来实现: h=gcf; //返回当前句柄值 main; //主函数名 close(h); 2、文件输入:
filename,pathname]=...
uigetfile({'*.bmp';'*.jpg';'*.gif'},'选择图片'); //创建文件对话框 str=[pathname,filename]; 3、退出软件: Close all;
8
第3章 设计的结果与分析
3.1图像平移效果及分析
图5 平移左下位置效果图
结果分析:
平移的效果就是以图像中心为原点坐标,输入两个参数,分别为x,y。由二维平面的坐标值改变图像的原始位置。本实验采用的是定向的编写程序,通过指令来完成平移后的图像显示。也可以采用灵活的方式,使用对话框来输入需要的参数,图片的坐标是固定的,所以产生的效果就是移出去的部分不显示,空缺的位置为黑色,体现出需要的效果,同时还应该注意要使用灰度图像,若非灰度图像,则程序不能别识,应该使用a=rgb2gary(文件名)类似的函数来转换彩色图像为灰度图像,这样才能更好地对图像进行平移变换。
3.2图像缩放效果及分析
图6 图像缩小效果图
结果分析:
缩放变换的效果是使图片的大小发生改变,本实验采用两种方法来实现,一种是固定参数的方法,其
9
优点是简便操作,直接对命令按钮点击既能出现效果,另一种是通过对话框的形式输入参数,这种方法的好处是灵活性比较高。图像的缩放一种是按比例进行的,一种是非比例缩放的,本次实验使用的是比例缩放。在放大缩小的过程中,图像的像素也会随之放大缩小。这就使得图像的像素位置会发生改变,有可能会涉及到非整数点,那么就会遇到一个问题,图像会出现空洞,这些空洞需要被填补以完善图像的整体,其中使用的方法有插值处理。插值处理又分为最近邻插值,双线性插值和双立方插值。本次实验默认使用最近邻插值,但其实最近邻插值的效果会随着图像的放大而出现块状效应,也就是俗称的马赛克。而是用双线性和双立方插值的方法就会使得这种效应减弱,但是后两种方法的过程在计算方面会很繁琐。在不影响图像质量的前提下,采用最近邻的方法处理图像可以得到所需的效果。
3.3图像旋转效果及分析
图7 图像旋转45°效果图
结果分析:
旋转角度的不同使得图像有不同的效果,但是在类似45°的角度中,图像的坐标会发生改变,为了适应这种改变,可以通过坐标随着变换的改变而改变。本实验也采用两种方法实现。用内置函数就可以完成效果。
3.4图像镜像效果及分析
图8 图像水平镜像效果图
10
结果分析:
镜像分为水平镜像和垂直镜像,镜像的判断是根据以什么作为对称轴,以x为对称的则是垂直镜像,以y轴为对称的则水平镜像。镜像的函数也可用内置函数来实现。
3.5图像错切效果及分析
图9 图像垂直错切效果图
结果分析:
图像错切,是一种仿射变换。类似于投影。我们知道直接投影就是垂直地去看图像的影子,而错切则是在水平和竖直方向分别以一定的角度来看投影,这样就出现图像斜着的感觉。图像错切的实现是通过一个错切矩阵来实现的,改变一定的参数,就会使得错切的角度有很大的变化。
11
第4章 总结
通过这次综合课设,我学到了数字图像处理的几何变换方面的知识。通过自己制作MATLAB GUI图像几何变换软件,熟悉了GUI设计界面,同时也了解到图像几何变换的原理。在制作软件中,通过查找资料,再到学习其中的重点知识,最后学以致用,将别人的知识加以改进作为自己的知识输出,在这个过程中我体会到了学习的乐趣。同时也借这次机会锻炼了自己编程的能力,为了毕业设计的学习打下良好的基础。
课设中,我还遇到了一些问题,刚开始做缩放的时候总是把坐标轴的更改弄错,经过查书和网上搜索,最终将结果做出来了,我觉得至少这一点是我以前没有做好的一部分,还有就是在做平移的时候总是想不出用什么函数来表示,通过认真反复看书和思考,我最后也攻克难题,实现了所有的功能。通过这次可是也使我对数字图像处理这门课程有了更深的了解,我从中悟到只有踏实的去一步步地做才能解决矛盾,困难,但是只是一味的想象困难是没有任何帮助的。在这次综合设计中我受益匪浅。
12