⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tiquyuvs.m

📁 基于wavelet和bandelet的spiht图像压缩!
💻 M
字号:
clc
clear all
%-----------   Input   ----------------
[M,map]=imread('beauty.jpg');
M=M(1:256,1:256,:);
%把rgb数据三色分离 

r=double(M(:,:,1));%r是256x256的红色信息矩阵

g=double(M(:,:,2));%g是256x256的绿色信息矩阵

b=double(M(:,:,3));%b是256x256的兰色信息矩阵
%-----------------------yuv--------------------------
Y = 0.299*r + 0.587*g + 0.114*b;
U =-0.147*r-0.289*g + 0.436*b;
V = 0.615*r-0.515*g-0.100*b;

rate = 0.4;type = 'bior4.4';
figure
subplot(121);
imshow(M);
%-----------   Pre-processing   ----------------
%---------------------------------------------Y------------------------
OrigSize1 = size(Y, 1);
max_bits1 = floor(rate * OrigSize1^2);
OutSize1 = OrigSize1;
image_spiht1 = zeros(size(Y));
[nRow1, nColumn1] = size(Y);
%-----------   Wavelet Decomposition   ----------------
n_log1 = log2(OrigSize1); 
level1 = n_log1;
% wavelet decomposition level can be defined by users manually.

[Lo_D1,Hi_D1,Lo_R1,Hi_R1] = wfilters(type);

[I_W1, S1] = func_DWT(Y, level1, Lo_D1, Hi_D1);

%-----------   Coding   ----------------
img_enc1 = func_SPIHT_Enc(I_W1, max_bits1, nRow1*nColumn1, level1);   

%-----------   Decoding   ----------------
img_dec1 = func_SPIHT_Dec(img_enc1);

%-----------   Wavelet Reconstruction   ----------------
img_spiht1 = func_InvDWT(img_dec1, S1, Lo_R1, Hi_R1, level1);
Y1=img_spiht1;      
%----------------------------------------------U--------------------
OrigSize2 = size(U, 1);
max_bits2 = floor(rate * OrigSize2^2);
OutSize2 = OrigSize2;
image_spiht2 = zeros(size(U));
[nRow2, nColumn2] = size(U);
%-----------   Wavelet Decomposition   ----------------
n2 = size(U,1);
n_log2 = log2(n2); 
level2 = n_log2;
% wavelet decomposition level can be defined by users manually.
[Lo_D2,Hi_D2,Lo_R2,Hi_R2] = wfilters(type);

[I_W2, S2] = func_DWT(U, level2, Lo_D2, Hi_D2);

%-----------   Coding   ----------------
img_enc2 = func_SPIHT_Enc(I_W2, max_bits2, nRow2*nColumn2, level2);   

%-----------   Decoding   ----------------
img_dec2 = func_SPIHT_Dec(img_enc2);

%-----------   Wavelet Reconstruction   ----------------
img_spiht2 = func_InvDWT(img_dec2, S2, Lo_R2, Hi_R2, level2);
U1=img_spiht2;      

%-------------------------------------------------V------------------------
OrigSize3 = size(V,1);
max_bits3 = floor(rate * OrigSize3^2);
OutSize3 = OrigSize3;
image_spiht3 = zeros(size(V));
[nRow3, nColumn3] = size(V);
%-----------   Wavelet Decomposition   ----------------
n3 = size(V,1);
n_log3 = log2(n3); 
level3 = n_log3;
% wavelet decomposition level can be defined by users manually.

[Lo_D3,Hi_D3,Lo_R3,Hi_R3] = wfilters(type);

[I_W3, S3] = func_DWT(V, level3, Lo_D3, Hi_D3);

%-----------   Coding   ----------------
img_enc3 = func_SPIHT_Enc(I_W3, max_bits3, nRow1*nColumn3, level3);   

%-----------   Decoding   ----------------
img_dec3 = func_SPIHT_Dec(img_enc3);

%-----------   Wavelet Reconstruction   ----------------
img_spiht3 = func_InvDWT(img_dec3, S3, Lo_R3, Hi_R3, level3);
V1=img_spiht3;      
%--------------------------------------------------------------------------
%--------------output image--------------
r1=1.000*Y1-0.001*U1+1.402*V1;
g1=1.000*Y1-0.344*U1-0.714*V1;
b1=1.000*Y1+1.772*U1+0.001*V1;


%把3个变换的系数矩阵合并成图像文件

N(:,:,1)=uint8(round(r1));

N(:,:,2)=uint8(round(g1));

N(:,:,3)=uint8(round(b1));

subplot(122);
imshow(N);

%-----------   PSNR analysis   ---------------
% p1=psnr(r,r1);p2=psnr(g,g1);p3=psnr(b,b1);p=[p1 p2 p3];
% p=mean(p);
p = SNR(M,N);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -