?? sw222.m
字號:
function wadec2()
X=imread('E:\matlab1\LENAcaise128.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);
[LL12,LH12,HL12,HH12]=swt2(LL1,1,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;
[cbLL12]=LBG(LL12,nc,nd,th); %LBG.m在L3.3節中
%利用一層小波變換加上向量量化進行Lena圖像壓縮%
%輸入一幅Lena圖像%
X=imread('E:\matlab1\LENAcaise128.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);
[LL12,LH12,HL12,HH12]=swt2(LL1,1,Wavelet_Name);
%分別針對不同的頻帶進行向量量化,其中VQ.m置于L3.4節中%
[R_LL12,bitLL12]=VQ(LL12,cbLL12);
%計算圖像經過向量量化后的壓縮率CR及失真PSNR%
totalbit=bitLL12 %花費的總位數 28672
%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);
Y12=iswt2(R_LL12,HL12 ,LH12, HH12,'db1');
Y1=iswt2(Y12,HL1 ,LH1, HH1,'db1');
Wavelet_Name='db1';
Wavelet_Scale=1;
[LL2,LH2,HL2,HH2]=swt2(double(X(:,:,2)),Wavelet_Scale,Wavelet_Name);
[LL22,LH22,HL22,HH22]=swt2(double(X(:,:,2)),2,Wavelet_Name);
%appcoef2用來提取二維信號小波分解的近似分量
%訓練LL1頻帶碼本,將碼本大小設為128,維度為4 %
th=0.05;
nc=128;nd=4;
[cbLL22]=LBG(LL22,nc,nd,th); %LBG.m在L3.3節中
%輸入一幅Lena圖像%
X=imread('E:\matlab1\LENAcaise128.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);
[LL22,LH22,HL22,HH22]=swt2(LL2,1,Wavelet_Name);
%分別針對不同的頻帶進行向量量化,其中VQ.m置于L3.4節中%
[R_LL22,bitLL22]=VQ(LL22,cbLL22);
%計算圖像經過向量量化后的壓縮率CR及失真PSNR%
totalbit2=bitLL22 %花費的總位數 57344
%Y=idwtper2(R_LL1,R_LH1,R_HL1,R_HH1,'bior3.3'); %反小波變換
Y22=iswt2(R_LL22,HL22 ,LH22, HH22,'db1');
Y2=iswt2(Y22,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);
[LL32,LH32,HL32,HH32]=swt2(LL3,1,Wavelet_Name);
%appcoef2用來提取二維信號小波分解的近似分量
%訓練LL1頻帶碼本,將碼本大小設為128,維度為4 %
th=0.05;
nc=128;nd=4;
[cbLL32]=LBG(LL32,nc,nd,th); %LBG.m在L3.3節中
X=imread('E:\matlab1\LENAcaise128.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);
[LL32,LH32,HL32,HH32]=swt2(LL3,1,Wavelet_Name);
%分別針對不同的頻帶進行向量量化,其中VQ.m置于L3.4節中%
[R_LL32,bitLL32]=VQ(LL32,cbLL32);
%計算圖像經過向量量化后的壓縮率CR及失真PSNR%
totalbit3=bitLL32 %花費的總位數
%Y=idwtper2(R_LL1,R_LH1,R_HL1,R_HH1,'bior3.3'); %反小波變換
Y32=iswt2(R_LL32,HL32 ,LH32, HH32,'db1');
Y3=iswt2(Y32,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/totalbit2
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 + -