您好,欢迎访问三七文档
当前位置:首页 > 医学/心理学 > 医学现状与发展 > 基于DCT的图像压缩MATLAB实验6.0
基于DCT的图像压缩MATLAB实验——版本6.0物理与电子工程系电子科学与技术1203班李渊基于DCT图像压缩编码过程的流程图。在编码过程中,首先利用二维DCT把每个子块转变成64个变换系数。利用二维DCT把每个子块转变成64个DCT变换系数,其中8×8图像变换矩阵左上角的第一个数值直流分量,我们通常称之为DC系数,它表达的是8×8空域图像子块像素值的平均值,其余63个系数则是交流分量,称作AC系数。DCT系数的量化量化是图像有损压缩中造成复原图像质量下降的重要原因之一,其目的是为了减小非“0”系数的幅度、增加“0”值系数,对系数值的量化间距进行划分规整,从而达到进一步压缩数据的目的。量化系数的编码01561415272824713162629423812172530414391118243140445310192332394552542022333846515560213437475056596135364849575862638×8经过DCT变换后,直流系数的值比较大,并且相邻块的DC系数数值上变化幅度较小。因此,对于直流分量,采用差分脉冲调制编码(DPCM),即对对本块和前一块的直流分量之差Diff=DCi—DCi—l(i为块号)编码。其它63交流(AC)系数,采用了“之”字型(Z追一Zag)的排列方法,实验程序:I=imread('C:\Users\李渊\Desktop\1.jpg');%读取图像I=rgb2gray(I);%转化为灰度图像I=double(I);%同态滤波处理f=fft2(I);%采用傅里叶变换g=fftshift(f);%数据矩阵平衡[M,N]=size(f);d0=10;r1=0.5;rh=2;c=4;n1=floor(M/2);n2=floor(N/2);图像输入DCT变换图像输入量化熵编码压缩数据输出量化表码表fori=1:M%主循环forj=1:Nd=sqrt((i-n1)^2+(j-n2)^2);h=(rh-r1)*(1-exp(-c*(d.^2/d0.^2)))+r1;g(i,j)=h*g(i,j);endend%循环结束g=ifftshift(g);g=uint8(real(ifft2(g)));%DCT变换J=im2double(g);%存储类型转化为双精度浮点类型T=dctmtx(8);%离散余弦变换矩阵,得到8DCT矩阵,然后量化B=blkproc(J,[88],'P1*x*P2',T,T');%对源图像进行DCT变换mask1=[1000000000000000000000000000000000000000000000000000000000000000];%量化系数为1mask2=[1100000000000000000000000000000000000000000000000000000000000000];%量化系数为2mask3=[1111000011000000100000000000000000000000000000000000000000000000];%量化系数为3mask6=[1111000011000000100000000000000000000000000000000000000000000000];%量化系数为6mask10=[1111000011100000110000001000000010000000000000000000000000000000];%量化系数为10mask16=[1111110011111000111000001100000010000000000000000000000000000000];%量化系数为16mask21=[1111110011111000111100001110000011000000100000001000000000000000];%量化系数为21mask28=[1111111111111100111110001111000011100000110000001000000000000000];%量化系数为28B1=blkproc(B,[88],'P1.*x',mask1);%数据压缩,丢下右下角高频数据J1=blkproc(B1,[88],'P1*x*P2',T',T);%进行DCT反变换B2=blkproc(B,[88],'P1.*x',mask2);%数据压缩,丢下右下角高频数据J2=blkproc(B2,[88],'P1*x*P2',T',T);%进行DCT反变换B3=blkproc(B,[88],'P1.*x',mask3);%数据压缩,丢下右下角高频数据J3=blkproc(B3,[88],'P1*x*P2',T',T);%进行DCT反变换B6=blkproc(B,[88],'P1.*x',mask6);%数据压缩,丢下右下角高频数据J6=blkproc(B6,[88],'P1*x*P2',T',T);%进行DCT反变换B10=blkproc(B,[88],'P1.*x',mask10);%数据压缩,丢下右下角高频数据J10=blkproc(B10,[88],'P1*x*P2',T',T);%进行DCT反变换B16=blkproc(B,[88],'P1.*x',mask16);%数据压缩,丢下右下角高频数据J16=blkproc(B16,[88],'P1*x*P2',T',T);%进行DCT反变换B21=blkproc(B,[88],'P1.*x',mask21);%数据压缩,丢下右下角高频数据J21=blkproc(B21,[88],'P1*x*P2',T',T);%进行DCT反变换B28=blkproc(B,[88],'P1.*x',mask28);%数据压缩,丢下右下角高频数据J28=blkproc(B28,[88],'P1*x*P2',T',T);%进行DCT反变换figure;subplot(331);imshow(I,[]);title('原始图像');subplot(332);imshow(J1,[]);title('量化系数为1');subplot(333);imshow(J2,[]);title('量化系数为2');subplot(334);imshow(J3,[]);title('量化系数为3');subplot(335);imshow(J6,[]);title('量化系数为6');subplot(336);imshow(J10,[]);title('量化系数为10');subplot(337);imshow(J16,[]);title('量化系数为16');subplot(338);imshow(J21,[]);title('量化系数为21');subplot(338);imshow(J28,[]);title('量化系数为28');imwrite(I,'C:\Users\李渊\Desktop\c1.jpg');imwrite(J1,'C:\Users\李渊\Desktop\c2.jpg');f1=imfinfo('C:\Users\李渊\Desktop\c1.jpg');f2=imfinfo('C:\Users\李渊\Desktop\c2.jpg');r=f1.FileSize/f2.FileSize;disp(r);%压缩比方法0.1228I=double(I);I1=double(J1);[Row,Col]=size(I);[Row,Col]=size(I1);MSE=sum(sum((I-I1).^2))/(Row*Col);%均方误差计算公式PSNR=10*log10(255^2/MSE);%峰值信噪比计算公式%记录量化系数为1的压缩比、均方误差、峰值信噪比imwrite(I,'C:\Users\李渊\Desktop\c1.jpg');imwrite(J2,'C:\Users\李渊\Desktop\c2.jpg');f1=imfinfo('C:\Users\李渊\Desktop\c1.jpg');f2=imfinfo('C:\Users\李渊\Desktop\c2.jpg');r=f1.FileSize/f2.FileSize;disp(r);%压缩比方法0.4410I=double(I);I2=double(J2);[Row,Col]=size(I);[Row,Col]=size(I2);MSE=sum(sum((I-I2).^2))/(Row*Col);%均方误差计算公式PSNR=10*log10(255^2/MSE);%峰值信噪比计算公式%记录量化系数为2的压缩比、均方误差、峰值信噪比imwrite(I,'C:\Users\李渊\Desktop\c1.jpg');imwrite(J3,'C:\Users\李渊\Desktop\c2.jpg');f1=imfinfo('C:\Users\李渊\Desktop\c1.jpg');f2=imfinfo('C:\Users\李渊\Desktop\c2.jpg');r=f1.FileSize/f2.FileSize;disp(r);%压缩比方法0.3074I=double(I);I3=double(J3);[Row,Col]=size(I);[Row,Col]=size(I3);MSE=sum(sum((I-I3).^2))/(Row*Col);%均方误差计算公式PSNR=10*log10(255^2/MSE);%峰值信噪比计算公式%记录量化系数为3的压缩比、均方误差、峰值信噪比imwrite(I,'C:\Users\李渊\Desktop\c1.jpg');imwrite(J6,'C:\Users\李渊\Desktop\c2.jpg');f1=imfinfo('C:\Users\李渊\Desktop\c1.jpg');f2=imfinfo('C:\Users\李渊\Desktop\c2.jpg');r=f1.FileSize/f2.FileSize;disp(r);%压缩比方法0.1902I=double(I);I6=double(J6);[Row,Col]=size(I);[Row,Col]=size(I6);MSE=sum(sum((I-I6).^2))/(Row*Col);%均方误差计算公式PSNR=10*log10(255^2/MSE);%峰值信噪比计算公式%记录量化系数为6的压缩比、均方误差、峰值信噪比imwrite(I,'C:\Users\李渊\Desktop\c1.jpg');imwrite(J10,'C:\Users\李渊\Desktop\c2.jpg');f1=imfinfo('C:\Users\李渊\Desktop\c1.jpg');f2=imfinfo('C:\Users\李渊\Desktop\c2.jpg');r=f1.FileSize/f2.FileSize;disp(r);%压缩比方法0.1492I=double(I);I10=double(J10);[Row,Col]=size(I);[Row,Col]=size(I10);MSE=sum(sum((I-I10).^2))/(Row*Col);%均方误差计算公式PSNR=10*log10(255^2/MSE);%峰值信噪比计算公式%记录量化系数为10的压缩比、均方误差、峰值信噪比imwrite(I,'C:\Users\李渊\Desktop\c1.jpg');imwrite(J16,'C:\Users\李渊\Desktop\c2.jpg');f1=imfinfo('C:\Users\李渊\Desktop\c1.jpg');f2=imfinfo('C:\Users\李渊\Desktop\c2.jpg');r=f1.FileSize/f2.FileSize;disp(r);%压缩比方法0.1228I=double(I);I16=double(J16);[Row,Col]=size(I);[Row,Col]=size(I1
本文标题:基于DCT的图像压缩MATLAB实验6.0
链接地址:https://www.777doc.com/doc-4887245 .html