《数字图像处理》课程设计报告课题名称图像几何变换系统设计学院自动控制与机械工程学院专业通信技术班级1班姓名学号毕思发201004090101高建磊201004090104瞿瑞锋201004090111刘跃翔201004090118杨正华201004090130时间2012.6.262目录一、引言………………………………………………………31.1课程设计的目的………………………………………………31.2课程设计任务……………………………………………………………31.3课程设计要求与内容……………………………………………………4二、系统总体设计………………………………………………………………52.1设计方案……………………………………………………………52.2开发步骤……………………………………………………………52.3开发工具……………………………………………………………52.4系统框图……………………………………………………………6三、系统设计与实现…………………………………………………………73.1模块功能…………………………………………………………73.2设计内容…………………………………………………………73.3流程图………………………………………………………………83.4Matlab程序实现代码…………………………………………10四、系统仿真与调试…………………………………………………………144.1matlab仿真结果截图示例…………………………………………144.2问题与解决方案……………………………………………………20五、心得体会…………………………………………………………21参考文献………………………………………………………………223一、引言近几年来,由于大规模集成电路技术和计算机技术的迅猛发展、离散数学理论的创立和完善,数字图像处理技术正逐渐成为其他科学技术领域中不可缺少的一项重要工具。数字图像技术也从空间探索到微观研究、从军事领域到农业生产、从科学教育到娱乐游戏等越来越多的领域得到广泛应用。无形之中成为了现代不可或缺的处理技术。我们的娱乐生活、学习、甚至是科技的发展都离不开它。通过课程设计实现对其的认知度以及更深入的学习和运用它。1.1课程设计的目的数字图像处理课程设计作为独立的教学环节,是通信技术及相关专业的集中实践环节之一,是学习完《数字图像处理》课程后,进行的一次综合练习。数字图像处理课程设计过程中,学生通过查阅资料、总体设计、模块设计、程序设计、集成调试等环节,完成一个基于Matlab编程语言,涉及多种典型应用,并具有综合功能的数字图像处理系统设计。使学生能够将课堂上学到的理论知识与实践应用结合起来,对数字图像处理基础理论、程序逻辑分析、算法设计等方面的知识进一步加深认识,同时在软件编程、调试、工程合作开发等方面得到较全的锻炼和提高。使学生增进对数字图像处理技术的感性认识,加深对相关理论的理解,牢固掌握数字图像处理的重要应用,如对比度扩展、直方图处理、二维傅里叶变换、滤波增强、图像分割、压缩编码等等。通过实际设计和开发促进学生了解和掌握数字图像处理应用系统的设计过程、方法及实现,提高学生在数字图像处理应用方面的实践技能和科学作风,培育学生综合运用理论知识解决实际问题的能力。1.2课程设计的任务分小组合作,利用Matlab软件对图像进行不同的效果处理,查阅相关资料并自主调试相关的程序,反复调试并达到预期课题要求的图像效果,并调用GUI功能实现菜单的窗口化,使其达到简单美观及实用的效果,能过正常演示并能实现其图像处理的要求,最后完成实验设计的相关报告,总结实验心得体会。41.3课程设计的要求与内容课程设计应以学生认知为主体,充分调动学生的积极性和能动性,重视学生自学能力的培养。根据课程设计具体课题安排时间,确定课题的设计、编程和调试内容,分团队开展课程设计活动,按时完成每部分工作。课程设计集中在实验室进行。在课程设计过程中,坚持独立完成,实现课题规定的各项要求,并写出设计报告。具体要求如下:使用Matlab编程环境进行程序设计;分组进行课程实际,每组3~5人,任选本指导书规定的课题之一完成;每组自主调研、完成总体设计、划分各模块功能并分工合作完成,严禁不同组织之间相互抄袭;课程设计作品及报告必须在规定的时间内完成并提交;提交的数字图像处理系统软件程序必须调试通过,能够正常运行演示,至少达到课题基本要求;提交的设计报告必须按规定格式编写。设计一个具有几何变换功能的数字图像处理系统。具体要求如下:系统具备良好的图形用户界面,通过按钮或菜单进行操作控制,能让用户方便地选择不同的图像文件进行处理,并显示图像处理的结果;(1)实现图像的平移和裁剪,方式不少于3种;(2)实现图像的扭曲变换,方式不少于3种;(3)实现图像的水平镜像、垂直镜像及对角镜像变换;(4)实现图像的放大、缩小和旋转,采用不少于两种的灰度插值方法分别进行处理;(5)提高1:处理参数可由用户自行设定;(6)提高2:利用不同的变换参数制作动画效果;(7)发挥:增加其他几何变换功能。5二、系统总体设计2.1设计方案综合运用MATLAB实现图像处理的GUI程序设计,根据需求进行程序的功能分析和界面设计,并实现对图像的平移,裁剪,扭曲,镜像,缩放,旋转等变换,按照要求增加变换的效果与其他的几何变换。2.2开发步骤这次的设计的功能按钮包括菜单和面板的按钮两部分,面板上的按钮功能简洁,然后菜单上的功能都是图像处理必备的一些基本功能,大多可以通过Matlab自带的一些现成函数来调用以实现,关键是要注意它的使用语法和支持的图像类型。2.3开发工具整个设计都是基于Matlab7.0作为开发软件来设计的。MATLAB既是一种直观、高效的计算机语言,同时又是一个科学计算平台。它为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。根据它提供的500多个数学和工程函数,工程技术人员和科学工作者可以在它的集成环境中交互或编程以完成各自的计算。MATLAB中集成了功能强大的图像处理工具箱。由于MATLAB语言的语法特征与C语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式,而且这种语言可移植性好、可扩展性强,再加上其中有丰富的图像处理函数,所以MATLAB在图像处理的应用中具有很大的优势。62.4系统框图图(2)系统框图7三、系统设计与实现3.1模块功能本课程设计通过菜单和按钮的方式来对图片进行各种几何变换,操作简单,处理结果一目了然。系统具备良好的图形用户界面,通过按钮或菜单进行操作控制,能让用户方便地选择不同的图像文件进行处理,并显示图像处理的结果。利用菜单按钮及简介的版块设计实现各功能的处理结果与操作方式。介绍图片处理按钮菜单的功能。主界面设计如下:图(1)主界面3.2设计内容图像的几何变换:平移,裁剪,扭曲,镜像,缩放,旋转以及提高内容。1平移和裁剪:平移是日常生活中最普遍的运动方式,而图像的平移是几何变换这中最简单的变换之一。菜单中使用translate函数和movesult对图像进行平移,通过改变程序中的参数可以控制平移的方式,视需求而定。在实际应用或科研领域,很多时候要对图像进行裁剪操作。图像裁剪就是在原图像或者大图中裁剪出图像块来,这个图像一般是多边形形状的。图像裁剪是几何处理中的一种基本操作。利用imcrop函数调用可以是现期裁剪功能,格式为imcrop(I,rect);其中rect是一个四元向量[xminyminwidthheight],8分别表示矩形的左上角的坐标,宽度和高度;2扭曲变换:MATLAB使用imtransform函数来实现图像空间变换,imtransform函数的调用格式为imtransform(I,T),其中I是要变换的图像,T是maketform函数产生的变换结果。Maketform函数就是利用给定的参量建立变换结构,然后把该变换结构赋给结构体变换,根据得到的结构体变量T,调用imtransform函数进行变换;3镜像变换:实现水平,垂直,对角镜像处理,双精度取点后调用函数实现。4缩放与旋转变换:利用'nearest''bilinear''bicubic'三个函数实现图片的三种缩放与旋转处理。利用imresize和imrotate两个函数实现缩放及旋转功能。5新增功能:错切,二维投影,区域选择。3.3流程图(1)平移和裁剪:图(3)平移和裁剪流程图9(2)扭曲变换:图(4)扭曲变换流程图(3)镜像变换:图(5)镜像变换流程图10(4)缩放与旋转:图(6)缩放与旋转流程图3.4Matlab程序实现代码(1)平移和裁切平移一:axes(handles.axes2);%定义图像显示位置I=handles.img;%选定操作图T=getimage;%获取图像信息prompt={'输入参数:'};defans={'2'};p=inputdlg(prompt,'input',1,defans);%创建数据输入窗口p1=str2num(p{1});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));11平移二:axes(handles.axes2);%定义图像显示位置F=handles.img;%选定操作图T=getimage;prompt={'输入参数:'};defans={'2'};%获取图像信息p=inputdlg(prompt,'input',1,defans);%创建数据输入窗口p1=str2num(p{1});se=translate(strel(1),p1);%对图像进行平移J=imdilate(F,se);imshow(J,[])%显示操作结果裁剪:axes(handles.axes2);%%定义图像显示位置A1=(handles.img);%选定操作图T=getimage;%获取图像信息prompt={'输入参数:'};defans={'2'};p=inputdlg(prompt,'input',1,defans);%创建数据输入窗口p1=str2num(p{1});A2=imcrop(A1,p1);%裁切imshow(A2);%显示结果(2)扭曲变换扭曲一:axes(handles.axes2);%定义图像显示位置I=handles.img;%选定操作图T=maketform('affine',[0.500;0.510;001]);%扭曲I1=imtransform(I,T);%二维变换imshow(I1);%显示结果扭曲二:axes(handles.axes2)%定义图像显示位置;I=handles.img;%选定操作图T=maketform('affine',[0.51;01;10],[0.20.6;0.50.3;0.50.9]);%扭曲I1=imtransform(I,T);%二维变换imshow(I1);%显示结果12(3)镜像变换水平镜像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))=A