图像处理综合训练 课程设计Word文档格式.docx
《图像处理综合训练 课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《图像处理综合训练 课程设计Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
附录20
摘要
图像变换,是指通过某种数学映射,将图像信号从空域变换到另外的域上进行分析的手段。
在图像处理中主要用Matlab编写图像处理程序并调用Matlab图像处理的部分内部函数进行处理。
在编制好程序之后,要对程序进行相应的调试,并且进行测试,以验证程序的正确性与可用性。
调试及测试时,通过相关信息,充分验证程序的可用性。
本程序通篇均用Matlab写成,具有很高的严密性,具有很高的真实性与可靠性,也充分验证了图像处理在生活中的普遍应用。
关键词:
图像变换,傅立叶变换,Matlab
一、前言
图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。
数字图像处理主要研究以下内容:
图像几何变换;
如傅立叶变换、沃尔什变换、离散余弦变换等;
图象锐化处理;
图像编码压缩;
图像增强和复原;
图像分割;
图像描述;
图像分类(识别)。
图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面。
随着人类活动范围的不断扩大,图像处理的应用领域也将随之不断扩大。
图像所带给人们的直观信息的特点,使得图像处理技术随着计算机技术、多媒体技术的飞速发展取得了长足的进步。
图像具有可反映人类第一感觉下的思维的魅力,这些年来,图像技术快速的向各个领域渗透。
图像变换程序要求学生在掌握计算机图象处理技术的基础知识、基本原理和方法的基础上,使用计算机图象处理方法完成图像分割程序设计。
通过该题目的分析和设计,使学生巩固计算机图象处理课程中所学到的相关知识、理论和方法。
得到计算机图象处理应用的综合训练,全面培养图象处理程序开发过程中的分析、设计、编码、测试及文档规范书写的能力,提高解决实际问题的能力。
二、算法分析与描述
1.1傅立叶变换
傅里叶变换是函数的一种正交变换,正交变换就是将一个函数分解成一组正交函数的线性组合。
一个非周期信号可以理解成一个周期无限(
)长的一个周期信号,这是相邻谱线之间的间隔
。
同时,各频率分量的幅值也就趋于无穷小,为了描述频谱特性,引入频谱密度函数
的概念。
由于
是一个无穷小量,所以取其为
,
是一个连续变换的量,得到傅里叶正、逆变换的计算公式如下:
显然,对于一个非周期信号,其频谱为连续谱。
根据以上公式,得到一维快速傅里叶变换(FFT)的变换公式:
设为
一维信号序列,令:
,则:
把上式分成奇数项和偶数项,得:
其中,
1.2一维小波多尺度分解及重构的一维小波多尺度分解及重构的MATLAB实现:
MATLAB小波工具箱提供了以下几个实现一维小波分解和重构的函数[3]:
[C,L]=WAVEDEC(X,N,’wname’),多尺度一维小波分解函数。
其中C为分解结构变量,L为个分解结构以及原始信号长度变量,X为原始信号,N为分解层度,’wname’为小波类型。
X=WAVEREC(C,L,’wname’),多尺度一维小波重构函数。
其中C,L为多尺度一维小波分解函数WAVEDEC的计算结果。
D=DETCOEF(C,L,N),一维小波变换细节序列提取函数。
’wname’为小波类型。
A=APPCOEF(C,L,’wname’,N),一维小波变换近似序列提取函数。
Y=WRCOEF(’type’,C,L,’wname’,N),一维小波系数单支重构函数。
其中,当’type’=’a’时重构近似序列,当’type’=’d’时重构高频系数;
C,L,’wname’,N含义同上。
Y=UPCOEF(’type’,S,’wname’,N),一维系数的直接小波重构函数。
其中’type’,’wname’,N含义同上。
S为小波分解系数变量
三、详细设计过程
2.1算法分析
1.傅里叶算法理论依据
设
为连续时间信号,若
满足
则有
的傅里叶变换
并且反变换为
将
写为复数形式
且
当为离散情况时,一维离散傅里叶变换(DFT)与反变换定义如下:
以上公式由数学公式编译器编写。
四、调试过程中出现的问题及相应解决办法
程序调试是软件使用的一个重要环节,而在调试过程中可能会出现错误,这就需要对错误进行细致分析个修正,程序错误一般分为两种:
语法错误和逻辑错误。
对于语法错误通常MATLAB会报错,并指出错误所在位置方便用户纠正。
对于逻辑错误,往往需要用户对程序进行调试,发现错误原因和位置。
MATLAB下的程序调试方法主要有直接调试法和工具调试法。
:
4.1.调试法
(1)直接调试法
1.通过分析后,将重点怀疑语句后的分号删掉,将结果显示出来,然后与预期值进行比较。
2.单步调试一个函数时,将第一行的函数声明注释掉,并定义输入变量的值,然后以脚本方式运行此M文件,这样就可保存下原来的中间变量了,可以对这些结果进行分析,找出错误。
3.可以在适当的位置添加变量输出值的语句。
4.在程序的适当位置添加keyboard指令。
当MATLAB执行到此处时将暂停,并显示k>
>
提示符,用户可以查看或改变各个工作空间中存放的变量,在提示符后键入return指令可以继续执行原文件。
(2)工具调试法
MATLAB的工具调试法主要包括以命令行为主的程序调试和以图形界面为主的程序调试。
4.2.具体错误及处理办法部分列举
1.在源码中遗失“;
”。
2.即缺少“usingnamespacestd;
3.调试器错误信息:
例:
errorC2065:
'
cout'
:
undeclaredidentifier
缺少命名空间使用定义例如cout/cin/endl/<
<
/>
等在命名空间中定义的符号和标示符无法使用。
4.变量未定义就直接使用。
5.在程序中使用中文标示符,如将英文”;
”错误输入成了”;
6.在使用输入输出流的时候错误使用了标示符“>
”“<
4.3.常用的调试技巧
调试程序是一件复杂的工程,不但要求程序员对系统设计结果非常熟悉,思路清晰,更需要不断地在实践中积累经验。
以下技巧可供参考:
1.事先做好备份:
调试程序时,很容易意外地修改、覆盖或删除掉必要的代码部分,所以应先做好备份。
2.分离受怀疑的程序:
试着找到出错的代码段,将其复制到一个新的工程中,对新工程运行,检查错误,可以排除程序其它部分的干扰,提高调试效率。
3.缩小搜索范围:
与第二种方法相近。
五、程序运行截图及其说明
以123.jpg原图为例进行图像几何变换的处理,以下为123原图及处理后保存的图象。
(1)未经任何处理的图象,如图5.1所示。
图5.1
123原图
(2)图象进行反傅里叶变换处理,如图5.2所示。
123经过反傅立叶变换
(3)图象进行直接变换频谱处理,如图5.3所示。
123经过直接变换频谱
(4)图像进行小波多尺度和重构处理,如图5.4所示。
(傅立叶变换以后,时域与频域形成了对偶运算关系,因此可以通过傅立叶变换达到某些运算的简化。
)
六、简单操作手册
一.本系统实现图像的傅里叶变换步骤:
1.进入操作界面图:
2进入打开界面图
3进行各项图像变换操作
4反傅立叶变换效果
5直接变换频谱
6.小波多尺度和重构处理
设计总结
在这一周多图像处理的综合训练中,通过对图象变换的设计过程,我加深了对图像变换的理解,对傅立叶变换和小波多尺度和重构的实现有所掌握,对各种处理图像的知识有了进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。
在这次的综合训练中我认识到了自己的不足。
在以后的学习中我会更加注意各个方面的能力的协调发展。
在课程设计时遇到了很多的问题,在同学的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。
通过对此次图象处理综合训练的实际操作及分析图像处理综合训练使我对图像处理的广泛应用有了深入的认识和体会,同时通过这次的综合训练,也在一定程度上提高了我的实际动手能力,虽然只有短短的一周多,但我切实感受到综合训练对提高学习速度和消化知识的重要性,加深对图像的理解及增强实际动手能力,锻炼了我们分析与编写软件代码的能力及团结协作的能力。
一周多的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各科知识融会,组织,来配合学习,为以后的发展打下坚实的基础
这次综合训练使我受益匪浅
参考资料
[1]黄维通.VisualC++面向对象与可视化程序设计.清华大学出版社,2003
[2]RC.Gonzalez,RE.Woods,SL.Eddins著,阮秋琦,阮宇智等译.计算机图象处理(MATLAB版).北京:
电子工业出版社,2005
[3]K.R.Castleman.计算机图象处理.北京:
电子工业出版社,2002
[4]章毓晋.图像处理与分析-图像工程(上册),清华大学,2001
[5]何斌等编著.VisualC++计算机图象处理.人民邮电出版社,2002
[6]RC.Gonzalez,RE.Woods著,阮秋琦,阮宇智等译.计算机图象处理(第2版).北京:
电子工业出版社,2003
[7]张宏林编著.VisualC++计算机图象模式识别技术及工程实践.人民邮电出版社,2003.
致谢
这次综合训练中我学到了很多东西,真正做到了理论与实践相结合,得到了软件工程的综合训练,大大地提高了解决实际问题的能力,这与老师的指导和同学们的帮助是分不开的。
在这次数字图像处理的课程设计过程中,首先加深了我对于数字图像处理这门课程的认识,通过对相关知识的进一步了解和掌握,清楚的认识到这门课程在实际应用的广泛性,通过Matlab编程的过程之中,进一步掌握了Matlab的使用,明白了这个软件作为许多应用方向工具的强大之处,通过对一些小错误的改造还认识到了以往自己没有注意到的一些小的细节问题
当然我的同学在程序设计中也给了我很大的帮助,没有他们,我就难以发现一些潜在的错误,在此我对他们的帮助表示感谢!
附录
functionvarargout=untitled(varargin)
%UNTITLEDMATLABcodeforuntitled.fig
%UNTITLED,byitself,createsanewUNTITLEDorraisestheexisting
%singleton*.
%
%H=UNTITLEDreturnsthehandletoanewUNTITLEDorthehandleto
%theexistingsingleton*.
%UNTITLED('
CALLBACK'
hObject,eventData,handles,...)callsthelocal
%functionnamedCALLBACKinUNTITLED.Mwiththegiveninputarguments.
Property'
'
Value'
...)createsanewUNTITLEDorraisesthe
%existingsingleton*.Startingfromtheleft,propertyvaluepairsare
%appliedtotheGUIbeforeuntitled_OpeningFcngetscalled.An
%unrecognizedpropertynameorinvalidvaluemakespropertyapplication
%stop.Allinputsarepassedtountitled_OpeningFcnviavarargin.
%*SeeGUIOptionsonGUIDE'
sToolsmenu.Choose"
GUIallowsonlyone
%instancetorun(singleton)"
.
%Seealso:
GUIDE,GUIDATA,GUIHANDLES
%Edittheabovetexttomodifytheresponsetohelpuntitled
%LastModifiedbyGUIDEv2.514-Jan-201419:
51:
47
%Begininitializationcode-DONOTEDIT
gui_Singleton=1;
gui_State=struct('
gui_Name'
mfilename,...
gui_Singleton'
gui_Singleton,...
gui_OpeningFcn'
@untitled_OpeningFcn,...
gui_OutputFcn'
@untitled_OutputFcn,...
gui_LayoutFcn'
[],...
gui_Callback'
[]);
ifnargin&
&
ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});
end
ifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
%Endinitializationcode-DONOTEDIT
%---Executesjustbeforeuntitledismadevisible.
functionuntitled_OpeningFcn(hObject,eventdata,handles,varargin)
%Thisfunctionhasnooutputargs,seeOutputFcn.
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%varargincommandlineargumentstountitled(seeVARARGIN)
%Choosedefaultcommandlineoutputforuntitled
handles.output=hObject;
%Updatehandlesstructure
guidata(hObject,handles);
%UIWAITmakesuntitledwaitforuserresponse(seeUIRESUME)
%uiwait(handles.figure1);
%---Outputsfromthisfunctionarereturnedtothecommandline.
functionvarargout=untitled_OutputFcn(hObject,eventdata,handles)
%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);
%Getdefaultcommandlineoutputfromhandlesstructure
varargout{1}=handles.output;
%--------------------------------------------------------------------
functionUntitled_1_Callback(hObject,eventdata,handles)
%hObjecthandletoUntitled_1(seeGCBO)
functionUntitled_5_Callback(hObject,eventdata,handles)
%hObjecthandletoUntitled_5(seeGCBO)
functionUntitled_9_Callback(hObject,eventdata,handles)
%hObjecthandletoUntitled_9(seeGCBO)
functionUntitled_6_Callback(hObject,eventdata,handles)
%hObjecthandletoUntitled_6(seeGCBO)
%反傅立叶变换处理代码
%img_src=getappdata(handles.figure_tuxiang,'
img_src'
);
globalimg_src
I=rgb2gray(img_src);
C=fft2(double(I));
%对图像进行傅立叶变换
B=fftshift(C);
%将直流分量移到频谱图的中心
D=ifft2(B);
%傅立叶反变换
axes(handles.axes_dst);
imshow(abs(D),[]);
functionUntitled_7_Callback(hObject,eventdata,handles)
%hObjecthandletoUntitled_7(seeGCBO)
%直接变换频谱
img_src=fft2(double(I));
B=fftshift(img_src);
imshow(log(abs(B)+1),[]);
functionUntitled_8_Callback(hObject,eventdata,handles)
%hObjecthandletoUntitled_8(seeGCBO)
%小波多尺度和重构处理
x=rgb2gray(img_src);
%真彩色图像转化为灰度图像
[cA,cH,cV,cD]=dwt2(x,'
db1'
%对图像进行单