?? wadec22.m
字號:
function wadec22()
X=imread('E:\matlab1\LENAcaise256.bmp','bmp');
figure(100);imshow(uint8(X));title('original image');
Wavelet_Name='db1';
Wavelet_Scale=1;
[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節中
%訓練LH1頻帶碼本,將碼本大小設為64,維度為4 %
nc=64;nd=4;
[cbLH1]=LBG(LH1,nc,nd,th);
%訓練HL1頻帶碼本,將碼本大小設為64,維度為4 %
nc=64;nd=4;
[cbHL1]=LBG(HL1,nc,nd,th);
%訓練HH1頻帶碼本,將碼本大小設為64,維度為16 %
nc=64;nd=16;
[cbHH1]=LBG(HH1,nc,nd,th);
%利用一層小波變換加上向量量化進行Lena圖像壓縮%
%輸入一幅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');
[C,S]=wavedec2(double(X(:,:,1)),Wavelet_Scale,Wavelet_Name);
LL1=appcoef2(C,S,Wavelet_Name,Wavelet_Scale);
LH1=detcoef2('v',C,S,1);
HL1=detcoef2('h',C,S,1);
HH1=detcoef2('d',C,S,1);
wt_X(1:M/2,1:N/2)=LL1;
wt_X(1:M/2,N/2+1:N)=LH1;
wt_X(M/2+1:M,1:N/2)=HL1;
wt_X(M/2+1:M,N/2+1:N)=HH1;
%分別針對不同的頻帶進行向量量化,其中VQ.m置于L3.4節中%
[R_LL1,bitLL1]=VQ(LL1,cbLL1);
[R_LH1,bitLH1]=VQ(LH1,cbLH1);
[R_HL1,bitHL1]=VQ(HL1,cbHL1);
[R_HH1,bitHH1]=VQ(HH1,cbHH1);
wt_Y(1:M/2,1:N/2)=R_LL1;
wt_Y(1:M/2,N/2+1:N)=R_LH1;
wt_Y(M/2+1:M,1:N/2)=R_HL1;
wt_Y(M/2+1:M,N/2+1:N)=R_HH1;
%計算圖像經過向量量化后的壓縮率CR及失真PSNR%
totalbit=bitLL1+bitLH1+bitHL1+bitHH1 %花費的總位數
%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);
X(:,:,1)=Y1;
Wavelet_Name='db1';
Wavelet_Scale=1;
[C,S]=wavedec2(double(X(:,:,2)),Wavelet_Scale,Wavelet_Name);
%appcoef2用來提取二維信號小波分解的近似分量
LL2=appcoef2(C,S,Wavelet_Name,Wavelet_Scale);
%detcoef2用來提取二維信號小波分解的細節分量
%D=detcoef2(O,C,S,N),O指定細節分量的類型,
%當O=‘h’時,重構水平細節分量,當O=‘v’時,重構垂直細節分量,當O=‘d’時,重構細節細節分量
LH2=detcoef2('v',C,S,1);
HL2=detcoef2('h',C,S,1);
HH2=detcoef2('d',C,S,1);
%訓練LL1頻帶碼本,將碼本大小設為128,維度為4 %
th=0.05;
nc=128;nd=4;
[cbLL2]=LBG(LL2,nc,nd,th); %LBG.m在L3.3節中
%訓練LH1頻帶碼本,將碼本大小設為64,維度為4 %
nc=64;nd=4;
[cbLH2]=LBG(LH2,nc,nd,th);
%訓練HL1頻帶碼本,將碼本大小設為64,維度為4 %
nc=64;nd=4;
[cbHL2]=LBG(HL2,nc,nd,th);
%訓練HH1頻帶碼本,將碼本大小設為64,維度為16 %
nc=64;nd=16;
[cbHH2]=LBG(HH2,nc,nd,th);
%利用一層小波變換加上向量量化進行Lena圖像壓縮%
%輸入一幅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');
[C,S]=wavedec2(double(X(:,:,2)),Wavelet_Scale,Wavelet_Name);
LL2=appcoef2(C,S,Wavelet_Name,Wavelet_Scale);
LH2=detcoef2('v',C,S,1);
HL2=detcoef2('h',C,S,1);
HH2=detcoef2('d',C,S,1);
wt_X(1:M/2,1:N/2)=LL2;
wt_X(1:M/2,N/2+1:N)=LH2;
wt_X(M/2+1:M,1:N/2)=HL2;
wt_X(M/2+1:M,N/2+1:N)=HH2;
%分別針對不同的頻帶進行向量量化,其中VQ.m置于L3.4節中%
[R_LL2,bitLL2]=VQ(LL2,cbLL2);
[R_LH2,bitLH2]=VQ(LH2,cbLH2);
[R_HL2,bitHL2]=VQ(HL2,cbHL2);
[R_HH2,bitHH2]=VQ(HH2,cbHH2);
wt_Y(1:M/2,1:N/2)=R_LL2;
wt_Y(1:M/2,N/2+1:N)=R_LH2;
wt_Y(M/2+1:M,1:N/2)=R_HL2;
wt_Y(M/2+1:M,N/2+1:N)=R_HH2;
%計算圖像經過向量量化后的壓縮率CR及失真PSNR%
totalbit2=bitLL2+bitLH2+bitHL2+bitHH2 %花費的總位數
%Y=idwtper2(R_LL1,R_LH1,R_HL1,R_HH1,'bior3.3'); %反小波變換
C2= [R_LL2 R_HL2 R_LH2 R_HH2];
S2=S;
Y2=waverec2(C2,S2,Wavelet_Name);
X(:,:,2)=Y2;
Wavelet_Name='db1';
Wavelet_Scale=1;
[C,S]=wavedec2(double(X(:,:,3)),Wavelet_Scale,Wavelet_Name);
%appcoef2用來提取二維信號小波分解的近似分量
LL3=appcoef2(C,S,Wavelet_Name,Wavelet_Scale);
%detcoef2用來提取二維信號小波分解的細節分量
%D=detcoef2(O,C,S,N),O指定細節分量的類型,
%當O=‘h’時,重構水平細節分量,當O=‘v’時,重構垂直細節分量,當O=‘d’時,重構細節細節分量
LH3=detcoef2('v',C,S,1);
HL3=detcoef2('h',C,S,1);
HH3=detcoef2('d',C,S,1);
%訓練LL1頻帶碼本,將碼本大小設為128,維度為4 %
th=0.05;
nc=128;nd=4;
[cbLL3]=LBG(LL3,nc,nd,th); %LBG.m在L3.3節中
%訓練LH1頻帶碼本,將碼本大小設為64,維度為4 %
nc=64;nd=4;
[cbLH3]=LBG(LH3,nc,nd,th);
%訓練HL1頻帶碼本,將碼本大小設為64,維度為4 %
nc=64;nd=4;
[cbHL3]=LBG(HL3,nc,nd,th);
%訓練HH1頻帶碼本,將碼本大小設為64,維度為16 %
nc=64;nd=16;
[cbHH3]=LBG(HH3,nc,nd,th);
%利用一層小波變換加上向量量化進行Lena圖像壓縮%
%輸入一幅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');
[C,S]=wavedec2(double(X(:,:,3)),Wavelet_Scale,Wavelet_Name);
LL3=appcoef2(C,S,Wavelet_Name,Wavelet_Scale);
LH3=detcoef2('v',C,S,1);
HL3=detcoef2('h',C,S,1);
HH3=detcoef2('d',C,S,1);
wt_X(1:M/2,1:N/2)=LL3;
wt_X(1:M/2,N/2+1:N)=LH3;
wt_X(M/2+1:M,1:N/2)=HL3;
wt_X(M/2+1:M,N/2+1:N)=HH3;
%分別針對不同的頻帶進行向量量化,其中VQ.m置于L3.4節中%
[R_LL3,bitLL3]=VQ(LL3,cbLL3);
[R_LH3,bitLH3]=VQ(LH3,cbLH3);
[R_HL3,bitHL3]=VQ(HL3,cbHL3);
[R_HH3,bitHH3]=VQ(HH3,cbHH3);
wt_Y(1:M/2,1:N/2)=R_LL3;
wt_Y(1:M/2,N/2+1:N)=R_LH3;
wt_Y(M/2+1:M,1:N/2)=R_HL3;
wt_Y(M/2+1:M,N/2+1:N)=R_HH3;
%計算圖像經過向量量化后的壓縮率CR及失真PSNR%
totalbit3=bitLL3+bitLH3+bitHL3+bitHH3; %花費的總位數
%Y=idwtper2(R_LL1,R_LH1,R_HL1,R_HH1,'bior3.3'); %反小波變換
C3= [R_LL3 R_HL3 R_LH3 R_HH3];
S3=S;
Y3=waverec2(C3,S3,Wavelet_Name);
%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=M2*N2*8/totalbit2
%figure(200);imshow(uint8(X));title('compressed image');
figure(300);imshow(uint8(RG1));title('compressed555 image');
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -