📄 exe080901_dct2.m
字号:
%-------------------------------------------------------------------------
% exe080901_dct2.m
% k ------ 压缩时的参数,舍掉k个点用以重建, 0<p<=8
%-------------------------------------------------------------------------
clear
k=0
% 调出图像数据 girl.bmp;
X=imread('girl.bmp','bmp');
A=double(X);
B=zeros(size(A));
C=zeros(size(A));
% 作二维DCT,每一小块为 8×8;
s=size(A);
for m=1:s(1)
if rem(m,8)==0
for n=1:s(2)
if rem(n,8)==0
B((m-8+1):m,(n-8+1):n)=dct2(A((m-8+1):m,(n-8+1):n));
B((m-k+1):m,(n-8+1):n)=0;
B((m-8+1):m,(n-k+1):n)=0;
end
end
end
end
% 逆DCT,重建信号;
for m=1:128
if rem(m,8)==0
for n=1:128
if rem(n,8)==0
C((m-8+1):m,(n-8+1):n)=idct2(B((m-8+1):m,(n-8+1):n));
end
end
end
end
% 输出二维图像;
figure
C=uint8(C);
subplot(2,2,1);
subimage(X);
axis square;xlabel('original image')
subplot(2,2,2);
subimage(C);
axis square;xlabel('reconstructed image K=6');
C=double(C);
X=double(X);
MSE=0;
for m=1:128
MSE=MSE+sum((X(m:m,1:128)-C(m:m,1:128)).*(X(m:m,1:128)-C(m:m,1:128)))/128;
end
MSE=MSE/128
SNR=10*log10(255^2/MSE)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -