基于DCT的图像编解码设计_第1页
基于DCT的图像编解码设计_第2页
基于DCT的图像编解码设计_第3页
基于DCT的图像编解码设计_第4页
基于DCT的图像编解码设计_第5页
已阅读5页,还剩19页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、1 .绪论MATLAB1由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。随着信息技术的发展,图像信息被广泛应用于多媒体通信和计算机系统中,但是图像数据的一个显著特点就是信息量大。具有庞大的数据量,如果不经过压缩,不仅超出了计算机的存储和处

2、理能力,而且在现有的通信信道的传输速率下,是无法完成大量多媒体信息实时传输的,因此,为了更有效的存储、处理和传输这些图像数据,必须对其进行压缩,因此有必要对图像压缩编码进行研究。由于组成图像的各像素之间,无论是在水平方向还是在垂直方向上都存在着一定的相关性,因此只要应用某种图像压缩编码方法提取或者减少这种相关性,就可以达到压缩数据的目的。数字图像包含的冗余信息一般有以下儿种:空问元余、时间冗余、信息;脑冗余、统计冗余、结构冗余、视觉冗余以及知识冗余等。图像压缩算法就是要在保证图像一定的熏建质量的同时,尽可能多的去除这些元余信息.以达到对图像压缩的目的。随着科学技术的发展,图像压缩编码技术越来越

3、引起人们的关注。所谓的图像压缩编码技术就是对要处理的图像数据按一定的规则进行变换和组合,从而达到以尽可能少的数据流来表示尽可能多的数据信息。本设计基于DCT的JPEGPNGBMP等格式图像编解码设计算法进行研究,介绍了编码中DC侬换、量化、游程编码等模块的原理和数学推导以及各模块的功能分析。最后应用MATLAB8行了实验仿真并分析结果得出结论。DCT变换后具有绝对的去相关性,并且变换后的矩阵从左上角到右下角频率规律的渐高。有损压缩方法利用了人类视觉对图像中的某些频率成分不敏感的特性,允许压缩过程中损失一定的信息;虽然不能完全恢复原始数据,但是所损失的部分对理解原始图像的影响较小,却换来了大得多

4、的压缩比。因此舍弃高频分量保留低频分量的做法,对于图像压缩具有绝对的优势。只要损失的数据不太影响人眼主观接收的效果,就可采用。DCT变换后的压缩此本设计采用经典的游程编码实现。2 .设计任务2. 1任务描述基于DCT的图像编解码设计(1)获取图像;(2)采用DCT实现对图像编解码设计;(3)分析编解码性能2.2技术指标(1)可对JPEGPNGBMP等格式图像进行基于DCT的图像编解码。(2)为了便于分析比较,定义一个量化系数quotiety,越大压缩率越高。(3)压缩编码、量化系数统一写入存储文件compressed_data.mat,实现可移植解压。(4)观察压缩后图片大小,简便起见,分析只

5、关心compressed_data.mat文件的大小。(5)实现DCT变换和反变换以及JPEG标准量化矩阵的量化、反量化。(6)根据DCT量化后矩阵特点,本设计编码采用Z字型扫描游程编码、解码。(7)DCT压缩前后比较,以及不同量化系数比较。3.设计原理3. 1原理框图基于DCT的图像编码包括三个阶段:DCT变换、量化、编码。根据DCT量化后矩阵特点,本设计编码采用Z字型扫描游程编码、解码。首先将输入图像颜色空间转换后分解为8X8大小的数据块,然后用正向二维DCT把每个块转变成64个DCT系数值,其中1个数值是直流(DC)系数,即8X8空域图像子块的平均值,其余的63个是交流(AC)系数,接下

6、来对DCT系数进行量化,最后将变换得到的量化的DCT系数进行编码和传送,这样就完成了图像的压缩过程。原始图像数据DDCT变量化>游程编码,压缩图像数据量化表码表图3-1编码过程基于DCT的图像编码包括三个阶段:译码、反量化、IDCT变换。在解码过程中,形成压缩后的图像格式,先对己编码的量子化的DCT系数进行解码,然后求逆量化并把DCT系数转化为8X8样本像块(使用二维DCT反变换),最后将操作完成后的块组合成一个单一的图像。这样,就完成了图像的解压过程。压缩图像数据一奔游程译码>反量化fIDCT变一原始图像数据个码表量化表图3-2解码过程3.2程序流程图基于DCT的图像编解码设计的

7、MATLA殴现的流程图如图3-3所示输入图片输入量化系数分成8*8像素块,DCT变换输入量化表,对变换结果量化对量化结果进行扫描编码保存编码结果显不压缩图像打开编码文图3-3程序流程图3. 3离散余弦变换DCT变换利用傅立叶变换的性质。采用图像边界裙翻将像变换为偶函数形式,然后对图像进行二维傅立叶变换,变换后仅包含余弦项,所以称之为离散余弦变换。DCT编码属于正交变换编码方式,用于去除图像数据的空间冗余。变换编码就是将图像光强矩阵(时域信号)变换到系数空间(频域彳S号)上进行处理的方法。在空间上具有强相关的信号,反映在频域上是在某些特定的区域内能量常常被集中在一起,或者是系数矩阵的分布具有某些

8、规律。我们可以利用这些规律在频域上减少量化比特数,达到压缩的目的。图像经DCT变换以后,DCT系数之间的相关性就会变小。而且大部分能量集中在少数的系数上,因此,DCT变换在图像压缩中非常有用,是有损图像压缩国际标准JPEG的核心。从原理上讲可以对整l幅图像进行DCT变换,但由于图像各部位上细节的丰富程度不同,这种整体处理的方式效果不好。为此,发送者首先将输入图像分解为8*8或16*16块,然后再对每个图像块进行二维DCT变换,接着再对DCT系数进行量化、编码和传输;接收者通过对量化的DCTS数进行解码,并对每个图像块进行的二维DCT反变换。最后将操作完成后所有的块拼接起来构成一幅单一的图像。对

9、于一般的图像而言,大多数DCTS数值都接近于0,所以去掉这些系数不会对重建图像的质量产生较大影响。因此,利用DCT进行图像压缩确实可以节约大量的存储空间。在实验中,先将输入的原始图像分为8*8的小块,然后再对每个块进行二维DC侬换。二维离散余弦变换可以写成矩阵式(F(u,v)=(A)(f(x,y)(A)'(f(x,y)=(A)'(F(u,v)(A)式中,(f(x,y)是空间域数据阵列,(F(u,v)是变换系数阵列,(A)是系数阵列,变换矩阵(A)'是(A)的转置。设计中2维DCT变换函数代码如下:functionXpq=DCT2_function(xmn,M)T=dct

10、mtx(M);%产生二维DCT变换矩阵Xpq=T*xmn*T;设计中2维IDCT变换函数代码如下:functionxmn_resume=IDCrL_function(Xpq_resume,M)T=dctmtx(M);%生成变换矩阵xmn_resume=T*Xpq_resume*T;%用变化矩阵的乘法代替效率极低的for求和循环3.4 量化在DCT处理中得到的64个数据中,低频分量包含了图像亮度等主要信息。在从空间域到频域的变换中,图像中的缓慢变化比快速变化更易引起人眼的注意,所以在重建图像时,低频分量的重要性高于高频分量。因而在编码时可以忽略高频分量,即减小非"0"系数的l

11、幅度以及增加"0"值系数的数目,从而达到压缩的目的,这也是量化的根据和目的,也是图像质量下降的最主要原因。在JPEG标准中,用具有64个独立元素的量化表来规定DCT域中相应的64个系数的量化精度,使得对某个系数的具体量化阶取决于人眼对该频率分量的视觉敏感程度。理论上,对不同的空间分辨率、数据精度等情况,应该有不同的量化衰。不过,一般采用下图所示的量化表,可取得较好的视觉效果。量化化就是用DCT变换后的系数除以量化表中相对应的量化阶后四舍五入取整。由于量化表中左上角的值较小,而右下角的值较大,因而起到了保持低频分量、抑制高频分量的作用。为了便于分析比较,定义一个量化系数quo

12、tiety,量化系数越大,压缩率越高。量化系数quotiety在程序中是将JPEGB准量化矩阵*quotiety作为真正的量化矩阵。quotiety取值为大于1的任意实数。本设计中利用函数integral_function.m和deintegral_function实现量化和反量化。1611101624405161121214192658605514131624405769561417222951878062182237566810910377243555648110411392496478871031211201017292959811210010399图3-4灰皮值量化表量化会产生误差,上

13、表是综合大量的图像测试的实验结果,对于大部分图像都有很好的结果匀。表中可以看出,高频部分对应的量化值大,目的就是将高频部分编程接近于0,以便以后处理。JPEG可以在压缩比和图像质量问作取舍。方法就是改变量化系数。如果量化值放大,则有更多的系数值为0,提高了压缩比。3.5 Z形扫描游程编码DCT系数量化后,构成一个稀疏矩阵,用ZCZigzag)形扫描将其变成一维数列,将有利于游程编码。Z形扫描的顺序如图3-4。游程编码是一种统计编码,该编码属于无损压缩编码,是栅格数据压缩的重要编码方法。游程编码的基本原理是:用一个符号值或用长代替具有相同值的连续符号,使符号长度少于原始数据的长度。只在各行或者各

14、列数据的代码发生变化时,一次记录该代码及相同代码重复的个数,从而实现数据的压缩。游程编码运算简单,适用于机器存储容量小,数据需大量压缩,而又要避免复杂的编码和解码运算,增加处理和操作时间的情况。本设计中利用两个函数Run_length_coding_function.m和Run_length_decoding_function.m分别实现Z字形游程的编码解码。由于DCT变换后右下角频率高,左上角频率分量低。而人眼对高频成分识别小,对低频成分识别大。量化后0主要集中在右下方,于是Z字形扫描对于游程编码才有利。主要思路是将原矩阵的每个元素变化为用两个元素a,b表示,a表示在这个元素之前0的个数,b

15、表示这个元素是什么。当发现之后的多有元素都是0的时候用0,0作为结束标志。这样,只要矩阵中0的个数超过一半,编码后数据量就比原来小。由于在8*8中连续出现不为0的相同元素的儿率极小,因此运用游程编码的思想时只考虑出现的0的个数。4.运行结果及分析4. 1不同量化系数图像编解码效果比较量化系数quotiety:程序中是将Jpeg标准量化矩阵*quotiety作为真正的量化矩阵。quotiety取值为大于1的任意实数。下面以jpg格式图像为标准,取不同的量化系数quotiety进行比较,原始图像大小为84.8KB:原始图像图4-1原始图像恢复的图像图4-2quotiety=1时恢复图像此时压缩编码

16、文件为compressed_data大小为21.5KB。:翼)弱或,酒与恢复的图像图4-3quotiety=2时恢复图像此时压缩编码文件为compressed_data大小为14.6KB。恢复的图像图4-4quotiety=5时恢复图像此时压缩编码文件为compressed_data大小为9.00KB。恢复的图像图4-5quotiety=10时恢复图像此时压缩编码文件为compressed_data大小为5.85KB。结论:量化系数quotiety越大,压缩率越高,图像恢复的效果也越差。量化会产生误差,如果量化值放大,则有更多的灰度值变为0,能够提高压缩比。4.2不同文件类型图像编解码比较量化

17、系数quotiety都取5时,对不同文件类型的test图进行编解码原始图像图4-6原始图像卜面为jpg的test图编码的解码恢复图像恢复的图像图4-7jpg格式的恢复图像卜面为BMP的test图编码的解码恢复图像恢复的图像图4-8bmp格式的恢复图像卜面为PNG的test图编码的解码恢复图像恢复的图像图4-9PNG格式的恢复图像观察三个恢复图像,在原始图像相同的情况下,三种文件格式下编解码解码效果无太大差异。当量化系数quotiety取其他值时,三种文件格式编码解码效果也相同。由此可知,该系统可以用于JPGBMP.PNG等文件的压缩编码和解码,且编码解码效果相同。5 .总结本次信息处理系统综合

18、训练让我更熟悉地掌握MATLAB的功能,灵活运用MATLAB加强对MATLABj件图像处理的能力,掌握图像的离散余弦变换对图像进行压缩,以及游程编码等概念。在熟悉掌握MATLABE序和操作的同时培养了我的独立思考能力,钻研精神,解决问题能力和动手能力。虽然在此之前通过基础强化训练、但知道的只是最基本的的应用,对于理解。本次课程设计中通过查阅资料,有了更深的了解。我同时也认识到了运用国MATLABt件并完成简单图像操作,MATLAB图像处理上的应用,我完全没有阅读程序并读写程序对MATLABB像应用MATLA皿能并不只是图形的绘制及波形的处理,有着很多方面的运用,如绘制函数,处理音频、图像数据,

19、创建用户界面等功能,实为一个功能强大的软件。在课设过程中每每编写程序及操作时出现问题,我都会通过查阅资料,仔细检查解决问题,经过一次次的修改完善,才出现最终的最优结果。在这个过程中,面对问题不放弃不急躁,一次次改进,静下心来慢慢解决,并细致完善细节,从而能培养一种良好的学习心态和习惯。数据压缩技术的优劣主要是由压缩所能达到的压缩倍数、从压缩后的数据所能恢复的图像的质量和算法的复杂度、解码的速度等方面来衡量的。基于DCT的混合编码技术对于图像的压缩倍数可以达到几十倍甚至上百倍,而且重建的图像又具有较高的质量,因此得到广泛的应用。用MATLA眯实现离散余弦变换的图像压缩,具有方法简单、速度快、误差

20、小的优点,免去了大量的矩阵计算,大大提高了图像压缩的效率和精度。6 .参考文献1张秋臣.浅谈MATLA明析及UG的运动仿真期刊论文-锦绣,2013.04.2祝本明,刘桂华.一种改进的游程编码算法期刊论文-西南科技大学学报,2007.03.3 http:/w啊4 5杨杰,黄朝兵.数字图像处理及MATLA殴现.北京:电子工业出版社,2011.01;附录:MainMenu.mk=menu('请选择需要的功能,'图像压缩:'图像解压);switchkcase 1DCT_compress;Main_Menu;case 2IDCT_decompress;Main_Menu;endD

21、CT_compress.m%主要思想:%-读取图像文件%-分块DCT变换%-JPEG帛标准量化表量化%-Z字形游程编码%-存储压缩后的文件clearall;clc;globalquotiety;FileName,PathName,FilterIndex=uigetfile('*bmp;*jpg;*png','请选择要压缩的源图像');string=sprintf('%s%s',PathName,FileName);quotiety=inputdlg('系数越大压缩率越高,输入您需要的压缩系数:,1,111);h=waitbar(0,&qu

22、ot;正在压缩,请稍候');quotiety=str2num(cell2mat(quotiety);I=imread(string);I=rgb2gray(I);xmn=double(I);figure;imshow(I);title('原始图像');M,N=size(xmn);waitbar(1/4,h);Xpq=blkproc(xmn,88,'DCT2_function',8);%每一小块DCT变换waitbar(2/4,h);Xpq_estimate=blkproc(Xpq,88,'integral_function');%量化表量

23、化waitbar(3/4,h);waitbar(3/4,h);forindex1=1:1:M/8forindex2=1:1:N/8%对每一小块游程编码,结果存在cell数组Xpq_coded里Xpq_codedindex1,index2=int8(Run_length_coding_function(Xpq_estimate(8*(index1-1)+1:8*index1,8*(index2-1)+1:8*index2);endendwaitbar(4/4,h);close(h);uisave('Xpq_coded','quotiety','compre

24、ssed_data');%存储编码后的信息、量化系数figure;imshow(Xpq_estimate);title('压缩图像);DCT2_function.mfunctionXpq=DCT2_function(xmn,M)T=dctmtx(M);%产生二维DCT变换矩阵Xpq=T*xmn*T'integral_function.mfunctionXpq_estimate=integral_function(Xpq)integral_table=16,11,10,16,24,40,51,61;12,12,14,19,26,58,60,55;14,13,16,24,4

25、0,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;%量化矩阵globalquotiety;Xpq_estimate=int8(Xpq./(integral_table*quotiety);%此处的量化系数表示除以的Jpeg标准量化矩阵的倍数Run_length_coding_fuoctioo.m%由于DCT变换后右下角频率高,左上角频率分量低。而人眼对高频成分识别

26、小,对低频成分识别大%量化后0主要集中在右下方,于是Z字形扫描对于游程编码才有利%主要思想:原矩阵的每个元素变化为用两个元素a,b表示,a表示在这个元素之前0的个数,%b表示这个元素是什么。当发现之后的多有元素都是0的时候用【0,0】作为结束标志。functionXpq_coded=Run_length_coding_function(Xpq_estimate)table=1,1;1,2;2,1;3,1;2,2;1,3;1,4;2,3;3,2;4,1;5,1;4,2;3,3;2,4;1,5;1,6;2,5;3,4;4,3;5,2;6,1;7,1;6,2;5,3;4,4;3,5;2,6;1,7;

27、1,8;2,7;3,6;4,5;5,4;6,3;7,2;8,1;8,2;7,3;6,4;5,5;4,6;3,7;2,8;3,8;4,7;5,6;6,5;7,4;8,3;8,4;7,5;6,6;5,7;4,8;5,8;6,7;7,6;8,5;8,6;7,7;6,8;7,8;8,7;8,8;%64*2的矩阵,表明Z字形压缩的行走路径Xpq_coded=;%存储编码后的结果count=0;compress_index=1;forindex=1:1:64%扫描ifXpq_estimate(table(index,1),table(index,2)=0%如果遇到了0,那么下一个数字到来之前的0的个数就加

28、1count=count+1;else%如果遇到的不是0,那么Xpq_coded=(,)的第一个元素存储之前0的个数,第二个元素存储此时遇到的这个元素Xpq_coded(compress_index,1)=count;Xpq_coded(compress_index,2)=Xpq_estimate(table(index,1),table(index,2);count=0;%过去这个元素之后0的个数就要重新计compress_index=compress_index+1;endifcount=0Xpq_coded(compress_index,1)=0;Xpq_coded(compress_i

29、ndex,2)=0;endendIDCTdecompress.m%主要思想:%跟压缩过称恰好相反%一读取压缩文件%>z字形游程解码%>JPE甑准量化表反量化%一分块DCT变换%一存储解压后的文件c1earall;c1c;globalquotiety;uiload;1);h=waitbar(O,'正在解压,请稍候Xpq_decoded=Xpq_coded;clearXpq_coded;M,N=size(Xpq_decoded);waitbar(1/4,h);%游程解码得到Xpq_deestimateforindex1=1:1:Mforindex2=1:1:NXpq_deest

30、imate(8*(index1-1)+1:8*index1,8*(index2-1)+1:8*index2)=Run_length_decoding_function(Xpq_decodedindex1,index2);endendwaitbar(2/4,h);%反量化得到幅频值Xpq_resume=blkproc(Xpq_deestimate,88,'deintegral_function');waitbar(3/4,h);%DCT逆变换得到xmnxmn_resume=blkproc(Xpq_resume,88,'IDCT2_function',8);xmn_

31、resume=uint8(xmn_resume);waitbar(4/4,h);close(h);figure;imshow(xmn_resume);title('恢复的图像');IDCT2function.mfunctionxmn_resume=IDCT2_function(Xpq_resume,M)T=dctmtx(M);%生成变换矩阵xmn_resume=T'*Xpq_resume*T;%用变化矩阵的乘法代替效率极低的for求和循环deintegral_function.mfunctionXpq_resume=deintegral_function(Xpq_deestimate)integral_table=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

温馨提示

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

评论

0/150

提交评论