1、1*实践教学*兰州理工大学计算机与通信学院2012 年秋季学期图象处理综合训练题 目: 图像变换程序设计 专业班级: 姓 名: 学 号: 指导教师: 成 绩: 2目录摘 要 .3前 言 .41. 算法分析与描述 .51.1 傅里叶变换.51.2 小波多尺度和重构.62.详细设计.72.1 算法分析和理论依据 .73.调试过程中出现的问题及相应解决办法 .84. 程序运行截图及其说明 .95. 简单操作手册 .146.设计总结 .18参考文献 .19致 谢 .19附录 .203摘 要图像变换,是指通过某种数学映射,将图像信号从空域变换到另外的域上进行分析的手段。在图像处理中主要用 Matlab
2、编写图像处理程序并调用 Matlab 图像处理的部分内部函数进行处理。在编制好程序之后,要对程序进行相应的调试,并且进行测试,以验证程序的正确性与可用性。调试及测试时,通过相关信息,充分验证程序的可用性。本程序通篇均用 Matlab 写成,具有很高的严密性,具有很高的真实性与可靠性,也充分验证了图像处理在生活中的普遍应用。关键字:图像变换,傅立叶变换 ,Matlab4前 言图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。数字图像处理主要研究以下内容: 图像几何变换;如傅立叶变换、沃尔什变换、离散余弦变换等;图象锐化处理;图像编码压缩;图像增强和复原;图像分割;图像描述;
3、图像分类(识别) 。图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面。随着人类活动范围的不断扩大,图像处理的应用领域也将随之不断扩大。图像所带给人们的直观信息的特点,使得图像处理技术随着计算机技术、多媒体技术的飞速发展取得了长足的进步。图像具有可反映人类第一感觉下的思维的魅力,这些年来,图像技术快速的向各个领域渗透。图像变换程序要求学生在掌握计算机图象处理技术的基础知识、基本原理和方法的基础上,使用计算机图象处理方法完成图像分割程序设计。通过该题目的分析和设计,使学生巩固计算机图象处理课程中所学到的相关知识、理论和方法。得到计算机图象处理应用的综合
4、训练,全面培养图象处理程序开发过程中的分析、设计、编码、测试及文档规范书写的能力,提高解决实际问题的能力。51. 算法分析与描述1.1 傅立叶变换傅里叶变换是函数的一种正交变换,正交变换就是将一个函数分解成一组正交函数的线性组合。一个非周期信号可以理解成一个周期无限( )T长的一个周期信号,这是相邻谱线之间的间隔 。同时,各频率分量20T的幅值也就趋于无穷小,为了描述频谱特性,引入频谱密度函数 的概念。()Fjw00().1limlinnTTFjw由于 是一个无穷小量,所以取其为 , 是一个连续变换的20Tdw量,得到傅里叶正、逆变换的计算公式如下: ()().jwtFjfe12jtftd显然
5、,对于一个非周期信号,其频谱为连续谱。根据以上公式,得到一维快速傅里叶变换(FFT)的变换公式:设为 一维信号序列,令: ()0,(1).,)fxffN,则:.2exp(.)uxjx uWjN11.200()()()uNj uxNx xFffW把上式分成奇数项和偶数项,得: 1122(21)00()()(NNuxxuNxufWf1100()().().()()MMuux uMeMxxFff FW 其中, ,u61.2 一维小波多尺度分解及重构的一维小波多尺度分解及重构的 MATLAB 实现 :MATLAB 小波工具箱提供了以下几个实现一维小波分解和重构的函数3:C,L = WAVEDEC(X,
6、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 的
7、计算结果。 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 为小波分解系数变量72.详细设计2.1 算法分析1、傅里叶算法理论依据设 为连续时间信号,若 满足()ft ()ft2|()|ftd (1)则有 的傅里叶变换()ft()().jwtFjfe (2)并且反变换为1()()2jwtftd (3)将 写为复数形式()Fw(
8、)()RjI(4)且 22|()()FwI1tanh()R (5)当为离散情况时,一维离散傅里叶变换(DFT)与反变换定义如下:1122(21)00()()(NNuxxuNxFufWf(6)120()(),.juxNufe (7)以上公式由数学公式编译器编写。83.调试过程中出现的问题及相应解决办法程序调试是软件使用的一个重要环节,而在调试过程中可能会出现错误,这就需要对错误进行细致分析个修正:3.1程序错误分类: 程序错误分为三类 编译错误: 在编写程序时书写了错误的语法, 编译器无法正确解释源代码而产生的错误,也称为语法错误,产生编译错误提示对话框。 实时错误: 应用程序运行期间,一条语句
9、试图执行一条不可能执行的操作而产生的错误,也称为运行时错误,产生实时错误提示对话框。 逻辑错误: 是指程序的运行结果和程序员的设想有出入时产生的错误。这类错误没有违背语法规则、运行时也没有执行非法语句,所以不出现错误提示,很难发现。3.2具体错误及处理办法部分列举1在源码中遗失“;” 。2.即缺少“using namespace std;”。3.调试器错误信息:例:error C2065: cout : undeclared identifier缺少命名空间使用定义例如 cout/cin/endl/等在命名空间中定义的符号和标示符无法使用。4.变量未定义就直接使用。5.在程序中使用中文标示符,
10、如将英文”;”错误输入成了 ”;” 。6.在使用输入输出流的时候错误使用了标示符“” “”。3.3.常用的调试技巧 调试程序是一件复杂的工程,不但要求程序员对系统设计结果非常熟悉,思路清晰,更需要不断地在实践中积累经验。以下技巧可供参考: 91事先做好备份:调试程序时,很容易意外地修改、覆盖或删除掉必要的代码部分,所以应先做好备份。 2分离受怀疑的程序:试着找到出错的代码段,将其复制到一个新的工程中,对新工程运行,检查错误,可以排除程序其它部分的干扰,提高调试效率。 3缩小搜索范围:与第二种方法相近。4. 程序运行截图及其说明以 www 原图为例进行图像几何变换的处理,以下为 www 原图及处理后保存的图象。(1)未经任何处理的图象,如图 4.1 所示。10图 4.1 www 原图