注意!程序有新的修正了,详细请见如下文章:
%----------------------------------------------------------%
小波分解重构 V2.0 版程序存在的问题分析
小波图像分解 Matlab 程序 - V3.0版
小波图像重构 Matlab 程序 - V3.0版
%----------------------------------------------------------%
本文给出了小波图像分解程序的修正代码,并对一些细节问题进行了图示讨论。
修正前的小波图像分解与重构程序,请看如下文章:
相关的文章有:
1、自己动手编写小波信号分解与重构的Matlab程序
http://blog.csdn.net/chenyusiyuan/archive/2007/11/13/1881781.aspx
2、用自编的程序实现小波图像分解与重构
http://blog.csdn.net/chenyusiyuan/archive/2007/11/13/1881940.aspx
下面是针对上述文章中存在的问题而修改的小波图像分解程序。
function coef=mywavedec2(x,N,wname)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
函数
MYWAVEDEC2()
对输入矩阵
x
进行
dim
层分解,得到相应的分解系数矩阵
y
%
输入参数:
x ——
输入矩阵
% N ——
分解级数
% wname ——
分解所用的小波函数
%
输出参数:
coef ——
分解系数矩阵,其结构如下:
% coef = {cA_N;cV_N;cH_N;cD_N;cV_N-1;cH_N-1;cD_N-1;……;cV_1;cH_1;cD_1}
% Copyright by Zou Yuhua ( chenyusiyuan ), original : 2007-11-10, modified: 2008-06-04
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
求出小波函数的滤波器组系数向量
[Lo_D,Hi_D] = wfilters(wname,'d');
%
画出原始图像
imshow(x);title('Original Image');
%
标明图像大小
[r,c]=size(x);
xlabel(['Size : ',num2str(r),'*',num2str(c)]);
%
将矩阵
x
的数据格式转换为适合数值处理的
double
格式
xd=double(x);
coef=[];
for i=1:N
[cA,cV,cH,cD]=mydwt2(xd,Lo_D,Hi_D);
%
第
i
级小波分解
xd=cA;
%
将第
i
级分解得到的低频系数矩阵作为第
i+1
级分解的源矩阵
outmp={cV;cH;cD};
%
将第
i
级分解得到的高频系数矩阵
cV,cH,cD
存入细胞矩阵
outmp
%
注意细胞矩阵的赋值是用大括号
“{}”
的,而普通矩阵赋