📄 new.m
字号:
%load woman;
%X=imread('lena.png');
%X=[63 -34 49 10 7 13 -12 7; -31 23 14 -13 3 4 6 -1; 15 14 3 -12 5 -7 3 9; -9 -7 -14 8 4 -2 3 2;
% -5 9 -1 47 4 6 -2 2; 3 0 -3 2 3 -2 0 4; 2 -3 6 -4 3 6 3 6; 5 11 5 6 0 3 -4 4];
%En_Level=4;
%[m,n]=size(X);
%Save_Dotnum=m/(2.^En_Level);%决定保存的系数的值LL的大小
%infilename = 'lena256.bmp';
%outfilename = 'lena256_reconstruct.bmp';
load woman
%img_orig = double(imread(infilename));
img_orig=double(X);
[m,n]=size(img_orig);
En_Level=4;
level=4;
n_log = log2(m);
level = n_log; % wavelet decomposition level can be defined by users.
img_wavedata = wavelet('2D CDF9/7',level,img_orig,'sym');
X1=img_wavedata;
X1(1:m/2.^En_Level,(m/2.^En_Level+1):m/2.^(En_Level-1))=0.738*X1(1:m/2.^En_Level,(m/2.^En_Level+1):m/2.^(En_Level-1));
X1((m/2.^En_Level+1):m/2.^(En_Level-1),1:m/2.^En_Level)=0.738*X1((m/2.^En_Level+1):m/2.^(En_Level-1),1:m/2.^En_Level);
X1((m/2.^En_Level+1):m/2.^(En_Level-1),(m/2.^En_Level+1):m/2.^(En_Level-1))=0.596*X1((m/2.^En_Level+1):m/2.^(En_Level-1),(m/2.^En_Level+1):m/2.^(En_Level-1));
X1(1:m/2.^(En_Level-1),(m/2.^(En_Level-1)+1):m/2.^(En_Level-2))=0.548*X1(1:m/2.^(En_Level-1),(m/2.^(En_Level-1)+1):m/2.^(En_Level-2));
X1((m/2.^(En_Level-1)+1):m/2.^(En_Level-2),1:m/2.^(En_Level-1))=0.548*X1((m/2.^(En_Level-1)+1):m/2.^(En_Level-2),1:m/2.^(En_Level-1));
X1((m/2.^(En_Level-1)+1):m/2.^(En_Level-2),(m/2.^(En_Level-1)+1):m/2.^(En_Level-2))=0.411*X1((m/2.^(En_Level-1)+1):m/2.^(En_Level-2),(m/2.^(En_Level-1)+1):m/2.^(En_Level-2));
X1(1:m/2.^(En_Level-2),(m/2.^(En_Level-2)+1):m/2.^(En_Level-3))=0.355*X1(1:m/2.^(En_Level-2),(m/2.^(En_Level-2)+1):m/2.^(En_Level-3));
X1((m/2.^(En_Level-2)+1):m/2.^(En_Level-3),1:m/2.^(En_Level-2))=0.355*X1((m/2.^(En_Level-2)+1):m/2.^(En_Level-3),1:m/2.^(En_Level-2));
X1((m/2.^(En_Level-2)+1):m/2.^(En_Level-3),(m/2.^(En_Level-2)+1):m/2.^(En_Level-3))=0.230*X1((m/2.^(En_Level-2)+1):m/2.^(En_Level-3),(m/2.^(En_Level-2)+1):m/2.^(En_Level-3));
X1(1:m/2.^(En_Level-3),(m/2.^(En_Level-3)+1):m/2.^(En_Level-4))=0.189*X1(1:m/2.^(En_Level-3),(m/2.^(En_Level-3)+1):m/2.^(En_Level-4));
X1((m/2.^(En_Level-3)+1):m/2.^(En_Level-4),1:m/2.^(En_Level-3))=0.189*X1((m/2.^(En_Level-3)+1):m/2.^(En_Level-4),1:m/2.^(En_Level-3));
X1((m/2.^(En_Level-3)+1):m/2.^(En_Level-4),(m/2.^(En_Level-3)+1):m/2.^(En_Level-4))=0.119*X1((m/2.^(En_Level-3)+1):m/2.^(En_Level-4),(m/2.^(En_Level-3)+1):m/2.^(En_Level-4));
ezw_encoding_threshold = 512;
[img_enc_significance_map, img_enc_refinement] = func_ezw_enc(X1, ezw_encoding_threshold);
img_ezw_stream_bit = func_huffman_encode(img_enc_significance_map, img_enc_refinement);
treshold = pow2(floor(log2(max(max(abs(img_wavedata))))));
[img_dec_significance_map, img_dec_refinement] = func_huffman_decode(img_ezw_stream_bit);
img_wavedata_dec = func_ezw_dec(n, treshold, img_dec_significance_map, img_dec_refinement);
%img_wavedata_dec = func_ezw_dec(n, treshold, img_enc_significance_map, img_enc_refinement);
X1=img_wavedata_dec;
X1(1:m/2.^En_Level,(m/2.^En_Level+1):m/2.^(En_Level-1))=X1(1:m/2.^En_Level,(m/2.^En_Level+1):m/2.^(En_Level-1))/0.738;
X1((m/2.^En_Level+1):m/2.^(En_Level-1),1:m/2.^En_Level)=X1((m/2.^En_Level+1):m/2.^(En_Level-1),1:m/2.^En_Level)/0.738;
X1((m/2.^En_Level+1):m/2.^(En_Level-1),(m/2.^En_Level+1):m/2.^(En_Level-1))=X1((m/2.^En_Level+1):m/2.^(En_Level-1),(m/2.^En_Level+1):m/2.^(En_Level-1))/0.596;
X1(1:m/2.^(En_Level-1),(m/2.^(En_Level-1)+1):m/2.^(En_Level-2))=X1(1:m/2.^(En_Level-1),(m/2.^(En_Level-1)+1):m/2.^(En_Level-2))/0.548;
X1((m/2.^(En_Level-1)+1):m/2.^(En_Level-2),1:m/2.^(En_Level-1))=X1((m/2.^(En_Level-1)+1):m/2.^(En_Level-2),1:m/2.^(En_Level-1))/0.548;
X1((m/2.^(En_Level-1)+1):m/2.^(En_Level-2),(m/2.^(En_Level-1)+1):m/2.^(En_Level-2))=X1((m/2.^(En_Level-1)+1):m/2.^(En_Level-2),(m/2.^(En_Level-1)+1):m/2.^(En_Level-2))/0.411;
X1(1:m/2.^(En_Level-2),(m/2.^(En_Level-2)+1):m/2.^(En_Level-3))=X1(1:m/2.^(En_Level-2),(m/2.^(En_Level-2)+1):m/2.^(En_Level-3))/0.355;
X1((m/2.^(En_Level-2)+1):m/2.^(En_Level-3),1:m/2.^(En_Level-2))=X1((m/2.^(En_Level-2)+1):m/2.^(En_Level-3),1:m/2.^(En_Level-2))/0.355;
X1((m/2.^(En_Level-2)+1):m/2.^(En_Level-3),(m/2.^(En_Level-2)+1):m/2.^(En_Level-3))=X1((m/2.^(En_Level-2)+1):m/2.^(En_Level-3),(m/2.^(En_Level-2)+1):m/2.^(En_Level-3))/0.230;
X1(1:m/2.^(En_Level-3),(m/2.^(En_Level-3)+1):m/2.^(En_Level-4))=X1(1:m/2.^(En_Level-3),(m/2.^(En_Level-3)+1):m/2.^(En_Level-4))/0.189;
X1((m/2.^(En_Level-3)+1):m/2.^(En_Level-4),1:m/2.^(En_Level-3))=X1((m/2.^(En_Level-3)+1):m/2.^(En_Level-4),1:m/2.^(En_Level-3))/0.189;
X1((m/2.^(En_Level-3)+1):m/2.^(En_Level-4),(m/2.^(En_Level-3)+1):m/2.^(En_Level-4))=X1((m/2.^(En_Level-3)+1):m/2.^(En_Level-4),(m/2.^(En_Level-3)+1):m/2.^(En_Level-4))/0.119;
img_reconstruct = wavelet('2D CDF9/7',-level,X1,'sym');
fprintf('The bitrate is %.2f bpp (with threshold %d in the encoding)\n', length(img_ezw_stream_bit)/size(img_orig,1)/size(img_orig,2), ezw_encoding_threshold);
Q = 255;
img_reconstruct;
MSE = sum(sum((img_reconstruct-img_orig).^2))/size(img_orig,1)/size(img_orig,2);
MSE;
fprintf('The psnr performance is %.2f dB\n', 10*log10(Q*Q/MSE));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -