📄 sw22.m
字号:
function wadec2()
X=imread('E:\matlab1\LENAcaise256.bmp','bmp');
figure(100);imshow(uint8(X));title('original image');
Wavelet_Name='db1';
Wavelet_Scale=1;
[LL1,LH1,HL1,HH1]=swt2(double(X(:,:,1)),Wavelet_Scale,Wavelet_Name);
%[C,S]=wavedec2(double(X(:,:,1)),Wavelet_Scale,Wavelet_Name);
%appcoef2用来提取二维信号小波分解的近似分量
%LL1=appcoef2(C,S,Wavelet_Name,Wavelet_Scale);
%detcoef2用来提取二维信号小波分解的细节分量
%D=detcoef2(O,C,S,N),O指定细节分量的类型,
%当O=‘h’时,重构水平细节分量,当O=‘v’时,重构垂直细节分量,当O=‘d’时,重构细节细节分量
%LH1=detcoef2('v',C,S,1);
%HL1=detcoef2('h',C,S,1);
%HH1=detcoef2('d',C,S,1);
%训练LL1频带码本,将码本大小设为128,维度为4 %
th=0.05;
nc=128;nd=4;
[cbLL1]=LBG(LL1,nc,nd,th); %LBG.m在L3.3节中
%输入一幅Lena图像%
X=imread('E:\matlab1\LENAcaise256.bmp','bmp');
%load lena
[M,N]=size(X(:,:,1));
%使用Matlab中Wavelet工具箱的周期性小波变换函数dwtper2.m%
%并使用双正交小波bior3.3进行一层小波变换%
%[LL1,LH1,HL1,HH1]=dwtper2(X,'bior3.3');
Wavelet_Name='db1';
Wavelet_Scale=1;
[LL1,LH1,HL1,HH1]=swt2(double(X(:,:,1)),Wavelet_Scale,Wavelet_Name);
%分别针对不同的频带进行向量量化,其中VQ.m置于L3.4节中%
[R_LL1,bitLL1]=VQ(LL1,cbLL1);
u=mean2(LH1)
sum1=0;
[m,n]=size(LH1);
for i=1:1:m
for j=1:1:n
if LH1(i,j)<u
LH1(i,j)=0;
sum1=sum1+1;
end
end
end
sum1
u=mean2(HL1)
sum11=0;
[m,n]=size(HL1);
for i=1:1:m
for j=1:1:n
if HL1(i,j)<u
HL1(i,j)=0;
sum11=sum11+1;
end
end
end
sum11
u=mean2(HH1)
sum111=0;
[m,n]=size(HH1);
for i=1:1:m
for j=1:1:n
if HH1(i,j)<u
HH1(i,j)=0;
sum111=sum111+1;
end
end
end
sum111
%计算图像经过向量量化后的压缩率CR及失真PSNR%
totalbit=bitLL1 %花费的总位数
%Y=idwtper2(R_LL1,R_LH1,R_HL1,R_HH1,'bior3.3'); %反小波变换
%C1= [R_LL1 R_HL1 R_LH1 R_HH1];
%S1=S;
%Y1=waverec2(C1,S1,Wavelet_Name);
Y1=iswt2(R_LL1,HL1 ,LH1, HH1,'db1');
X(:,:,1)=Y1;
Wavelet_Name='db1';
Wavelet_Scale=1;
[LL2,LH2,HL2,HH2]=swt2(double(X(:,:,2)),Wavelet_Scale,Wavelet_Name);
%appcoef2用来提取二维信号小波分解的近似分量
%训练LL1频带码本,将码本大小设为128,维度为4 %
th=0.05;
nc=128;nd=4;
[cbLL2]=LBG(LL2,nc,nd,th); %LBG.m在L3.3节中
%输入一幅Lena图像%
X=imread('E:\matlab1\LENAcaise256.bmp','bmp');
%load lena
[M2,N2]=size(X(:,:,2));
%使用Matlab中Wavelet工具箱的周期性小波变换函数dwtper2.m%
%并使用双正交小波bior3.3进行一层小波变换%
%[LL1,LH1,HL1,HH1]=dwtper2(X,'bior3.3');
Wavelet_Name='db1';
Wavelet_Scale=1;
[LL2,LH2,HL2,HH2]=swt2(double(X(:,:,2)),Wavelet_Scale,Wavelet_Name);
%分别针对不同的频带进行向量量化,其中VQ.m置于L3.4节中%
[R_LL2,bitLL2]=VQ(LL2,cbLL2);
u=mean2(LH2)
sum2=0;
[m,n]=size(LH2);
for i=1:1:m
for j=1:1:n
if LH2(i,j)<u
LH2(i,j)=0;
sum2=sum2+1;
end
end
end
sum2
u=mean2(HL2)
sum22=0;
[m,n]=size(HL2);
for i=1:1:m
for j=1:1:n
if HL2(i,j)<u
HL2(i,j)=0;
sum22=sum22+1;
end
end
end
sum22
u=mean2(HH1)
sum222=0;
[m,n]=size(HH1);
for i=1:1:m
for j=1:1:n
if HH1(i,j)<u
HH1(i,j)=0;
sum222=sum222+1;
end
end
end
sum222
%计算图像经过向量量化后的压缩率CR及失真PSNR%
totalbit2=bitLL2 %花费的总位数
%Y=idwtper2(R_LL1,R_LH1,R_HL1,R_HH1,'bior3.3'); %反小波变换
Y2=iswt2(R_LL2,HL2 ,LH2, HH2,'db1');
X(:,:,2)=Y2;
Wavelet_Name='db1';
Wavelet_Scale=1;
[LL3,LH3,HL3,HH3]=swt2(double(X(:,:,3)),Wavelet_Scale,Wavelet_Name);
%appcoef2用来提取二维信号小波分解的近似分量
%训练LL1频带码本,将码本大小设为128,维度为4 %
th=0.05;
nc=128;nd=4;
[cbLL3]=LBG(LL3,nc,nd,th); %LBG.m在L3.3节中
%输入一幅Lena图像%
X=imread('E:\matlab1\LENAcaise256.bmp','bmp');
%load lena
[M3,N3]=size(X(:,:,3));
%使用Matlab中Wavelet工具箱的周期性小波变换函数dwtper2.m%
%并使用双正交小波bior3.3进行一层小波变换%
%[LL1,LH1,HL1,HH1]=dwtper2(X,'bior3.3');
Wavelet_Name='db1';
Wavelet_Scale=1;
[LL3,LH3,HL3,HH3]=swt2(double(X(:,:,3)),Wavelet_Scale,Wavelet_Name);
%分别针对不同的频带进行向量量化,其中VQ.m置于L3.4节中%
[R_LL3,bitLL3]=VQ(LL3,cbLL3);
u=mean2(LH3)
sum3=0;
[m,n]=size(LH3);
for i=1:1:m
for j=1:1:n
if LH3(i,j)<u
LH3(i,j)=0;
sum3=sum3+1;
end
end
end
sum3
u=mean2(HL3)
sum33=0;
[m,n]=size(HL3);
for i=1:1:m
for j=1:1:n
if HL3(i,j)<u
HL3(i,j)=0;
sum33=sum33+1;
end
end
end
sum33
u=mean2(HH3)
sum333=0;
[m,n]=size(HH3);
for i=1:1:m
for j=1:1:n
if HH3(i,j)<u
HH3(i,j)=0;
sum333=sum333+1;
end
end
end
sum333
%计算图像经过向量量化后的压缩率CR及失真PSNR%
totalbit3=bitLL3 %花费的总位数
%Y=idwtper2(R_LL1,R_LH1,R_HL1,R_HH1,'bior3.3'); %反小波变换
Y3=iswt2(R_LL3,HL3 ,LH3, HH3,'db1');
X(:,:,3)=Y3;
RG1=cat(3,Y1,Y2,Y3);
MSE=(sum(sum((double(X(:,:,3))-double(RG1(:,:,3))).^2)))/(M*N)
PSNR=20*log10(255/sqrt(MSE))
CR2=M3*N3*8/totalbit3
%figure(200);imshow(uint8(X));title('compressed image');
figure(300);imshow(uint8(RG1));title('compressed555 image');
%[LL1,LH1,HL1,HH1]=swt2(X,Wavelet_Scale,Wavelet_Name);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -