例如:
![](https://i-blog.csdnimg.cn/blog_migrate/75c90fa1ba7c0d4de6dcbbad0c8062a0.png)
步骤:
1、构造函数DWT
% 程序作者:沙威,香港大学电气电子工程学系,wsha@eee.hku.hk% 构造正交小波变换矩阵,图像大小N*N,N=2^P,P是整数。
function ww=DWT(N)
[h,g]=wfilters('haar','d'); % 分解低通和高通滤波器
[h,g]=wfilters('haar','d'); % 分解低通和高通滤波器
% N=256; % 矩阵维数(大小为2的整数幂次)
L=length(h); % 滤波器长度
rank_max=log2(N); % 最大层数
rank_min=double(int8(log2(L)))+1+3; % 最小层数
ww=1; % 预处理矩阵
L=length(h); % 滤波器长度
rank_max=log2(N); % 最大层数
rank_min=double(int8(log2(L)))+1+3; % 最小层数
ww=1; % 预处理矩阵
% 矩阵构造
for jj=rank_min:rank_max
nn=2^jj;
% 构造向量
p1_0=sparse([h,zeros(1,nn-L)]);
p2_0=sparse([g,zeros(1,nn-L)]);
% 向量圆周移位
for ii=1:nn/2
p1(ii,:)=circshift(p1_0',2*(ii-1))';
p2(ii,:)=circshift(p2_0',2*(ii-1))';
end
% 构造正交矩阵
w1=[p1;p2];
mm=2^rank_max-length(w1);
w=sparse([w1,zeros(length(w1),mm);zeros(mm,length(w1)),eye(mm,mm)]);
ww=ww*w;
clear p1;clear p2;
end
for jj=rank_min:rank_max
nn=2^jj;
% 构造向量
p1_0=sparse([h,zeros(1,nn-L)]);
p2_0=sparse([g,zeros(1,nn-L)]);
% 向量圆周移位
for ii=1:nn/2
p1(ii,:)=circshift(p1_0',2*(ii-1))';
p2(ii,:)=circshift(p2_0',2*(ii-1))';
end
% 构造正交矩阵
w1=[p1;p2];
mm=2^rank_max-length(w1);
w=sparse([w1,zeros(length(w1),mm);zeros(mm,length(w1)),eye(mm,mm)]);
ww=ww*w;
clear p1;clear p2;
end
2、构造函数
DWT5
% 构造正交小波变换矩阵,图像大小N*N,N=2^P,P是整数。
function ww5=DWT5(N)
[h,g]=wfilters('haar','d'); % 分解低通和高通滤波器
function ww5=DWT5(N)
[h,g]=wfilters('haar','d'); % 分解低通和高通滤波器
% N=256; % 矩阵维数(大小为2的整数幂次)
L=length(h); % 滤波器长度
rank_max=log2(N); % 最大层数
rank_min=double(int8(log2(L)))+1+2; % 最小层数
ww5=1; % 预处理矩阵
L=length(h); % 滤波器长度
rank_max=log2(N); % 最大层数
rank_min=double(int8(log2(L)))+1+2; % 最小层数
ww5=1; % 预处理矩阵
% 矩阵构造
for jj=rank_min:rank_max
nn=2^jj;
% 构造向量
p1_0=sparse([h,zeros(1,nn-L)]);
p2_0=sparse([g,zeros(1,nn-L)]);
% 向量圆周移位
for ii=1:nn/2
p1(ii,:)=circshift(p1_0',2*(ii-1))';
p2(ii,:)=circshift(p2_0',2*(ii-1))';
end
% 构造正交矩阵
w1=[p1;p2];
mm=2^rank_max-length(w1);
w=sparse([w1,zeros(length(w1),mm);zeros(mm,length(w1)),eye(mm,mm)]);
ww5=ww5*w;
clear p1;clear p2;
end
for jj=rank_min:rank_max
nn=2^jj;
% 构造向量
p1_0=sparse([h,zeros(1,nn-L)]);
p2_0=sparse([g,zeros(1,nn-L)]);
% 向量圆周移位
for ii=1:nn/2
p1(ii,:)=circshift(p1_0',2*(ii-1))';
p2(ii,:)=circshift(p2_0',2*(ii-1))';
end
% 构造正交矩阵
w1=[p1;p2];
mm=2^rank_max-length(w1);
w=sparse([w1,zeros(length(w1),mm);zeros(mm,length(w1)),eye(mm,mm)]);
ww5=ww5*w;
clear p1;clear p2;
end
3、构建主程序xiao_bo_zhuanhuan
clear all;
A=imread('haar.bmp');
A=im2double(A);
C=A;
[m,n]=size(A);
[h,g]= wfilters('haar','d');
ww=DWT(m);
ww5=DWT5(m);
%四阶变换
A=ww*A';
B=A';
B1=B;
B=ww*B;
%五阶变换
C=ww5*C';
D=C';
D1=D;
D=ww5*D;
figure(1);
imshow(B1);
title('四次 列变换结果');
figure(2);
imshow(B);
title('第四次变换结果');
figure(3);
imshow(D1);
title('五次 列变换结果');
figure(4);
imshow(D);
title('第五次变换结果');
A=imread('haar.bmp');
A=im2double(A);
C=A;
[m,n]=size(A);
[h,g]= wfilters('haar','d');
ww=DWT(m);
ww5=DWT5(m);
%四阶变换
A=ww*A';
B=A';
B1=B;
B=ww*B;
%五阶变换
C=ww5*C';
D=C';
D1=D;
D=ww5*D;
figure(1);
imshow(B1);
title('四次 列变换结果');
figure(2);
imshow(B);
title('第四次变换结果');
figure(3);
imshow(D1);
title('五次 列变换结果');
figure(4);
imshow(D);
title('第五次变换结果');
结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/99f27e11cf12ca6d93872ee0d4b0b721.png)
备注:函数DWT和DWT5中,红色标注的语句为图形变换的关键点,可以调整图形变换的次数。