小波包基搜索算法。 程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10. 4编程实现有限长信号的小波包分解算法并选择一个信息代价函数,实现最佳小波包基搜索算法。
程序设计
实验的程序采用C语言编写,自己实现小波包的分解和重构,选用了Haar,D4等小波进行实验,分解算法采用递归的方法,沿树结构进行深度优先的分解,重构的时候也采用类似的方法。实验数据采用的是lena图像的第一行进行,长度为256。程序中可以选用几种代价函数进行最优基的选择(范数集中度,对数熵,信息熵)。程序读如lena图像的第一行后,并将这行数据存入文件in.dat,进行小波包分解,然后进行最优基的选取,在最优基下相应的系数存入文件out.dat。函数说明:
void readbmp(char * file,int n,double * c) //读入lena.bmp的第一行
void dwt(Node * root)//按深度优先进行完全小波包分解void idwt(Node * root)//进行小波包重构
double entroy(double a) //计算每个节点的代价
double total_entroy(Node *root) //寻找最优小波基
root) //输出最优小波基下的系数
*
void show(Node
实验结果与分析
读如的一行数据
横坐标为图像横坐标(0-255),纵坐标为像素点的灰度值(0-255).
以下个图是在利用相应的小波和相应的代价函数选择出的最佳小波基对应的小波分解系数
利用haar小波进行小波包分解
(1) 利用范数集中度为代价函数
横坐标表示256个小波分解系数,纵坐标表示每个小波分解系数的值
可见系数能量分布较均匀,说明代价函数不起作用
(2) 利用对数熵为代价函数
横坐标表示256个小波分解系数,纵坐标表示每个小波分解系数的值
可见能量集中在前10 个系数上,大多数系数的绝对值较小,可以认为,基的选择是合适的.
(3)利用信息熵为代价函数
横坐标表示256个小波分解系数,纵坐标表示每个小波分解系数的值
可见选择的最优基对应系数的能量不如对数熵的集中.
利用D4小波进行小波包分解
(1)利用范数集中度为代价函数
横坐标表示256个小波分解系数,纵坐标表示每个小波分解系数的值
与haar小波一样,效果很不好
(2)利用对数熵为代价函数
横坐标表示256个小波分解系数,纵坐标表示每个小波分解系数的值
]
能量分布集中,具有较好的效果,比用相同代价函数的haar小波具有更集中的能量.
(3)利用信息熵为代价函数
横坐标表示256个小波分解系数,纵坐标表示每个小波分解系数的值
效果不错,但是不如用对数熵时能量更集中,比用相同代价函数的haar小波具有更好的效果.
总结
小波包的分解和重构算法和前面所学的小波的分解和重构算法类似,最优基的选择是更加困难一点,通过实验发现,代价函数的选择对最优基的选择有很大影响,同时不同的小波在对最优基的选择也有影响,从实验中看出,用D4小波选出的最优基具有更好的性质,利用对数熵为代价函数比信息熵为代价函数选出的最优基更好.