a=imread('lena.bmp');
s=double(a);T = dctmtx(8);
QF=[16,11,10,16,24,40,51,61;12,12,14,19,26,58,60,55;14,13,16,24,40,57,69,56;14,17,22,29,51,87,80,62;18,22,37,56,68,109,103,77;24,35,55,64,81,104,113,92;49,64,78,87,103,121,120,101;72,92,95,98,112,100,103,99];
QF50=QF.*(50/50);
QF40=QF.*(50/40);
B = blkproc(s,[8,8],'P1*x*P2',T,T');%对图像块进行DCT变换
%对图像块进行量化QF分别等于50和40
Q50=blkproc(B,[8,8],'fix(x./P1)',QF50);
Q40=blkproc(B,[8,8],'fix(x./P1)',QF40);
%对压缩后图像进行解压
J50=blkproc(Q50,[8,8],'x.*P1',QF50);
J40=blkproc(Q40,[8,8],'x.*P1',QF40);
K50=blkproc(J50,[8,8],'P1*x*P2',T',T);
K40=blkproc(J40,[8,8],'P1*x*P2',T',T);
K1=uint8(K50);
K2=uint8(K40);
imshow(a);title('原图像');
figure
imshow(K1);title('QF=50图像');
figure
imshow(K2);title('QF=40图像');
%分别计算QF=50和40情况下的PSNR
M50=K1-a;
M40=K2-a;
M50=M50.^2;
M40=M40.^2;
MSE50=(sum(sum(M50)))/(256*256)
MSE40=(sum(sum(M40)))/(256*256)
PSNR50=10*log10((255*255)/MSE50)
PSNR40=10*log10((255*255)/MSE40)
MSE50 =
15.1516
MSE40 =
16.1842
PSNR50 =
36.3262
PSNR40 =
36.0399