《像图几何变换程序设计图像处理综合训练--本科毕业设计.doc》由会员分享,可在线阅读,更多相关《像图几何变换程序设计图像处理综合训练--本科毕业设计.doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、*实践教学*兰州理工大学计算机与通信学院计算机图象处理课程设计题 目: 图像几何变换程序设计 目录摘要2一、前言3二、算法分析与描述4三、详细设计过程6四、调试过程中出现的问题及相应解决办法10五、程序运行截图及其说明11六、 简单操作手册14设计总结15参考文献16致谢17附录18摘要本次课程设计我的题目是图像几何变换和图像分割程序设计,计算机图像处理的实现主要以数学模型为基础,通过建立合适的算法来实现具体的图像处理,几何变换是最常见的图像处理手段,通过对变形的图像进行几何校正,可以得出准确的图像。常用的几何变换功能包括图像的平移、图像的旋转、图像的缩放、图像的错切等。作为数字图像处理的一个
2、重要部分,一般用MATLAB编程工具设计一个完整的应用程序,实现相应的图像几何变换功能。图像分割是一种非常重要的图像处理技术,它不仅得到了广泛的重视和研究,也在实际中得到了大量的应用。本文主要介绍了计算机图像处理中的图像分割程序的设计与实现。关键词:图像几何变换、平移、旋转、放大缩小一、前言图形图像处理的应用领域涉及人类生活和工作的各个方面,它是从60年代以来随计算机的技术和VLSI的发展而产生、发展和不断成熟起来的一个新技术领域,理论上和实际应用上都并取得了巨大的成就。数字图像处理与模拟图像处理的根本不同在于,它不会因图像的存储、传输或复制等一系列变换操作而导致图像质量的退化,所以图形图像的
3、处理在我们的生活中又很重要的作用。在对图像的研究和应用中,人们往往只对图像中的某些部分感兴趣。这些部分通常称为目标或前景,它们一般对应图像中特定的、具体独特性质的区域。为了辨识和分析目标,需要将它们分别提取出来,在此基础上才有可能对目标进一步利用。二、算法分析与描述2.1图像几何变换2.1.1图像的平移变换图像的平移变换就是将图像中的像素点按照要求的量进行垂直、水平移动。图像的水平处理,只是改变了原有景物在画面上的位置,而图像的内容不发生变化。初始坐标为(x0,y0)的点经过平移(tx,ty)(以向右,向下为正方向)后,坐标变为(x1,y1)。这两点之间的关系是:x1=x0+txy1=y0+t
4、y使用矩阵的形式来表达如下:x1 y1 1 = x0 y0 1 值得注意的是,一个数字图像(灰度图)是以一个矩阵来描述的,因此,如果不扩大存放处理后的矩阵的大小,则会出现图像的部分内容移出画面的情况。2.1.2图像的旋转变换 图像的旋转是指以图像中的某一点为原点以逆时针或顺时针方向翻转一定的角度,其翻转公式如下:x1=x0cosa-y0sina;y1=-x0sina+y0cosa;用矩阵表示为: x1 y1 1 = x0 y0 1 其中,(x1,y1)是原图像的像素点的坐标;(x0,y0)是对应像素点经过翻转变换后的图像的像素点的坐标。 我们旋转所在的坐标系和图像显示时对应的Windows屏幕
5、坐标系是不一样的,这里xoy为旋转坐标系,xoy为屏幕坐标系。实际上我们可以分为三步进行整个旋转变换:1.将坐标系xoy变成xoy;2.将该点顺时针旋转a角;3.将坐标系xoy变回xoy将上面三步变换进行合成得到三个矩阵的级联矩阵;(x0,y0)和(x1,y1)都是xoy坐标系中的点;2.1.3图像的放大以及缩小如果一幅图像要放大k1*k2倍,就是将图像中每个像素复制到k1*k2个像素所构成的子块中,这些子块再按原来的排列顺序进行排列,就可以实现图像的方的方法。图像缩小的方法跟图像放大的方法雷同。三、详细设计过程3.1图像几何变换图像的平移图像的镜像图像的旋转图像的放缩图像几何变化系统垂直镜像
6、水平镜像图像的放大上下平移上下左右平移左右平移图像的缩小 3.1.1图像平移:1. 图像平移的基本原理图像平移是将一副图像中所有的点都按照指定的平移量在水平,垂直方向移动,平移后的图像与源图像相同。平移后的图像上的每一点都可以在原图像中找到对应的点。 X = X0 + X Y = Y0 + Y利用其次坐标,变换前后图像上的点F0(X0,Y0)和P(X,Y)之间的关系可以用如下的矩阵变换表示为:X0 1 0 X X Y = 0 1 Y Y 1 0 0 1 1 图像放缩的基本理论图像比例缩放是指将给定的图像在X轴方向按比例缩放FX倍,在Y轴方向上按比例缩放FY倍从而获得一副新的图像。比例缩放前后两
7、点F0(X0,Y0),P(X,Y)之间的关系用矩形形式可以表示为: X FX 0 0 X0 X=FxX0 Y = 0 Fy 0 y0 1 0 0 0 1 Y=FyY0 三个入口参数:原图像1, 缩放倍数r,插值方式mode扫描新图像,计算对应原图像坐标根据不同插值算法计算输出图像判断插值结束计算新原图像行列数获取原图像行列数初始化 最近邻双线性插值插值双三次插值 获取原图像大小3.1.2图像的旋转 求cos.sin求旋转图像行列坐标(以图像左上角为坐标原点)计算旋转图像尺寸扫描旋转图像,计算像素点对应原图像行列坐标结束3.1.3图像的放大放大倍数为1.25倍D=imread(wa.jpg);F
8、=imresize(D,1.25);figure,imshow(F),title(放大后的图像);截图: 四、调试过程中出现的问题及相应解决办法通过MATLAB界面运行程序进行图像几何变换时,图像有可能变换不了。可能是所需要变换的图片为灰度图像或者二值图像。需要先将RGB图像转换一下。五、程序运行截图及其说明图像几何变换图像平移: 图5.1 图象低通滤波 图像的旋转 图5.2图像的旋转图像的放大 图5.3图像的放大图像的镜像 图5.4 图像的水平镜像 图5.5 图像的垂直镜像六、 简单操作手册 打开MATLAB软件,单击File下拉菜单。选择NEW或者Open创建一个新的GUI或者打开一个已有
9、的GUI(后缀名为.fig的文件)。然后根据提示进行操作。打开已经创建好的GUI程序。然后进行所需要的操作。比如我需要进行图像的水平翻转设计总结我的综合训练题目是图像几何变换程序设计,在这两周的图形图像处理综合训练过程当中,收获很多。在平常的课程学习过程当中,书上的知识感觉不是太难,只要自己认真听讲,下课后再仔细回顾回顾就能很快掌握,自以为什么都明白了,但在课设过程中却发现,要将知识实际运用起来却是十分困难的,所以在今后的学习过程中我一定要加强实际运用的能力训练,更好的将学来的知识转化到解决实际问题之中。通过此次综合训练,使我计算机图像处理的工程及其实现有了更深的理解,获得了很多宝贵的经验。特
10、别是怎么样通过理论与实践相结合,把理论知识应用到我们做的程序实践过程上去。学会了很多关于计算机图像处理的经验和技巧,更重要的是,知道应如何在困难重重中一步一步细心的发现问题,解决问题,并在遇到问题时同学之间相互帮助中,深刻体会到了团体合作精神的重要性。参考文献1 朱虹.计算机图象处理基础M. 科学出版社, 20052 R C.Gonzalez, R E.Woods著,阮秋琦,阮宇智等译.计算机图象处理(第2版).北京:电子工业出版社,20033 K.R.Castleman. 计算机图象处理.北京:电子工业出版社,20024 章毓晋.图像处理与分析-图像工程(上册),清华大学,20015 何斌等
11、编著.Visual C+计算机图象处理.人民邮电出版社,2002 6 张宏林编著.Visual C+计算机图象模式识别技术及工程实践.人民邮电出版社,2003.7 黄维通.Visual C+面向对象与可视化程序设计.清华大学出版社,20038 R C.Gonzalez, R E.Woods, S L. Eddins著,阮秋琦,阮宇智等译.计算机图象处理(MATLAB版).北京:电子工业出版社,2005致谢首先我要感谢我的老师,在设计过程中给了我很多宝贵意见和丰富的资料并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。同时感谢我的同学,在设计中遇到问题时和我积极地讨论,并提
12、出了很多建设性的意见,没有他们的帮助,只靠我自己一定很难完成这次任务。在今后的学习和工作中,我一定要发扬团队精神,齐心协力完成相应的设计工作。附录实现图像平移的文件的代码:figure,imshow(F,);title(平移后图形);figure,imshow(D);function pushbutton6_Callback(hObject, eventdata, handles)global Taxes(handles.axes2); %定义图像显示位置 I=handles.img;%选定操作图 T=getimage;%获取图像信息 prompt=输入参数:; defans=0; p=inp
13、utdlg(prompt,input,1,defans); %创建数据输入窗口 p1=str2num(p1); J = double(I);%定义为双精度型 H = size(I);%定义尺寸 I_moveresult = zeros(H) %平移后背景变成了黑色的x_move =p1;y_move =p1;I_moveresult(x_move+1:H(1),y_move+1:H(2),1:H(3)= J(1:H(1)-x_move,1:H(2)-y_move,1:H(3); imshow(mat2gray(I_moveresult); if ispc & isequal(get(hObje
14、ct,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);endglobal Taxes(handles.axes2); %定义图像显示位置; I=handles.img; %选定操作图 T=getimage; %获取图像信息 prompt=输入参数:; defans=0;%定义数据放大缩小 p=inputdlg(prompt,input,1,defans);%创建数据输入窗口 p1=str2num(p1); f=imresize(I,p1,nearest); %
15、选用插值方法最近邻法 figure,%新建窗口 imshow(f);%显示结果 title(处理后);if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);End.实现图像旋转的文件的代码:function pushbutton8_Callback(hObject, eventdata, handles)global Taxes(handles.axes2); %定义图像显示位置; T=getimage;
16、%获取图像信息 prompt=旋转角度:; defans=0; p=inputdlg(prompt,input,1,defans); %创建数据输入窗口 p1=str2num(p1);%把字符串转换为数值 f=imrotate(handles.img,p1,nearest);%旋转并定义插值方法 imshow(f); %显示结果if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);End实现图像放大的文件的
17、代码:global Taxes(handles.axes2); %定义图像显示位置; I=handles.img; %选定操作图 T=getimage; %获取图像信息 prompt=输入参数:; defans=0;%定义数据放大缩小 p=inputdlg(prompt,input,1,defans);%创建数据输入窗口 p1=str2num(p1); f=imresize(I,p1,nearest); %选用插值方法最近邻法 figure,%新建窗口 imshow(f);%显示结果 title(处理后);if ispc & isequal(get(hObject,BackgroundColo
18、r), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);endglobal Taxes(handles.axes2); %定义图像显示位置; T=getimage; %获取图像信息 prompt=旋转角度:; defans=0; p=inputdlg(prompt,input,1,defans); %创建数据输入窗口 p1=str2num(p1);%把字符串转换为数值 f=imrotate(handles.img,p1,nearest);%旋转并定义插值方法 imshow(f); %显示结果if
19、 ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);end实现图像镜像的文件的代码:axes(handles.axes2); %定义图像显示位置; A1=handles.img; %选定操作图 A1=double(A1);%定义为双精度型 H=size(A1);%定义尺寸 A3(1:H(1),1:H(2),1:H(3)=A1(1:H(1),H(2):-1:1,1:H(3);%水平镜像 imshow(uint8(A3);%显示结果axes(handles.axes2); %定义图像显示位置; A1=handles.img; %选定操作图 A1=double(A1); %定义为双精度型 H=size(A1); %定义尺寸 A2(1:H(1),1:H(2),1:H(3)=A1(H(1):-1:1,1:H(2),1:H(3);%垂直镜像 imshow(uint8(A2); %显示结果