📄 mydwt2.m
字号:
function mydwt2 %主程序用于测试图像,
I=imread('hao','bmp');
f=I(1:400,1:400,1);
f=double(f);
g=mydwt(3,f);%分解后图,3为层数,可以任意大小的整数
;%任意层数重构,这里用3层
r=imydwt(3,g);
t=f-r
f=uint8(f);
imshow(f);
figure%重构后图
g=uint8(g);
imshow(g);
figure
r=uint8(r);
imshow(r);
function B=mydwt(k,I) %分解子程序
%分解层数为k,采用纯二维小波分解,二维提升.可原址运算.
B=I;
[N,M]=size(I);
while k~=0
[L,J]=size(zeros(N/2,M/2));
T=ones(2,2);
for t=1:2:N-1
for tt=1:2:M-1
T=I(t:t+1,tt:tt+1);
T=1/4*T;
e=sum(T(:));
right=e-I(t,tt+1);
down=e-I(t+1,tt);
diag=e-I(t+1,tt+1);
B((t+1)/2,(tt+1)/2)=e;
B((t+1)/2,J+(tt+1)/2)=right;
B(L+(t+1)/2,(tt+1)/2)=down;
B(L+(t+1)/2,(tt+1)/2+J)=diag;
end
end
I=B;
k=k-1;
N=N/2;
M=M/2;
end
%重构为分解的反向运算
function B=imydwt(k,I) %重构子程序
B=I;
[N,M]=size(I);
N=N/2^(k-1);
M=M/2^(k-1);
while k~=0
[L,J]=size(zeros(N/2,M/2));
for i=1:2:N-1
for j=1:2:M-1
B(i,j+1)=I((i+1)/2,(j+1)/2)-I((i+1)/2,(j+1)/2+J);
B(i+1,j)=I((i+1)/2,(j+1)/2)-I(L+(i+1)/2,(j+1)/2);
B(i+1,j+1)=I((i+1)/2,(j+1)/2)-I(L+(i+1)/2,J+(j+1)/2);
B(i,j)=4*I((i+1)/2,(j+1)/2)-B(i,j+1)-B(i+1,j)-B(i+1,j+1);
end
end
I(1:N,1:M)=B(1:N,1:M);
k=k-1;
N=N*2;
M=M*2;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -