图像变换程序设计.docx
- 文档编号:6407266
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:21
- 大小:1.51MB
图像变换程序设计.docx
《图像变换程序设计.docx》由会员分享,可在线阅读,更多相关《图像变换程序设计.docx(21页珍藏版)》请在冰豆网上搜索。
图像变换程序设计
*******************
实践教案
*******************
兰州理工大学
计算机与通信学院
2012年秋季学期
图象处理综合训练
题目:
图像变换程序设计
专业班级:
姓名:
学号:
指导教师:
成绩:
1.1傅里叶变换........................................................................................................................5
摘要
图像变换,是指通过某种数学映射,将图像信号从空域变换到另外地域上进行分析地手段.
在图像处理中主要用Matlab编写图像处理程序并调用Matlab图像处理地部分内部函数进行处理.在编制好程序之后,要对程序进行相应地调试,并且进行测试,以验证程序地正确性与可用性.调试及测试时,通过相关信息,充分验证程序地可用性.本程序通篇均用Matlab写成,具有很高地严密性,具有很高地真实性与可靠性,也充分验证了图像处理在生活中地普遍应用.
关键字:
图像变换,傅立叶变换,Matlab
前言
图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理地过程.
数字图像处理主要研究以下内容:
图像几何变换;如傅立叶变换、沃尔什变换、离散余弦变换等;图象锐化处理;图像编码压缩;图像增强和复原;图像分割;图像描述;图像分类(识别).
图像是人类获取和交换信息地主要来源,因此,图像处理地应用领域必然涉及到人类生活和工作地方方面面.随着人类活动范围地不断扩大,图像处理地应用领域也将随之不断扩大.图像所带给人们地直观信息地特点,使得图像处理技术随着计算机技术、多媒体技术地飞速发展取得了长足地进步.图像具有可反映人类第一感觉下地思维地魅力,这些年来,图像技术快速地向各个领域渗透.
图像变换程序要求学生在掌握计算机图象处理技术地基础知识、基本原理和方法地基础上,使用计算机图象处理方法完成图像分割程序设计.
通过该题目地分析和设计,使学生巩固计算机图象处理课程中所学到地相关知识、理论和方法.得到计算机图象处理应用地综合训练,全面培养图象处理程序开发过程中地分析、设计、编码、测试及文档规范书写地能力,提高解决实际问题地能力.
1.算法分析与描述
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),一维小波变换细节序列提取函数.其中C,L为多尺度一维小波分解函数WAVEDEC地计算结果.’wname’为小波类型.
A=APPCOEF(C,L,’wname’,N),一维小波变换近似序列提取函数.其中C,L为多尺度一维小波分解函数WAVEDEC地计算结果.
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.详细设计
2.1算法分析
1、傅里叶算法理论依据
设
为连续时间信号,若
满足
则有
地傅里叶变换
并且反变换为
将
写为复数形式
且
当为离散情况时,一维离散傅里叶变换(DFT)与反变换定义如下:
以上公式由数学公式编译器编写.
3.调试过程中出现地问题及相应解决办法
程序调试是软件使用地一个重要环节,而在调试过程中可能会出现错误,这就需要对错误进行细致分析个修正:
3.1.程序错误分类:
程序错误分为三类
编译错误:
在编写程序时书写了错误地语法,编译器无法正确解释源代码而产生地错误,也称为语法错误,产生编译错误提示对话框.
实时错误:
应用程序运行期间,一条语句试图执行一条不可能执行地操作而产生地错误,也称为运行时错误,产生实时错误提示对话框.
逻辑错误:
是指程序地运行结果和程序员地设想有出入时产生地错误.这类错误没有违背语法规则、运行时也没有执行非法语句,所以不出现错误提示,很难发现.
3.2.具体错误及处理办法部分列举
1.在源码中遗失“;”.
2.即缺少“usingnamespacestd。
”.
3.调试器错误信息:
例:
errorC2065:
'cout':
undeclaredidentifier
缺少命名空间使用定义例如cout/cin/endl/<>>等在命名空间中定义地符号和标示符无法使用.
4.变量未定义就直接使用.
5.在程序中使用中文标示符,如将英文”。
”错误输入成了”;”.
6.在使用输入输出流地时候错误使用了标示符“>>”“<<”.
3.3.常用地调试技巧
调试程序是一件复杂地工程,不但要求程序员对系统设计结果非常熟悉,思路清晰,更需要不断地在实践中积累经验.以下技巧可供参考:
1.事先做好备份:
调试程序时,很容易意外地修改、覆盖或删除掉必要地代码部分,所以应先做好备份.
2.分离受怀疑地程序:
试着找到出错地代码段,将其复制到一个新地工程中,对新工程运行,检查错误,可以排除程序其它部分地干扰,提高调试效率.
3.缩小搜索范围:
与第二种方法相近.
4.程序运行截图及其说明
以www原图为例进行图像几何变换地处理,以下为www原图及处理后保存地图象.
(1)未经任何处理地图象,如图4.1所示.
图4.1www原图
(2)图象进行反傅里叶变换处理,如图4.2所示.
图4.2ww反傅里叶变换图
(3)图象进行直接变换频谱处理,如图4.3所示.
图4.3www直接变换频谱图
(4)图像进行小波多尺度和重构处理,如图4.4所示.
图4.4小波多尺度和重构
(傅立叶变换以后,时域与频域形成了对偶运算关系,因此可以通过傅立叶变换达到某些运算地简化.
5.简单操作手册
一.本系统实现图像地傅里叶变换步骤:
1.进入操作界面图:
图5.1操作界面图
2.小波多尺度和重构进入操作
图5.2操作界面
在这两周地图像处理地综合训练中,通过对图象变换地设计过程,我加深了对图像变换地理解,对傅立叶变换和小波多尺度和重构地实现有所掌握,对课本中所学地各种图像知识地进一步理解和掌握,学会了如何把学到地知识用于解决实际问题,锻炼了自己动手地能力.
在这次地综合训练中我认识到了自己地不足.在以后地学习中我会更加注意各个方面地能力地协调发展.在课程设计时遇到了很多地问题,在老师地帮助,和对各种资料地查阅中,将问题解决,培养了我自主动手,独立研究地能力,为今后在学习工作中能更好地发展打下了坚实地基础.
通过对此次图象处理综合训练地实际操作及分析,加深对图像地理解及增强实际动手能力,锻炼了我们分析与编写软件代码地能力及团结协作地能力.两周地课程设计很短暂,但其间地内容是很充实地,在其中我学习到了很多平时书本中无法学到地东西,积累了经验,锻炼了自己分析问题,解决问题地能力,并学会了如何将所学地各科知识融会,组织,来配合学习,为以后地发展打下坚实地基础
参考文献
[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.
致谢
这次综合训练中我学到了很多东西,真正做到了理论与实践相结合,得到了软件工程地综合训练,大大地提高了解决实际问题地能力,这与老师地指导和同学们地帮助是分不开地.
我地指导老师徐志刚老师在此次综合训练过程中提出了指导性地方案和架构,并指引我阅读相关地资料和书籍,使我在不熟悉地领域中仍能迅速掌握新地技术.给予了我最大地帮助和全面地指导.
当然我地同学在程序设计中也给了我很大地帮助,没有他们,我就难以发现一些潜在地错误,在此我对他们地帮助表示感谢!
附录
2.傅里叶算法实现:
A=imread('www.jpg')。
I=rgb2gray(A)。
C=fft2(double(I))。
%对图像进行傅立叶变换
B=fftshift(fft2(double(I)))。
%将直流分量移到频谱图地中心
D=ifft2(B)。
%傅立叶反变换
figure。
%画图像原始图
imshow(I)。
title('原图')。
figure。
imshow(log(abs(B)+1),[])。
title('直接变换频谱图')。
figure。
%画直接变换频谱图
imshow(abs(D),[])。
title('反傅里叶变换图')。
3.小波多尺度和重构算法实现:
i=imread('www.jpg')。
x=rgb2gray(i)。
%真彩色图像转化为灰度图像
[cA,cH,cV,cD]=dwt2(x,'db1')。
%对图像进行单层分解,小波为bd1
A=upcoef2('a',cA,'db1',1)。
H=upcoef2('h',cH,'db1',1)。
V=upcoef2('v',cV,'db1',1)。
D=upcoef2('d',cD,'db1',1)。
%图像编码
figure
subplot(221)。
image(wcodemat(A,192))。
title('近似细节系数')。
subplot(222)。
image(wcodemat(H,192))。
title('水平细节系数')。
subplot(223)。
image(wcodemat(V,192))。
title('垂直细节系数')。
subplot(224)。
image(wcodemat(D,192))。
title('对角细节系数')。
d=idwt2(cA,cH,cV,cD,'db1')。
%对分解地细节系数执行单层重构,小波为db1
imshow(d,[])。
图像进入界面源代码
functionvarargout=tuxiang(varargin)
%TUXIANGMATLABcodefortuxiang.fig
%TUXIANG,byitself,createsanewTUXIANGorraisestheexisting
%singleton*.
%
%H=TUXIANGreturnsthehandletoanewTUXIANGorthehandleto
%theexistingsingleton*.
%
%TUXIANG('CALLBACK',hObject,eventData,handles,...)callsthelocal
%functionnamedCALLBACKinTUXIANG.Mwiththegiveninputarguments.
%
%TUXIANG('Property','Value',...)createsanewTUXIANGorraisesthe
%existingsingleton*.Startingfromtheleft,propertyvaluepairsare
%appliedtotheGUIbeforetuxiang_OpeningFcngetscalled.An
%unrecognizedpropertynameorinvalidvaluemakespropertyapplication
%stop.Allinputsarepassedtotuxiang_OpeningFcnviavarargin.
%
%*SeeGUIOptionsonGUIDE'sToolsmenu.Choose"GUIallowsonlyone
%instancetorun(singleton)".
%
%Seealso:
GUIDE,GUIDATA,GUIHANDLES
%Edittheabovetexttomodifytheresponsetohelptuxiang
%LastModifiedbyGUIDEv2.510-Jan-201313:
34:
37
%Begininitializationcode-DONOTEDIT
gui_Singleton=1。
gui_State=struct('gui_Name',mfilename,...
'gui_Singleton',gui_Singleton,...
'gui_OpeningFcn',@tuxiang_OpeningFcn,...
'gui_OutputFcn',@tuxiang_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{:
})。
end
%Endinitializationcode-DONOTEDIT
%---Executesjustbeforetuxiangismadevisible.
functiontuxiang_OpeningFcn(hObject,eventdata,handles,varargin)
%Thisfunctionhasnooutputargs,seeOutputFcn.
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%varargincommandlineargumentstotuxiang(seeVARARGIN)
%Choosedefaultcommandlineoutputfortuxiang
handles.output=hObject。
%Updatehandlesstructure
guidata(hObject,handles)。
%UIWAITmakestuxiangwaitforuserresponse(seeUIRESUME)
%uiwait(handles.figure_tuxiang)。
%---Outputsfromthisfunctionarereturnedtothecommandline.
functionvarargout=tuxiang_OutputFcn(hObject,eventdata,handles)
%varargoutcellarrayforreturningoutputargs(seeVARARGOUT)。
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%Getdefaultcommandlineoutputfromhandlesstructure
varargout{1}=handles.output。
%--------------------------------------------------------------------
functionm_file_Callback(hObject,eventdata,handles)
%hObjecthandletom_file(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%--------------------------------------------------------------------
functionm_image_Callback(hObject,eventdata,handles)
%hObjecthandletom_image(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%--------------------------------------------------------------------
functionm_image_fyz_Callback(hObject,eventdata,handles)
%hObjecthandletom_image_fyz(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
img_src=getappdata(handles.figure_tuxiang,'img_src')。
I=rgb2gray(img_src)。
img_src=fft2(double(I))。
%对图像进行傅立叶变换
B=fftshift(img_src)。
%将直流分量移到频谱图地中心
axes(handles.axes_dst)。
imshow(log(abs(B)+1),[])。
%--------------------------------------------------------------------
functionm_image_fyf_Callback(hObject,eventdata,handles)
%hObjecthandletom_image_fyf(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
img_src=getappdata(handles.figure_tuxiang,'img_src')。
I=rgb2gray(img_src)。
C=fft2(double(I))。
%对图像进行傅立叶变换
B=fftshift(C)。
%将直流分量移到频谱图地中心
D=ifft2(B)。
%傅立叶反变换
axes(handles.axes_dst)。
imshow(abs(D),[])。
%--------------------------------------------------------------------
functionm_image_xb_Callback(hObject,eventdata,handles)
%hObjecthandletom_image_xb(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
img_src=getappdata(handles.figure_tuxiang,'img_src')。
x=rgb2gray(img_src)。
%真彩色图像转化为灰度图像
[cA,cH,cV,cD]=dwt2(x,'db1')。
%对图像进行单层分解,小波为bd1
A=upcoef2('a',cA,'db1',1)。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 变换 程序设计