欢迎来到天天文库
浏览记录
ID:62233196
大小:77.86 KB
页数:3页
时间:2021-04-22
《整数小波变换作业.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、小波变换:S整数变换作业1.题目:用整数小波的S或2/6变换对256*256Lena灰度图像进行非标准方法的3级分解与重构。2.总体设计:本题目的意义在于通过实验体会整数小波变换,由于MATLAB自身对矩阵操作的方便性,以及其丰富的库函数(如可以用来直接显示图象),我决定用MATLAB编程完成本次作业。要说明的是,这里并不是直接利用MATLAB中的wavelet工具箱中的已有小波函数对图象进行整数小波分解,而是用下面的已知分解公式进行小波分解dj1,ksj,2k1sj,2k和重构。分解公式:sj1,ksj
2、,2k[dj1,k]sj,2ksj1,k[dj1,k]重构公式:dj1,k,其中[]表示取整。sj,2k1sj,2k进行非标准小波分解,即交替进行3次行变换和3次列变换,程序对每次变换后的结果都保存为位图文件,运行后可以在程序所在路径下看到保存的6个分解位图文件和6个重构位图文件。最后还会在一个图像中显示每次分解后的图像,以便于对比。3.实现方法:编写S变换的分解和重构子程序,分别对图像数据进行一次行列分解和列行重构,程序返回该次变换后的行列矩阵,在主程序中可以连续三次调用行列变换,即完成对原始图像的3级
3、分解和重构,这里的变换是完全可逆的,也就是能够完全恢复原图像数据。通过对比3次重构后返回的数据与原图像数据后发现它们完全相同。主要用的MATLAB工具函数有:imread()---------读取图像数据,为uint8类型,需变为double类型才能进行各种运算imwrite()---------用于保存图像,这里用它来保存每一级变换后的图像image()----------显示图像,需要给出色谱表colormap,这里是灰度图,用colormap=gray(256)即可subplot()--------
4、用于分开绘图,即在一个窗口下绘制多个图像,在这里用于输出变换后的图像,以便对比。更详细的内容请参考函数文件SDecompose.m和SRecompose.m,分别是分解和重构图像的函数,main.m是演示主程序。命令行下输入main运行后,按照提示输入要处理的图像文件名称即可(要求是256×256的灰度图像,否则结果可能会出错。程序所在目录下的lena.bmp和girl.bmp就是256×256的灰度图像)可以直接按键盘‘d’键,程序会默认使用lena.bmp进行演示。3级分解完成后,输出后面的3级分解效
5、果图。命令窗中会给出提示,按下任意键将继续进行图像3级重构,完成后会输出后面的3级重构图。进行分解和重构同时已经将分解和重构得到的图像存盘,在当前工作目录下即可看到保存的12个位图文件,其中分解和重构图像各有6个。若要查看清晰的变换图像,可以打开它们查看。4.经验教训:本次作业用MATLAB而不是VC实现,虽然看上去简单许多,但是对于我这种刚刚接触MATLAB的人来说,仍然是耗了不少时间,需要不断地查找帮助文件来查看函数的用法,开始时错误百出,就像初次使用C++编程一样。在首次成功后发现原图像数据和重构数
6、据总有误差,但是根据S整数变换的可逆性,应该可以完全重构原始数据,在排除了是程序变换运算错误后,发现读出图像数据类型是uint8后,估计是该类型运算出错,上网搜索后终于找到症结所在:由于MATLAB读出的图像数据保存的是uint8类型(单字节0~255),它不能直接参与运算,在变为double类型后才可以进行运算。改造程序后,发现果然如此,此时原始数据和重构数据完全相同。本次作业是一次挑战和尝试,通过它,学会的不仅仅是一些MATLAB函数和整数小波变换的方法,更重要的是它使我敢于挑战自己以前未接触过的东西
7、,查找资料,编程和调试,最终解决问题。生活和学习中正是有了这种不怕困难,敢于尝试,不折不挠的精神才能使我们不断进步。5.运行结果截图:3级分解效果图3级重构效果图(左)原始图像(256×256灰度图)(右)重构图像(256×256灰度图)以上两幅经过S整数分解和重构后的图像,可以发现二者几乎没有差别,事实上它们完全一样(因为S整数变换是可逆的)。
此文档下载收益归作者所有