小波图像分解与合成的设计报告内容
2007-04-30 19:47
小波图像分解与合成的设计报告内容
一、小波图像分解与合成及阈值测试概述
(一)、haar 小波与 Daubechies 小波分解与重构概述
根据 haar 函数定义,可得出当 N=2 时,哈尔(haar)正规化变换矩阵为
,因为 haar 矩阵是正交矩阵,具可分离变换性质,对二维的像
素矩阵,可由连续 2 次运用一维的 haar 小波变换来实现,如对图像像素
矩阵的每一行求变换后,再对其每一列求变换可得二维 haar 小波变换,
这叫标准分解,如果交替地对每一行和每一列像素值进行变换,则为非标
准分解。并且可利用矩阵形式的优点,对 1×N 的像素矩阵分解成若干个
1×2 的矩阵与上述 N=2 的 haar 正规化变换矩阵作一维的 haar 小波变换,
减少计算量,实现 haar 小波分解。因为正规化的 haar 变换矩阵为对称变
换矩阵,其逆变换矩阵和正变换的相同,只要把原来每次变换后得到的矩
阵数值再作一次变换,则可以实现重构。Haar 小波在时域上是不连续的,
因此分析性能并不很好,但它的计算简单。这里程序采用非标准分解方法。
在变换矩阵中,第一列变换得到图像像素均值,为图像像素低频分量,第
二列得到图像像素差值,为高频分量,原像素值第 i 对像素分解的低频和
高频分量值分别存在矩阵的 i 和 N/2+i 处。重构时取回这两个数值,再与
逆变换矩阵相乘存回原处,则实现重构。
根据 Daubechies 小波的定义,可设计出一组满足正交化要求的滤波器,
利用卷积模板实现低通和高通功能,主要步骤为:
1.
利用 Matlab 中的 Daubechies 小波滤波器计算函数 dbaux 求出滤
波器作模板系数,对 dbN,滤波器长度为 2N,这里求 db9,其滤波器长度为
18。
2. 由于图像像素只有有限的 2N 个非零值,就需要解决边界问题。Matlab
软件里缺省的分解模式 sym 采用对称周期化扩展技术。也就是将图像的四
个边界先做对称处理的矩阵拓展,避免了边界的不连续性。如图(这里以
256×256 为例,即从标号 0 到 255):
_________|______________________________________|___________
___
|—|—|—|—|—|—|—|———|——|——|——|——|——|——|——|
|2 |1 |0 |0 |1 |2 |3 |......|252 |253 |254 |255 |255 |254 |253 |
|—|—|—|—|—|—|—|———|——|——|——|——|——|——|——|
_________|______________________________________|______________
对 1×M 的矩阵像数值,其 dbN 一次变换(低通、高通)后输出的总长度为
M+2(N-1),矩阵拓展长度为 M+4×(N-1)。如对 1×256,一次变换后低通、
高通系数总长度为 272,则矩阵需对称拓展至 288 再作卷积运算。
3.
将模板上系数与矩阵(一维)对应象素相乘再求和(卷积运算)。
4.
将所得数存到相应位置。
5.
模板右移两个像素,再做同样计算,直至计算完最后 2N 个像素为
止。
分解(正变换)与重构(逆变换)的滤波器可在 MATLAB 中用以下命令得
到:
逆变换的低通滤波器 rh=dbaux(N)
逆变换的高通滤波器 rg(n)=-(-1)^n×rh(2N-
n+1);
正变换的低通滤波器 h=rh(2N:-1:1);
正变换的高通滤波器 g(n)=(-
1)^n×rh(n) ;
(n=1,2,...,2N)
(n=1,2,…,2N)
重构过程为高低频滤波器与各个矩阵卷积后再相加来恢复图像数据
的,卷积解释与分解类似,但要根据分解时扩展矩阵方式,重构时对矩阵向
前或向后插入零,保证输出的矩阵长度为原矩阵长度。从定义可以知道,
db1 变换即为 haar 小波变换,所以对像素矩阵长度不为 2 的倍数的图像,
haar 小波变换也可以用同样方法作分解与重构(低通为[0.5 0.5],高通为
[-0.5 0.5])。如要正规化,分解与重构滤波器乘以
即可。
这里的三级非标准小波分解与重构采用八带分解方法,即每级对低频
部分分解,对每一级分解的高频部分不再进一步分解。
(二)、关于阈值测试
小波变换对图像压缩可以分为以下几个主要步骤:
1.利用离散小波变换将图像分解成为低频分量,高频的水平边缘分量,垂
直边缘分量和对角边缘分量。
2.对低频和高频的图像根据人类的视觉生理和心理特点作不同的量化和编
码处理,进行压缩。
3.利用小波逆变换还原出原来的图像。
其中量化工作有很多方式,这里采用阈值的设置,对采用不同小波变
换后得到的低频和高频图像设置不同阈值后得到的分解图像的含“0”数
目及重构产生的不同图像文件大小作分析,即为本次报告阈值测试的目的。
程序用 Matlab 中小波函数分解图像,设置阈值后再重构保存图像,比较不
同阈值设置的测试结果。
这里要做一些补充说明:因为并没有要求对分解图像作进一步的量化
及编码处理后压缩存放,而是重构后存放,所以并不能对不同小波的压缩
率好坏作出结论。只能根据测试结果及小波定义作一些概括性的分析。并
且由于 Matlab 中保存 PNG 格式的图像文件,与其他程序(如 photoshop 6.0)
保存的 PNG 文件有偏差,这里为保证对比的一致性,对真彩色图像先用
Matlab 对图像文件读入后保存,再作测试,保证原始图像与重构图像存放
条件的一致性。对索引图像,因为其读入图像矩阵数值并不是图像颜色值,
对其作测试后重构的图像,失真程度厉害,不具有实际意义,最终还是转
换为真彩色图像作比较,这里不作讨论。
二、源程序(程序注释中已含程序的使用方法)
(1).3 级非标准小波分解与重构程序
① 多级非标准 haar 小波分解程序
l
源程序:nstdhaardec2.m
② 多级非标准 haar 小波重构程序
l
源程序:nstdhaarrec2.m
③ 多级非标准小波分解程序
l
源程序:mydwt2.m
④ 多级非标准小波重构程序
l
源程序:myidwt2.m
(2).haar 小波 3 级非标准规格化分解和重构过程的演示程序
(使用自定义的 haar 函数,可自选图像文件,真彩色或索引色,但限于
像素为 2 倍数的对称图像)
源程序 1:nstdhaardemo.m
对不同图像格式的处理说明:
l
l
如输入的是彩色真彩图片,要做如下处理: 装载入
的图像数值矩阵 X 为三维矩阵,有 R、G、B 三个分
量的二维数值,须分别对每一维的数据都做分解与
重构,再转换为 uint8 数据类型显示其彩色图像。
如输入的是黑白图片,即输入的矩阵 X 为二维矩阵,
只对其作分解与重构即可。
(3).使用小波变换在不同阈值下压缩图像的测试程序
(使用 Matlab 函数,可自选图像文件(真彩色或索引图)、小波函数、
分解级数及阈值的增加值)
l
源程序:thresholdtestdemo.m
(4).不同小波在不同分解模式下 3 级分解与重构图像演示程序(课程设
计内容外补充)
l
源程序:modetest.m