📄 dct_decompr.m
字号:
clear all;
Mask = [1/16 1/11 1/10 1/16 1/24 1/40 1/51 1/61;
1/12 1/12 1/14 1/19 1/26 1/58 1/60 1/55;
1/14 1/13 1/16 1/24 1/40 1/57 1/69 1/56;
1/14 1/17 1/22 1/29 1/51 1/87 1/80 1/62;
1/18 1/22 1/37 1/56 1/68 1/109 1/103 1/77;
1/24 1/35 1/55 1/64 1/81 1/104 1/113 1/92;
1/49 1/64 1/78 1/87 1/103 1/121 1/120 1/101;
1/72 1/92 1/95 1/98 1/112 1/100 1/103 1/99];
% Mask = [ 3, 2, 2, 3, 5, 8, 10, 12;
% 2, 2, 3, 4, 5, 12, 12, 11;
% 3, 3, 3, 5, 8, 11, 14, 11;
% 3, 3, 4, 6, 10, 17, 16, 12;
% 4, 4, 7, 11, 14, 22, 21, 15;
% 5, 7, 11, 13, 16, 12, 23, 18;
% 10, 13, 16, 17, 21, 24, 24, 21;
% 14, 18, 19, 20, 22, 20, 20, 20];
fid = fopen('project2.bin', 'rb');
y = fread(fid);
fclose(fid);
y = y';
% Structura lui y: y=[s_b m/s_b n/s_b Mask1 y];
% s_b = 1 octet
% m/s_b = 1 octet
% n/s_b = 1 octet
% Mask1 = 64 octeti
% Extragere info din stream
s_b = y(1);
m = y(2) * s_b;
n = y(3) * s_b;
Mask1 = zeros([1 64]);
for i=1:64
Mask1(i) = y(i+3);
end;
y2 = zeros([1 length(y)-67]);
for i=68:length(y)
y2(i-67) = y(i);
end;
y = y2';
% Decodare huffman
xC = Huff06(y);
V = xC{1};
Z = reshape(V, 64, length(V)/64);
Z = Z';
m_mic = m / s_b;
n_mic = n / s_b;
R=[];
C=[];
for i=1:m_mic
R = [R s_b];
end;
for i=1:n_mic
C = [C s_b];
end;
J = zeros([m n]);
I = mat2cell(J, R, C);
h = 1;
for j=1:n_mic
for i=1:m_mic
I{i, j} = izigzag(Z(h,:), 8, 8);
h = h + 1;
end;
end;
J = cell2mat(I);
J = blkproc(J,[s_b s_b],'P1.*x', Mask);
fun = @idct2;
H = blkproc(J,[s_b s_b],fun);
imshow(H);
ImI = imread('im_17_kodim15.tif');
ImI = double(ImI);
[h,w]=size(ImI);
dif=abs(ImI-H);
s=sum(dif(:).^2);
mae=mean(dif(:));
psnr=10*log10((h-1)*(w-1)*(max(max(ImI))^2)/s);
psnr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -