% 此程式實作多小波分解2-D圖像
% Implementation.m
clc;clear
% 對稱反對稱多小波濾波器組(P0,P1,P2,P3;Q0,Q1,Q2,Q3.)
P0= [0.4075 0.0415
0.0415 0.4075]/sqrt(2);
P1=[0.0925 0.9075
0.9075 0.0925]/sqrt(2);
S=[1 0;0 -1];
A=[0 1;1 0];
P2=S*P1*S;
P3=S*P0*S;
Q0=(-1)*P3*A;
Q1=(+1)*P2*A;
Q2=(-1)*P1*A;
Q3=(+1)*P0*A;
% 下載下傳測試圖像
load wbarb;
D=1;
NN=length(X); % 圖像大小
T=1; % 分解層數
% 構造多小波變換矩陣
for i=1:T
% 每一層的有效矩陣長度
N=NN/(2^(i-1));
% L(低通矩陣);
A1=[P0,P1,P2,P3,zeros(2,N-4*2)];
C1=A1;
B1=A1;
for i=1:N/4-1
B1=circshift(B1.',4).';
C1=[C1;B1];
end;
% H(高通矩陣);
A2=[Q0,Q1,Q2,Q3,zeros(2,N-4*2)];
C2=A2;
B2=A2;
for i=1:N/4-1
B2=circshift(B2.',4).';
C2=[C2;B2];
end;
% Combine(低通和高通矩陣合并)
C=[C1;C2];
% 最終矩陣生成(多層)
D=D*sparse([eye(NN-N,NN-N),zeros(NN-N,N);zeros(N,NN-N),C].');
end;
% 多小波正變換
woman1=D'*X*D;
% 多小波正變換
woman2=D*woman1*D';
% 顯示
figure(1);
image(woman1)
colormap(map)
title('分解')
figure(2);
image(woman2)
colormap(map)
title('重構')
% 正交性驗證
norm(eye(NN,NN)-D'*D)