![](https://csdnimg.cn/release/download_crawler_static/89341300/bg1.jpg)
小波变换:S 整数变换作业
1. 题目:用整数小波的 S 或 2/6 变换对 256*256 Lena 灰度图像进行非标准方法的 3 级分
解与重构。
2. 总体设计:本题目的意义在于通过实验体会整数小波变换,由于 MATLAB 自身对矩阵
操作的方便性,以及其丰富的库函数(如可以用来直接显示图象),我决定用 MATLAB
编程完成本次作业。要说明的是,这里并不是直接利用 MATLAB 中的 wavelet 工具箱
中的已有小波函数对图象进行整数小波分解,而是用下面的已知分解公式进行小波分解
和重构。分解公式:
1, ,2 1 ,2
1, ,2 1,
[ ]
j k j k j k
j k j k j k
d s s
s s d
- +
- -
= -
= +
重构公式:
,2 1, 1,
,2 1 1, ,2
[ ]
j k j k j k
j k j k j k
s s d
s d s
- -
+ -
= -
= +
,其中[ ]表示取整。
进行非标准小波分解,即交替进行 3 次行变换和 3 次列变换,程序对每次变换后的结果
都保存为位图文件,运行后可以在程序所在路径下看到保存的 6 个分解位图文件和 6 个
重构位图文件。最后还会在一个图像中显示每次分解后的图像,以便于对比。
3. 实现方法:编写 S 变换的分解和重构子程序,分别对图像数据进行一次行列分解和列
行重构,程序返回该次变换后的行列矩阵,在主程序中可以连续三次调用行列变换,即
完成对原始图像的 3 级分解和重构,这里的变换是完全可逆的,也就是能够完全恢复原
图像数据。通过对比 3 次重构后返回的数据与原图像数据后发现它们完全相同。主要用
的 MATLAB 工具函数有:
imread( )---------读取图像数据,为 uint8 类型,需变为 double 类型才能进行各种运算
imwrite()---------用于保存图像,这里用它来保存每一级变换后的图像
image( )----------显示图像,需要给出色谱表 colormap,这里是灰度图,用 colormap =
gray(256)即可
subplot( )--------用于分开绘图,即在一个窗口下绘制多个图像,在这里用于输出变换后
的图像,以便对比。
更详细的内容请参考函数文件 SDecompose.m 和 SRecompose.m,分别是分解和重构图
像的函数,main.m 是演示主程序。
命令行下输入 main 运行后,按照提示输入要处理的图像文件名称即可(要求是 256×
256 的灰度图像,否则结果可能会出错。程序所在目录下的 lena.bmp 和 girl.bmp 就是
256×256 的灰度图像)可以直接按键盘‘d’键,程序会默认使用 lena.bmp 进行演示。
3 级分解完成后,输出后面的 3 级分解效果图。命令窗中会给出提示,按下任意键将继
续进行图像 3 级重构,完成后会输出后面的 3 级重构图。
进行分解和重构同时已经将分解和重构得到的图像存盘,在当前工作目录下即可看到保
存的 12 个位图文件,其中分解和重构图像各有 6 个。若要查看清晰的变换图像,可以
打开它们查看。
4. 经验教训:本次作业用 MATLAB 而不是 VC 实现,虽然看上去简单许多,但是对于我