基于JEPG的图像压缩课程设计_第1页
基于JEPG的图像压缩课程设计_第2页
基于JEPG的图像压缩课程设计_第3页
基于JEPG的图像压缩课程设计_第4页
基于JEPG的图像压缩课程设计_第5页
已阅读5页,还剩12页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要随着科学发展,图像压缩技术越来越被人们所关注。为此从众多的图像编码标准中选取了基于DCT变换的JPEG图像压缩进行研究,并通过对比分析各种软件特性选取MATLAB进行实验仿真。首先说明了图像压缩在现代通信中的必要性和可行性,然后讲述了MATLAB及其图像处理工具箱的相关知识,并对基于DCT变换的JPEG图像压缩算法进行了详细的研究,最后应用MATLAB进行了实验仿真并分析结果得出结论。实验结果表实验结果表明:基于DCT变换的JPEG图像压缩方法简单,既保证有较高的压缩比,又保证既有较好的图像质量,MATLAB仿真结果较好的反应了算法原理。关键词:JPEG图像压缩DCTMATLAB图像处理工具箱Abstract:Imagecompressiontechnologyhasbeengrowingconcernwiththedevelopmentofscience.TothisendalargenumberofimagesfromtheselectedcodingstandardDCT-basedJPEGimagecompressionresearch,andcomparativeanalysisofvarioussoftwarefeaturesthroughtheselectionexperimentMATLABsimulation.First,notetheimagecompressioninmoderncommunicationsandthenecessityandfeasibility,andthentellstheMATLABanditsImageProcessingToolboxofrelevantknowledge,andDCT-basedJPEGimagecompressionalgorithmisstudiedindetail,thelastapplicationofMATLABtoSimulationandexperimentalresultsconcluded.Experimentalresultsshowthattheresultstable:DCT-basedJPEGimagecompressionmethodissimple,notonlyguaranteeahighercompressionratio,butalsotoensurebothbetterimagequality,MATLABsimulationresultsreflectabetteralgorithmprinciple.Keywords:JPEGimagecompressionDCTMATLABImageProcessingToolbox目录引言…………..MATLAB中数字图像文字的读写……….....基于DCT的JPEG图像压缩编码理论算法………………..基于DCT变换的JPEG图像压缩的MATLAB实现………参考文献………………………个人小结………………………评语表…………一.引言1.1图像压缩随着信息技术的发展,图像信息被广泛应用于多媒体通信和计算机系统中,但是图像数据的一个显著特点就是信息量大。具有庞大的数据量,如果不经过压缩,不仅超出了计算机的存储和处理能力,而且在现有的通信信道的传输速率下,是无法完成大量多媒体信息实时传输的,因此,为了更有效的存储、处理和传输这些图像数据,必须对其进行压缩,因此有必要对图像压缩编码进行研究。由于组成图像的各像素之间,无论是在行方向还是在列方向上都存在着一定的相关性,因此只要应用某种图像压缩编码方法提取或者减少这种相关性,就可以达到压缩数据的目的。所谓的图像压缩编码技术就是对要处理的图像源数据按一定的规则进行变换和组合,从而达到以尽可能少的代码(符号)来表示尽可能多的数据信息。在众多的图像编码标准中,JPEG(JointPhotographicExpertsGroup)格式是一种称为联合图像专家组的图像压缩格式,它适用于不同类型、不同分辨率的彩色和黑白静止图像。在JPEG图像压缩算法中,一种是以离散余弦变换(DCT,DiscreteCosineTransform)为基础的有损压缩算法,另一种是以预测技术为基础的无损压缩算法。基于离散余弦变换的图像压缩编码过程称为基本顺序过程,它应用于绝大多数图像压缩场合,并且它能在图像的压缩操作中获得较高的压缩比,在压缩比为25:1的情况下,压缩后还原得到的图像与原始图像相比较,非图像专家难于找出它们之间的区别,重构图像与源图像的视觉效果基本相同,因而得到了广泛的应用。因此,本文以基于DCT的JPEG图像压缩为主要研究内容,通过软件仿真实现分析实验结果得出结论。1.2MATLAB及其图像处理工具箱如果应用高级语言(如Basic,C,Fortran)编写仿真程序来实现这一基于DCT的JPEG图像压缩编码算法较为麻烦,而且仿真效果也不是十分理想。本文主要应用MATLAB发布的图像处理工具箱中的相关函数和命令来实基于DCT的JPEG图像压缩编码理论算法的仿真.图像处理工具箱(ImageProcessingToolbox)提供一套全方位的参照标准算法和图形工具,用于进行图像处理、分析、可视化和算法开发。可进行图像压缩、空间转换、图像增强、特征检测、降噪、图像分割和图像配准等功能。工具箱中大部分函数均以开放式MATLAB语言编写,这意味着可以检查算法、修改源代码和创建自定义函数。本文利用MATLAB图像处理工具箱对基于DCT的JPEG图像压缩编码理论算法进行仿真,实验证明该软件功能强大,语言简洁易学,人机界面友好,工具箱具有丰富的技术支持并集成了该领域专家的智慧,应用简单而效果良好二.MATLAB中数字图像文件的读写2.1MATLAB中支持的数字图像文件MATLAB图像处理工具箱支持四种图像类型,分别为RGB图像(真彩色图像)、索引图像、灰度图像、二值图像,由于有的函数对图像类型有限制,这四种类型可以用工具箱的类型转换函数相互转换。MATLAB可操作的图像文件包括BMP、HDF、JPEG、PCX、TIFF、XWD等格式。下面就图像处理的基本过程讨论工具箱所实现的常用功能。2.2数字图像文件的读写MATLAB为用户提供了专门的函数来从图像格式的文件中读写图像数据。这种方法不像其他编程语言,需要编写复杂的代码,只需要简单地调用MATLAB提供的函数即可。2.2.1图像文件的读取MATLAB中利用函数imread来实现图像文件的读取操作。其语法格式为:A=imread(filename,fmt)[X,map]=imread(filename,fmt)[…]=imread(filename)filename:图像文件名;fmt:图像文件格式。A=imread(filename,fmt)读取图像到A,如果文件是包含灰度图像,A是二维矩阵,如果文件是包含真彩色图像(RGB),A是三维矩阵(M-by-N-by-3)。文件必须在当前目录下,或在matlab的路径上。如果imread不能够找到名称为filename的文件,那么它将找一名为filename.fmt的文件[X,map]=imreadfilename,fmt)把图像filename读入与它相关的图像色彩信息写入map,图像色彩信息值在范围[0,1]中自动地重新调整.[…]=imread(filename)这种方式是试图得到文件的格式从文件所包含的信息。2.2.2图像文件的输出MATLAB中利用函数imwrite来实现图像文件的输出和保存操作。其语法格式为:imwrite(A,filename,fmt)imwrite(X,map,filename,fmt)imwrite(…,filename)imwrite(A,filename,fmt)把图像A写入图像文件filename。imwrite(X,map,filename,fmt)把X和它的相关色彩信息map写入filename。imwrite(…,filename)把图像写入图像文件filename,并推测可能的格式用来做filename的扩展名,扩展名必须是fmt中一合法名。2.2.3图像文件的显示在MATLAB中,可以调用image函数来显示图像,其语法格式为:image(C)image(C)把矩阵C转成一图像.C可以是一M×N或M×N×3维的矩阵,且可以是包含double,uint8,或uint16数据.image是用来显示附标图像,即显示的图像上有x、y坐标轴的显示,可以看到图像的像素大小。但可以加上axisoff命令即可把坐标去掉。在MATLAB的图像处理工具箱中,还提供了一个应用很广泛的图像显示函数,即imshow函数,其调用格式为:imshow(I,n)imshow(I,[lowhigh])imshow(BW)imshow(X,map)imshow(RGB)imshowfilenameimshow(I,n)显示一幅n个灰度级的图像I。imshow(I,[lowhigh])一定灰度范围内显示灰度图像,low和high参数分别为数据数组的最小值和最大值。imshow(BW)显示二进制图像。imshow(X,map)显示索引图像,其中X代表索引图像的数据矩阵,map为颜色映射表。imshow(RGB)显示RGB图像。RGB是一个m×n×3的数组。对于RGB中的每个像素(r,c),imshow显示数值(r,c,1:3)所描述的颜色。imshowfilename显示一幅在当前目录下的合法文件。例如下面的程序:imread(‘zyj.bmp’);imshow(I),title(’图像读出’)图像显示如图2-1所示图像读出图像读出图2-1图像的读出和显示三.基于DCT的JPEG图像压缩编码理论算法3.1基于DCT的JPEG图像压缩编码算法的表述基于DCT编码的JPEG编码压缩过程框图如图3-1所示。源图像源图像YUV图像①②8×8子块③DCT量化编码压缩图像量化表编码表⑤⑥④图3-1基于DCT编码的JPEG压缩过程简化框图在编码过程中,首先将输入图像颜色空间转换后分解为8×8大小的数据块,然后用正向二维DCT把每个块转变成64个DCT系数值,其中1个数值是直流(DC)系数,即8×8空域图像子块的平均值,其余的63个是交流(AC)系数,接下来对DCT系数进行量化,最后将变换得到的量比的DCT系数进行编码和传送,形成压缩后的图像格式在解码过程中,先对已编码的量子化的DCT系数进行解码,然后求逆量化并把DCT系数转化为8×8样本像块(使用二维DCT反变换),最后将操作完成后的块组合成一个单一的图像。这样就完成了图像的压缩和解压过程.3.2基于DCT的JPEG图像压缩编码步骤3.2.1颜色空间的转换和采样JPEG文件使用的颜色空间为1982年推荐的电视图像数字化标准CCIR601(现为ITU-RBT.601)。在这个色彩空间中,每个分量、每个像素的电平规定为255级,用8位代码表示。JPEG只支持颜色模式。其中代表亮度,代表色度。全彩色图像模式转换到模式,用:(3-1)其逆变换为:(3-2)JPEG是以8×8的块为单位来进行处理的,由于人眼对亮度的敏感度比色度的敏感度大的多,所以采用缩减取样的方式,通常采用YUV422取样,如图3-2所示:图3-2YUV422取样示意图即对于16×16的块,取4个8×8的块,各取2个8×8的块。也有YUV411方式,取4个8×8的块,各取1个8×8的块。YUV422取样方式,数据减少1/3。YUV411取样方式,数据减少1/2。缩减取样一般采用如图3-3所示方法:aabcde……b'd'图3-3压缩取样示意图3.2.2二维离散余弦变换在傅里叶级数展开式中,如果被展开的函数是实偶函数,那么,其傅里叶技术中只包含余弦项,在将其离散化由此可导出余弦变换,或称之为离散余弦变换(DCT,DiscreteCosineTransform)。二维离散余弦正变换公式为 (3-3)式中,。二维离散余弦逆变换公式为(3-4)式中,。JPEG采用的是8×8大小的子块的二维离散余弦变换。在编码器的输入端,把原始图像顺序地分割成一系列8×8的子块,子块的数值在-128到127之间。采用余弦变换获得64个变换系数。变换公式如下:(3-5)式中,。在MATLAB的图像处理工具箱中,可以直接调用dct2和idct2来实现二维离散余弦变换及其反变换。(1)dct2dct2函数实现图像的二维离散余弦变换,其语法为:F=dct2(f)运行下列程序:f=imread('cameraman.tif');f=im2double(f);F=dct2(f);subplot(121),imshow(f,[]);subplot(122),imshow(log(1+20*abs(F)),[]);运行结果如图3-4所示:图3-4图像显示及图像DCT变换后频谱显示由运行结果可知,DCT变换具有能量集中的性质,数据集中在左上角。因此进行图像压缩时离散余弦变换矩阵可以舍弃右下角的高频数据。(2)idct2idct2函数实现图像的二维离散余弦逆变换,其语法为:F=idct2(f)在MATLAB图像处理工具箱中,有一个对图像进行块操作的函数blkproc,利用这个函数,可以直接实现图像一系列8×8子块的DCT变换。其语法格式为:B=blkproc(A,[mn],fun,parameter1,parameter2,...)B=blkproc(A,[mn],[mbordernborder],fun,...)B=blkproc(A,'indexed',...)[mn]是指图像以m*n为分块单位,对图像进行处理(如8像素*8像素)Fun:应用此函数对分别对每个m*n分块的像素进行处理parameter1,parameter2:要传给fun函数的参数mbordernborder:对每个m*n块上下进行mborder个单位的扩充,左右进行nborder个单位的扩充,扩充的像素值为0,fun函数对整个扩充后的分块进行处理。如下列程序:I=imread('cameraman.tif');fun=@dct2;J=blkproc(I,[88],fun);imagesc(J),colormap(hot)运行结果如图3-5所示图3-5DCT变换后图像3.2.3DCT系数的量化量化是对经过DCT变换后的频率系数进行量化,其目的是减小非“0”系数的幅度以及增加“0”值系数的数目,它是图像质量下降的最主要原因。

对于基于DCT的JPEG图像压缩编码算法使用如图3-6所示的均匀量化器进行量化,量化步距是按照系数所在的位置和每种颜色分量的色调值来确定。因为人眼对亮度信号比对色差信号更敏感,因此使用了如表3-1所示的两种量化表。此外,由于人眼对低频分量的图像比对高频分量的图像更敏感,因此图中的左上角的量化步距要比右下角的量化步距小。DCT系数输入DCT系数输入量化系数输出图3-6均匀量化器亮度量化表色度量化表161110162440516117182447999999991212141926586055182126669999999914131624405769562426569999999999141722295187806247669999999999991822375668109103779999999999999999243555648110411392999999999999999949647887103121120101999999999999999979929598112100103999999999999999999表3-1JPEG压缩色度和亮度量化表量化会产生误差,上图是综合大量的图像测试的实验结果,对于大部分图像都有很好的结果。表中可以看出,高频部分对应的量化值大,目的就是将高频部分编程接近于0,以便以后处理。JPEG可以在压缩比和图像质量间作取舍。方法就是改变量化值。如果量化值放大一倍,则有更多的系数量化为0,提高了压缩比。3.2.4量化系数的编排量化后的系数要重新编排,目的是为了增加连续的“0”系数的个数,就是“0”的游程长度,方法是按照Z字形的式样编排。DCT变换后低频分量多呈圆形辐射状向高频率衰减,因此可以看成按Z字形衰减,如图3-7所示。因此,量化系数按Z字形扫描读数,这样就把一个8×8的矩阵变成一个1×64的矢量,频率较低的系数放在矢量的顶部。图3-7量化DCT系数的编排0156141527282471316262942381217253041439111824314044531019233239455254202233384651556021343747505659613536484957586263表3-2量化DCT系数的序号3.2.5DC系数的编码8×8子块的64个变换系数经量化后,按直流系数DC和交流系数AC分成两类处理。坐标u=v=0的直流系数DC实质上就是空域图像中64个像素的平均值。图像块经过DCT变换之后得到的DC直流系数有两个特点,一是系数的数值比较大,二是相邻8×8图像块的DC系数值变化不大。根据这个特点,JPEG算法使用了差分脉冲调制编码技术差分脉冲编码调制(DPCM,DifferentialPulseCodeModulation),是一种对模拟信号的编码模式,先根据前一个抽样值计算出一个预测值,再取当前抽样值和预测值之差作为编码用.此差值称为预测误差.抽样值和预测值非常接近(因为相关性强),预测误差的可能取值范围比抽样值变化范围小.所以可用少几位编码比特来对预测误差编码,从而降低其比特率.这是利用减小冗余度的办法,降低了编码比特率.因此,对DC系数编码进行差分脉冲编码就是对相邻图像块之间量化DC系数的差值(Delta)进行编码,即对相邻块之间的DC系数的差值DIFF=DC-DC编码。3.2.6ACDCT变换所得系数除直流系数之外的其余63个系数称为交流系数(AC系数)。量化AC系数的特点是1×64矢量中包含有许多“0”系数,并且许多“0”是连续的,因此使用非常简单和直观的游程长度编码(RLE)对它们进行编码。所谓行程编码(Run-LengthEncoding)就是指仅存储一个像素值以及具有相同颜色的像素数目的图象数据编码方式,或称游程编码,常用RLE(Run-LengthEncoding)表示。该压缩编码技术相当直观和经济,运算也相当简单,因此解压缩速度很快。RLE压缩编码尤其适用于计算机生成的图形图像,对减少存储容量很有效果。63个AC系数采用行程编码的方式进行编码的格式如图3-8所示,第一字节第一字节第二字节两个非零值之间的连续零的个数下一个非零值所占的比特数下一个非零系数的实际值图3-8AC也即在AC01到AC63中,找出每一个非零的AC值,将其表示成(NN/SS)VV的形式,其中:NN表示该AC值前的0的个数。而SS、VV与DC的定义一样。如果连续的非0超过15个时,增加一个扩展字节:(15/0)表示连续16个0。另外若有一串0延伸到AC63,一律用(0/0)表示结束。3.2.7组成位数据流JPEG编码的最后一个步骤是把各种标记代码和编码后的图像数据组成一帧一帧的数据,这样做的目的是为了便于传输、存储和译码器进行译码,这样的组织的数据通常称为JPEG位数据流(JPEGbitstream)。四.基于DCT变换的JPEG图像压缩的MATLAB实现4.1MATLAB仿真程序I=imread('\lena.bmp'');%读取图像I1=im2double(I);%图像存储类型转换T=dctmtx(8);%离散余弦变换矩阵B=blkproc(I1,[88],'P1*x*P2',T,T');%对源图像进行DCT变换mask=[1111000011100000110000001000000000000000000000000000000000000000]B2=blkproc(B,[88],'P1*x',mask);%数据压缩,丢弃右下角高频数据I2=blkproc(B2,[88],'P1*x*P2',T',T);%进行DCT反变换subplot(121),imshow(I1)%显示原始图像subplot(122),imshow(I2)%显示压缩后的图像仿真结果如图4-1所示图4-1原始图像(左图)和压缩图像(右图)仿真中取了lO个DCT系数,占l5%比较愿图和重构图像,可以发现:在抛弃85%的DCT系数后,重构图像时并不会因此而带来其画面质量的显著下降,即重构图像的失真不大当然,采用这种方法来实现压缩算法时,可以通过修改mask变量中的DCT系数来更好地比较仿真结果4.2实验结果分析对比压缩前后的图像易知,压缩后的图像稍显模糊,但由于DCT变换有使图像能量集中在左上方的特性,因此压缩图像保留了原始图像大部分的图像特征,其视觉效果与原始图像相差不大。应用MATLAB图像处理工具箱中的相关函数和命令来实现基于DCT的JPEG图像压缩编码理论算法的压缩方法简单,仿真程序思路清晰,既保证有较高的压缩比,又保证既有较好的图像质量,MATLAB仿真结果较好的反应了算法原理。五.参考文献【1】张汗灵.MATLAB在图像处理中的应用[M].北京:清华大学出版社,2008:57-67.【2】郑阿奇,曹戈,赵阳.MATLAB实用教程[M].北京:电子工业出版社,2002:67-88.【3】程卫国,冯峰,姚东,徐听.MATLAB5.3应用指南[M].北京:人民邮电出版

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论