%-----------------------------5/3整数小波3级分解函数---------------------------------
function [S11,d11]=decompose53(imMat,dim,n)
% imMat 输入图像的数据变量
% dim 输入图像的维数
% n 表示第n次分解
% S11 表示分解的低频部分
% d11 表示分解的高频部分
% imMat=imread('cameraman.tif');
% dim=size(imMat,1);
% n=1;
imMat=imMat(1:dim/n,1:dim/n);
for m=1:dim/n
for i=1:2:dim/n-1
O1(m,((i+1)/2))=imMat(m,i);%得到第一级奇序列
end
end
for m=1:dim/n
for i=2:2:dim/n
E1(m,i/2)=imMat(m,i);%得到第一级偶序列
end
end
E1=[E1,zeros(dim/n,2)];%再加两列相等行数的零元素(对于行变换)
for m=1:dim/n
for i=1:dim/(n*2)
d1(m,i)=O1(m,i)-E1(m,i)/2-E1(m,i+1)/2;
end
end
d_1=[d1,zeros(dim/n,2)];%再加两列相等行数的零元素(行)
for m=1:dim/n
for i=1:dim/(2*n)
S1(m,i)=E1(m,i)+(d_1(m,i)+d_1(m,i+2)+2)/4;
end
end
L1=[S1,d1];
for m=1:dim/n
for i=1:2:dim/n-1
O11(((i+1)/2),m)=L1(i,m);%得到列变换的第一级奇序列
end
end
for m=1:dim/n
for i=2:2:dim/n
E11(i/2,m)=L1(i,m);%得到列变换的第一级偶序列
end
end
E11=[E11;zeros(2,dim/n)];%再加两行相等列数的零元素(列)
for m=1:dim/n
for i=1:dim/(2*n)
d11(i,m)=O11(i,m)-E11(i,m)/2-E11(i+1,m)/2;%各行差值数据;不对细节数据再做变换,只对S1再预测
end
end
d_11=[d11;zeros(2,dim/n)];%再加两行相等列数的零元素(列)
for m=1:dim/n
for i=1:dim/(2*n)
S11(i,m)=E11(i,m)+(d_11(i,m)+d_11(i+2,m)+2)/4;
end
end
% imshow(S11,[])
% imwrite(uint8(S11),'cameraman_1.bmp');