没有合适的资源?快使用搜索试试~ 我知道了~
使用MATLAB设计小波变换程序中的若干问题.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 106 浏览量
2022-07-05
03:05:51
上传
评论
收藏 300KB DOC 举报
温馨提示
![preview](https://dl-preview.csdnimg.cn/85902663/0001-d7ffbfb936366144497a14b301486a2b_thumbnail.jpeg)
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
试读
12页
使用MATLAB设计小波变换程序中的若干问题
资源推荐
资源详情
资源评论
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/release/download_crawler_static/85902663/bg1.jpg)
1
使用 MATLAB 设计小波变换程序中的若干问题
在使用 MATLAB 完成小波变换程序和通过阈值来压缩图像的过程中,我和许多同学都是边学边用,是从一个接一个的问题
中逐步理解小波和 MATLAB 编写程序的。因此我愿意就个人遇到和解决问题的经验与大家讨论,希望能够对遇到同样问题的人
有所帮助。在清华大学林福宗老师倡导的网上互动的学习方式中,老师同学的开诚布公的讨论,尤其是林老师启发大家对出现‘问
题’采取的态度和做法,对我今后成长为一名合格的清华的研究生意义重大,谨以此文表示对他指导关心的敬意!
1. 内容简介
本文分为三部分: 如何使用 MATLAB 设计小波标准与标准分解;如何完成使用小波变换压缩图像;仍需探讨的问题。每一
部分主要以问题和例子的形式讲述,为了便于参照,附录部分给出部分源代码供大家参考指正。
我个人在完成作业的时候,走了许多弯路,最后,反复读老师的第 3 章讲义的第 3--5 节,明白了小波变换的一些非常基础性
的知识,正是如此,我主要是按照第三章的例子,做出使用 MATLAB 进行 Haar 变换的实例,这至少对完成非标准 Haar 小波的
3 级分解与合成没有任何问题,而且计算速度远远比使用一维变换快,甚至超过 dwt2 和 wavedec2。再者,是通过这些简短的例
子的学习,也能从实践的角度理解小波变换的基础知识和道理,我觉得掌握小波的知识要比简单使用 dwt2 直接分析出结果更重
要。为了让使用一维变换或打算采用卷积完成分解重构程序的同学有所参考,也给出了我以前写的代码和设想供有兴趣者参考。
在图像压缩的任务中,我个人建议采用 wdencmp,原因是简单可靠,能够生成老师要求小波压缩与重构的演示及 PNG 文件。在
最后部分着重对使用小波压缩之后重构图像的 PNG 文件会变大问题进行了简单的猜测性的解释和讨论,希望感兴趣的同学能深
入研究。
2. 如何使用 MATLAB 设计小波标准与标准分解
1. 使用 Haar 和 Db9 小波编写图像文件的标准和非标准分解重构程序
实质上,任务书中规定首先要编写4种程序之一:哈尔(haar)小波的标准分解重构程序;Daubechies 9 小波的标准分解重
构程序;哈尔(haar)小波的非标准分解重构程序;Daubechies 9 小波的非标准分解重构程序。如果采用标准方法,需要生成图
3-25的系列图像。如果采用非标准方法则需要生成图3-26的系列图像。
我个人编写了非标准的分解重构程序,并总结网上同学们公开的方法,认为可以有3种方法实现。但前提是必须仔细阅读林
老师推荐的补充教材第三章“小波与小波变换”的 3.3、3.4 和 3.5 节(14-27页)。如果能使用 MATLAB 简单地实践一下教
材的例子,至少完成哈尔小波的标准与非标准程序相当简单。为此我主要介绍如何实现老师教材给我们的例子是如何在
MATLAB 中实现的。然后,再引申到使用 MATLAB 的函数实现方法。为了描述问题简便,使用黑体表示需在 MATLAB 的命
令窗口(command window)的输入部分。如果不熟悉下面出现的函数功能和使用方法,请再命令窗口中使用 help 函数名,如
help dwt2,能够得到英文的功能和用法说明。
2. 哈尔小波变换的 MATLAB 实例
先介绍 MATLAB 的矩阵(Matrix)和向量(Vector)的赋值方法:在 command window 的>>符号下输入:
一维向量: I = [ 9 7 3 5]
F = [2, 5, 8, 9, 7, 4, -1, 1]
二维矩阵: A = [
64 2 3 61 60 6 7 57
9 55 54 12 13 51 50 16
17 47 46 20 21 43 42 24
40 26 27 37 36 30 31 33
32 34 35 29 28 38 39 25
41 23 22 44 45 19 18 48
49 15 14 52 53 11 10 56
8 58 59 5 4 62 63 1
]
I和F现在就是[例 3.1][例 3.2]一维向量, A 就是
3.5.1 中的图像矩阵。在进行 Haar 小波的一维与二维变换(分
解)之前,首先介绍一下 MATLAB 的矩阵运算。
MATLAB 是 Matrix Laboratory 的合写,它对矩阵运算之
功能堪称一流。由于使用矩阵描述问题更象数学表达式,所
以编写的程序不仅高效,更易读。所以 MATLAB 程序应该尽
量使用矩阵直接描述。 如 M 是一 4X4 的矩阵,则 B=I*M
就完成了使用两个 for 循环编写乘法的程序。
分析老师的[例 3.1],那么可以得到如下结果:
[(9+7)*1/2 (3+5)* 1/2 (9-7)*1/2 (3-5)* 1/2]
如果把其看作矩阵方式的乘法,那么令 M 为其表述求取平均
和差值的系数矩阵,则输入:
M = [
1/2 0 1/2 0
![](https://csdnimg.cn/release/download_crawler_static/85902663/bg2.jpg)
2
1/2 0 -1/2 0
0 1/2 0 1/2
0 1/2 0 -1/2
]
把上述的 M 输入到 MATLAB 中,然后使用:
C=I*M
得到的结果就是 [ 8 4 1 -1]。这就是非规范化 Haar 小波的第
一级分解系数。注意 C 的前两项[ 8 4 ] 就是近似系数
(Approximation Coefficients), 后两项[1 _1]就是细节系数
(Detail Coefficients). M 就是 Haar 小波的非规范化
(non-normalization)系数矩阵。如果我们执行 :
M*M_
(M_代表的是 M 的转置矩阵),你会发现得到对角线为 0.5 其
它为 0 的 4X4 矩阵,所以如果让它变成单位矩阵(对角线为
1),必须把原来的 1/2 增大,变为 1/sqrt(2), 所以执行:
N=M*sqrt(2)
后得到新的系数矩阵
[ 0.7071 0 0.7071 0
0.7071 0 -0.7071 0
0 0.7071 0 0.7071
0 0.7071 0 -0.7071
]
再执行
N * N_
就会得到单位矩阵。N 就是 Haar 小波的规范化(normalization)
系数矩阵。现在执行:
C*M_
将得到 [4.5 3.5 1.5 2.5],显然是因为 M*M_的对角矩阵的值
为 0.5。现在使用
Cn=I*N
得到 [11.3137 5.6569 1.4142 -1.4142 ] 规范化的一维 Haar 小
波一级分解系数。
I1=Cn*N_
得到 [9 3 7 7] 规范化的一维 Haar 小波逆变换(重构)结果。
可见得到这样规范化矩阵的好处是为了逆变换时不需要额外
的运算,只是需要分解系数矩阵乘以规范化系数矩阵的转置。
。
如果需要对分解系数矩阵进行第 2 级分解,那么此时只对 C
或 Cn 的前 2 项的低频系数进行,此时的 Haar 的非规范化与
规范化系数矩阵 M1 和 N1 分别为:
M1=[
1/2 1/2
1/2 �1/2
]
N1=[
1/2 1/2
1/2 �1/2
]
那么第 2 级分解可以用以下方式进行:
C1=C(1:2)*M1
Cn1=Cn(1:2)*N1
结果是 C1=[6 2 ], Cn1= [12.0 4.0]。注意, C1(1:2)表示取出
C 中第1到第2个向量,符号“:”的含义是从1到2的意思,
这是 MATLAB 截取数据的方法。逆变换:
[C1*M1’*2 C(3:4)]*M’*2
[Cn1*N1’ Cn(3:4)]*N’
这里采用了中括号[]的赋值方式直接将第2级的重构合并到第1级的系数中再重构原始向量 I。
从上面的实验可以看出,除了输入哈尔小波系数矩阵 M 和 N 比较麻烦,整个变换和重构过程异常简单,这就启示我们只要编
写一个 Haar 系数生成矩阵的函数,整个的分解问题即将化简。
1. 问题 1:如何生成 Haar 小波系数矩阵?
MATLAB 的函数可以如以下形势构造:在 MATLAB 中使用 File? New? M-file,输入
function [M]= haarmatrix (rows,cols, flag)
%矩阵的行数 rows, 列数 cols, 非规范化 flag=0否则就是规范
化矩阵
% M 为函数返回的 Haar 系数矩阵
M=zeros(rows,cols); %首先制作 rows X cols 的
0矩阵
if flag== 0
sv=0.5; %non-normalized
else
sv=1.0/sqrt(2.0); % normalized
end
half=rows/(2); %矩阵从中间分开,左半部为近似系数部分,
右半部为细节系数部分
for i= 1:2:half*2
M(i,ceil(i/2)) =sv;
M(i+1,ceil(i/2))=sv;
M(i,ceil(i/2)+half) =sv;
M(i+1,ceil(i/2)+half)=-sv;
![](https://csdnimg.cn/release/download_crawler_static/85902663/bg3.jpg)
3
end
M=sparse(M) %生成稀疏矩阵,提高运算速度
注意分号的作用是不在 command 窗口上显示 M 的值。在输
入后,请保存与函数名同名的文件名 haarmatrix.m。现在来做
[例 3.2]:
F = [2, 5, 8, 9, 7, 4, -1, 1]
N= haarmatrix(8,8,1)
C1=F*N
N1= haarmatrix(4,4,1)
C2= C1(1:4)*N1
N2= haarmatrix(2,2,1)
C3= C2(1:2)*N2
按图 3-21 小波分解的层次结构合成最终系数
C=[C3, C2(3:4), C1(5:8)]
得到的 C 就是老师让我们使用第三章 17 页伪代码编写的一
维小波变换分解的结果。其逆变换(重构)代码如下:
Fr=[ [C3*N2' ,C2(3:4)]*N1' ,C1(5:8) ]* N'
注意理解最内部的中扩号实质上是使用 C3 逆变换的结果(低
频) 与 C2 的后2位细节系数一起逆变换得倒 C1 的前4位
的低频近似系数,然后与 C1 的后4位细节系数构造出原始向
量 Fr。
为了验证我们的一维 Haar 变换程序,我们使用 MATLAB 提
供的一维离散小波变换函数 dwt 来进行同样的计算:
第一级分解
[ca1, cd1]=dwt(F, ' haar' )
第2级分解
[ca2,cd2]=dwt(ca1, ' haar' )
第3级分解
[ca3,cd3]=dwt(ca2, ' haar' )
按图 3-21 小波分解的层次结构合成最终系数
c=[ca3 cd3 cd2 cd1]
或直接使用 MATLAB 提供的1维多级分解程序
c=wavedec(F,3,'haar')
比较 c 与 C (注意 MATLAB 中大小写变量的区别),可知我们成功构造了 Haar 小波分解合成程序。也许这是你可能觉得刚
才的系数矩阵比起 MATLAB 提供的函数来说还是复杂了,但如果把上述过程函数化,做一个 matrixDWT 和 matrixIDWT 函数,
使用一样简单,而且关键在于,我们使用矩阵方式解决2维图像的小波非标准变换的演示过程来说会带来更大便利。
2. 问题 2 如何进行图像的 1 级非标准分解和重构?
如果我们利用 2.2 节开始时已经输入的 18 页的图像矩阵 A,那么它的第一级二维变换的非标准分解过程只需3步:(为了方
便核对 MATLAB 的 dwt2 分解结果,使用规范化系数矩阵)
M1=haarmatrix(8,8,1) ;
AR1=A*M1; %这就是进逐行分解的图像
AC1=M1'*AR1; %这就是进逐列分解的图像,也是一次2维变换的系数矩阵
使用 MATLAB 的 dwt2 来验证
[ca ch cv cd]=dwt2(A,'haar')
c=[ca cv ; ch cd] %将4个系数合并在一起,注意 cv 与 ch 的位置与第四章图 4-04 区别。
对比 ca3, ch3,cv3, cd3 与 AC3,可知矩阵算法正确。细心的同学也许能发现我们的矩阵位置和第4章图4-04(a)本文图 1 解
释的不同,这是因为 dwt2 采用的算法与我们不同,但这并不影响小波分解系数的使用。详细解释见附录 1。
图 1、多级分解的各个系数矩阵
剩余11页未读,继续阅读
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
omyligaga
- 粉丝: 55
- 资源: 2万+
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- 冬天就快来了,n 只鼠鼠偷了一大堆奶酪放到老鼠洞里,约定第二天平分 这些鼠鼠很崇拜鼠王杰瑞,所以都想给它留一些奶酪 可没过一会
- meidaj安装包11111111
- 游戏-Java-扫雷小游戏
- 二分查找教程.docx
- 2023-04-06-项目笔记 - 第一百七十阶段 - 4.4.2.168全局变量的作用域-168 -2024.06.20
- Vl171 demo.zip
- 毕设项目:城市公交查询系统的设计与实现(ASP.NET+源代码+论文)
- 有关各种常用语言的框架用法
- 一个简单的协同过滤推荐系统的Python示例,使用了一个假设的电影-用户评分矩阵
- 编程项目实战:基于asp.net架构的美容院管理系统(含论文+需求分析+开题报告+源代码)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)