通信专业课程设计一太原科技大学课程设计(论文)设计(论文)题目:基于DCT的图像压缩及Matlab实现姓名____学号_班级_学院____指导教师____2010年12月31日太原科技大学课程设计(论文)任务书学院(直属系):时间:学生姓名指导教师设计(论文)题目基于DCT的图像压缩及Matlab实现主要研究内容掌握DCT变换实现图像压缩的基本方法,在不损害图像信源的有效信息量的情况下保证图像的质量,在MATLAB环境中进行图像压缩技术的仿真,并对仿真结果进行分析。研究方法主要运用实验法与观察法,通过编写程序实现对图像的DCT变换,观察图像结果进而实现对DCT变换的研究。主要技术指标(或研究目标)利用DCT变换编码方法进行图像压缩,提高信息传输的有效性及通信质量。教研室意见教研室主任(专业负责人)签字:年月日白杏林:基于DCT图像压缩及Matlab实现I目录摘要.............................................................................................................................................II第1章绪论.........................................................................................................................-1-第2章DCT变换概述..........................................................................................................-2-2.1DCT函数介绍..................................................................................................-2-2.2DCT变换介绍..................................................................................................-2-2.2.1DCT变换原理...............................................................................................-2-2.2.2DCT变换编码的步骤...................................................................................-3-第3章程序运行及结果分析..................................................................-5-3.1程序代码.........................................................................................................-5-3.2运行结果分析.................................................................................................-7-第4章结论.......................................................................................................................-11-参考文献...............................................................................................................................-12-白杏林:基于DCT图像压缩及Matlab实现II基于DCT变换函数的图像压缩摘要图像压缩是关于用最少的数据量来表示尽可能多的原图像的信息的一个过程。对于图像来说,如果需要进行快速或实时传输以及大量存储,就需要对图像数据进行压缩,在同等的用心容量下.如果图像数据压缩后再传输,就可以传输更多的图像信息,也就可以增加通信的能力。变换编码是把图像中的各个像素从一种空间变换到另一种空间.然后针对变换后的信号进行量化与编码操作的一种图象压缩编码技术。本文提出了基于DCT变换的JPEG图像压缩编码算法进行研究,并通过对比分析各种软件特性选取了MATLAB进行实验仿真,重点介绍了压缩编码的具体过程和方法,详细介绍了编码中DCT变换、量化、熵编码等模块的原理和数学推导以及各模块的功能分析,基于DCT变换的JPEG图像压缩方法简单、方便,既能保证有较高的压缩比,又能保证有较好的图像质量,应用MATLAB仿真出来的结果较好的反应了其编码算法原理。关键词:图像压缩DCT变换JPEGMATLAB白杏林:基于DCT图像压缩及Matlab实现-1-第1章绪论离散余弦变换(DCTforDiscreteCosineTransform)是与傅里叶变换相关的一种变换,它类似于离散傅里叶变换(DFTforDiscreteFourierTransform),但是只使用实数。离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换,这个离散傅里叶变换是对一个实偶函数进行的(因为一个实偶函数的傅里叶变换仍然是一个实偶函数),在有些变形里面需要将输入或者输出的位置移动半个单位(DCT有8种标准类型,其中4种是常见的)。最常用的一种离散余弦变换的类型是下面给出的第二种类型,通常所说的离散余弦变换指的就是这种。它的逆,也就是下面给出的第三种类型,通常相应的被称为反离散余弦变换,逆离散余弦变换或者IDCT。有两个相关的变换,一个是离散正弦变换(DSTforDiscreteSineTransform),它相当于一个长度大概是它两倍的实奇函数的离散傅里叶变换;另一个是改进的离散余弦变换(MDCTforModifiedDiscreteCosineTransform),它相当于对交叠的数据进行离散余弦变换。白杏林:基于DCT图像压缩及Matlab实现-2-第2章DCT变换概述2.1DCT函数介绍常用的信源编码方法有算术编码、矢量量化、预测编码和变换编码等多种方法,变换编码就是经变换后的信号的样值能更有效地编码,也就是通过变换来解除或减弱信源符号间的相关性,再将变换后的样值进行标量量化,或采用对于独立信源符号的编码方法,以达到压缩码率的目的。在实用中常用离散余弦变换(DCT),尤其是对视频图像信号,其统计特性接近一阶马尔可夫链,离散余弦变换的正交矢量近似于相应的K-L变换的正交矢量。余弦变换的完备正交归一函数是(2-1),t(2-2)对这些函数在(0,T)内取N个样值,即得离散余弦变换矩阵的元为(2-3)(2-4)分别可得变换和反变换的矩阵形式。2.2DCT变换介绍2.2.1DCT变换原理基于DCT(离散余弦变换)压缩编码算法是有失真的压缩编码,图2.1为DCT变换编码原理图。原图像压缩图像图2.1DCT变换编码原理图RGB/YUVDCT量化编码解码解量化IDCTYVU/RGB白杏林:基于DCT图像压缩及Matlab实现-3-2.2.2DCT变换编码的步骤DCT变换编码的主要步骤是:颜色空间转换,正向离散余弦变换(FDCT),量化,熵编码(哈达码编码和算术编码)[1]。1)颜色空间转换和采样JPEG压缩只支持Y颜色模式,其中Y代表亮度,代表色度,所以在将彩色图像进行数据压缩之前必须对颜色模式进行转换,将RGB模式转为Y模式。转换可通过计算下述公式完成:Y=0.299R+0.587G+0.114B(2-5)=-0.169R-0.331G+0.5B(2-6)=0.5R-0.4187G-0.0813B(2-7)对转换后的数据进行采样,采样比例一般是4:2:2或4:1:1。经过采样后的图像数据的色度数据比原来减少了一半。选择这样的采样方式是因为人的视觉对亮度要比对色度更敏感,而重建后的图像与原图的差异是人的视觉所不易察觉到的。2)DCT变换[2]在进行DCT变换之前,先把图像分成88的子块。将用P位表示的图像数据(一般用8位表示一个像素的颜色分量),即在[0,]范围内表示的无符号整数,变成[]范围内表示的有符号数,作为DCT变换的输入量。经过DCT变换,将空域中表示的图像数据转换到频域中进行表示,并获得N个变换系数。变换公式为(2-8)逆DCT变换公式为(2-9)白杏林:基于DCT图像压缩及Matlab实现-4-其中,其他输出系数排列按Zig-zag排序,其中直流量为DC系数,交流量为AC系数。排列中越往后0越多。3)量化[3]为了达到进一步压缩数据的目的,需要对DCT系数进行量化。在JPEG中采用了线性均匀量化器,为减少比较数,增加零值,JPEG分别对Y,U,V的不同系统有不同量化间隔Q(u,v),并提供了亮度与色度两张量化表。4)熵编码根据信息论的原理,可以找到最佳数据压缩编码的方法,数据压缩的理论极限是信息熵。如果要求编码过程中不丢失信息量,即要求保存信息熵,这种信息保持编码叫熵编码,是根据消息出现概率的分布特性而进行的,是无损数据压缩编码。根据输入熵编码器表格的符号节点的加权值和与其相邻的其它节点的加权值对哈夫曼树进行有效的变换,从而提高压缩效率;利用八字形树旋转和准旋转对哈夫曼树进行有效的变换,从而使输入符号的加权值具有与现在输入的视频数据最合适的值,缩短变换表格的时间。可以查看相关的码表进行熵编码。白杏林:基于DCT图像压缩及Matlab实现-5-第3章程序调试及运行结果分析3.1程序代码I=imread('cameraman.tif')I=im2double(I)%转换图像矩阵为双精度型。J=dct2(I);T=dctmtx(8)%产生二维DCT变换矩阵a1=[1611101624405161;1212141926586055;1413162440576956;1417222951878062;182237566810910377;243555648110411392;49647887103121120101;7292959811210010399];fori=1:8:200forj=1:8:200P=I(i:i+7,j:j+7);K=T*P*T';I2(i:i+7,j:j+7)=K;K=K./a1;%量化K(abs(K)0.03)=0;I3(i:i+7,j:j+7)=K;endendfigure;imshow(I2);title('DCT变换后的频域图像');%显示DCT变换后的频域图像fori=1:8:200白杏林:基于DCT图像压缩及Matlab实现-6-forj=1:8:200P=I3(i:i+7,j:j+7).*a1;%反量化K=T'*P*T;I4(i:i+7,j:j+7)=K;endendfigure;imshow(I4);title('复原图像');B=blkproc(I,[8,8],'P1*x*P2',T,T')%计算二维DCT,矩阵T及其转置是DCT函数P1*X*P2的参数mask=[1111000011100000110000001000000000000000000000000000000000000000]%二值掩模,用来压缩DCT系数,只留下DCT系数中左上角的10个B2=blkproc(B,[88],'P1.*x',mask)%只保留DCT变换的10个系数I2=blkproc(B2,[88],'P1*x*P2',T',T)%重构图像figureimsh