基于DCT变换的图像压缩编码

上传人:仙*** 文档编号:36565597 上传时间:2021-10-31 格式:DOC 页数:21 大小:709KB
收藏 版权申诉 举报 下载
基于DCT变换的图像压缩编码_第1页
第1页 / 共21页
基于DCT变换的图像压缩编码_第2页
第2页 / 共21页
基于DCT变换的图像压缩编码_第3页
第3页 / 共21页
资源描述:

《基于DCT变换的图像压缩编码》由会员分享,可在线阅读,更多相关《基于DCT变换的图像压缩编码(21页珍藏版)》请在装配图网上搜索。

1、电子线路设计与制作报告目录1.绪论12.设计任务22.1 任务描述22.2 技术指标23.设计原理33.1 原理框图33.2 程序流程图43.3 离散余弦变换53.4 量化63.4 Z形游程编码74.运行结果及分析84.1 不同量化系数图像编解码效果比较84.2 不同文件类型图像编解码比较105总结126参考文献13附录14信息处理系统综合训练报告1.绪论MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计

2、以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平1。随着信息技术的发展,图像信息被广泛应用于多媒体通信和计算机系统中,但是图像数据的一个显著特点就是信息量大。具有庞大的数据量,如果不经过压缩,不仅超出了计算机的存储和处理能力,而且在现有的通信信道的传输速率下,是无法完成大量多媒体信息实时传输的,因此,为了更有效的存储、处理和传输这些图像数据,必须对其进行压缩,因此有必要对图像压缩编码进行研究。由于组成图像的各像素之间,无论是在水平方向还是在垂直方向上都存在着一定的

3、相关性,因此只要应用某种图像压缩编码方法提取或者减少这种相关性, 就可以达到压缩数据的目的。数字图像包含的冗余信息一般有以下几种:空问冗余、时间冗余、信息熵冗余、统计冗余、结构冗余、视觉冗余以及知识冗余等。图像压缩算法就是要在保证图像一定的熏建质量的同时,尽可能多的去除这些冗余信息以达到对图像压缩的目的。随着科学技术的发展,图像压缩编码技术越来越引起人们的关注。所谓的图像压缩编码技术就是对要处理的图像数据按一定的规则进行变换和组合, 从而达到以尽可能少的数据流来表示尽可能多的数据信息。本设计基于DCT的JPEG、PNG、BMP等格式图像编解码设计算法进行研究,介绍了编码中DCT变换、量化、游程

4、编码等模块的原理和数学推导以及各模块的功能分析。最后应用MATLAB进行了实验仿真并分析结果得出结论。DCT变换后具有绝对的去相关性,并且变换后的矩阵从左上角到右下角频率规律的渐高。有损压缩方法利用了人类视觉对图像中的某些频率成分不敏感的特性,允许压缩过程中损失一定的信息;虽然不能完全恢复原始数据,但是所损失的部分对理解原始图像的影响较小,却换来了大得多的压缩比。因此舍弃高频分量保留低频分量的做法对于图像压缩具有绝对的优势。只要损失的数据不太影响人眼主观接收的效果,就可采用。DCT变换后的压缩此本设计采用经典的游程编码实现。2.设计任务2.1 任务描述基于DCT的图像编解码设计(1)获取图像;

5、(2)采用DCT实现对图像编解码设计;(3)分析编解码性能2.2 技术指标(1)可对JPEG、PNG、BMP等格式图像进行基于DCT的图像编解码;(2)为了便于分析比较,定义一个量化系数quotiety,越大压缩率越高。(3)压缩编码、量化系数统一写入存储文件compressed_data.mat,实现可移植解压。(4)观察压缩后图片大小,简便起见,分析只关心compressed_data.mat文件的大小。(5)实现DCT变换和反变换以及JPEG标准量化矩阵的量化、反量化。(6)根据DCT量化后矩阵特点,本设计编码采用Z字型扫描游程编码、解码。(7)DCT压缩前后比较,以及不同量化系数比较3

6、.设计原理3.1原理框图基于DCT的图像编码包括三个阶段:DCT变换、量化、编码。根据DCT量化后矩阵特点,本设计编码采用Z字型扫描游程编码、解码。 首先将输入图像颜色空间转换后分解为88大小的数据块,然后用正向二维DCT把每个块转变成64个DCT系数值,其中1个数值是直流(DC)系数,即88空域图像子块的平均值,其余的63个是交流(AC)系数,接下来对DCT系数进行量化,最后将变换得到的量化的DCT系数进行编码和传送,这样就完成了图像的压缩过程。原始图像数据DCT变换量化游程编码压缩图像数据量化表码表图3-1 编码过程基于DCT的图像编码包括三个阶段:译码、反量化、IDCT变换。在解码过程中

7、,形成压缩后的图像格式,先对已编码的量子化的DCT系数进行解码,然后求逆量化并把DCT系数转化为88样本像块(使用二维DCT反变换),最后将操作完成后的块组合成一个单一的图像。这样就完成了图像的解压过程。量化表压缩图像数据游程译码反量化IDCT变换恢复图像数据码表图3-2 解码过程3.2 程序流程图基于DCT的图像编解码设计的MATLAB实现的流程图如图3-3所示。开始输入图片输入量化系数分成8*8像素块,DCT变换输入量化表,对变换结果量化对量化结果进行扫描编码保存编码结果显示压缩图像打开编码文件反量化反DCT变换显示恢复图像结束图3-3 程序流程图3.3 离散余弦变换DCT变换利用傅立叶变

8、换的性质。采用图像边界褶翻将像变换为偶函数形式,然后对图像进行二维傅立叶变换,变换后仅包含余弦项,所以称之为离散余弦变换。DCT编码属于正交变换编码方式,用于去除图像数据的空间冗余。变换编码就是将图像光强矩阵(时域信号)变换到系数空间(频域信号)上进行处理的方法。在空间上具有强相关的信号,反映在频域上是在某些特定的区域内能量常常被集中在一起,或者是系数矩阵的分布具有某些规律。我们可以利用这些规律在频域上减少量化比特数,达到压缩的目的。图像经DCT变换以后,DCT系数之间的相关性就会变小。而且大部分能量集中在少数的系数上,因此,DCT变换在图像压缩中非常有用,是有损图像压缩国际标准JPEG的核心

9、。从原理上讲可以对整幅图像进行DCT变换,但由于图像各部位上细节的丰富程度不同,这种整体处理的方式效果不好。为此,发送者首先将输入图像分解为8*8或16*16块,然后再对每个图像块进行二维DCT变换,接着再对DCT系数进行量化、编码和传输;接收者通过对量化的DCT系数进行解码,并对每个图像块进行的二维DCT反变换。最后将操作完成后所有的块拼接起来构成一幅单一的图像。对于一般的图像而言,大多数DCT系数值都接近于0,所以去掉这些系数不会对重建图像的质量产生较大影响。因此,利用DCT进行图像压缩确实可以节约大量的存储空间。在实验中,先将输入的原始图像分为8*8的小块,然后再对每个块进行二维DCT变

10、换。二维离散余弦变换可以写成矩阵式(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)的转置5。设计中2维DCT变换函数代码如下:function Xpq=DCT2_function(xmn,M)T=dctmtx(M); %产生二维DCT变换矩阵Xpq=T*xmn*T;设计中2维IDCT变换函数代码如下:function xmn_resume=IDCT2_function(Xpq_resume,M)T=dctmtx(M); %生成变换矩阵xmn_resum

11、e=T*Xpq_resume*T; % 用变化矩阵的乘法代替效率极低的for求和循环3.4 量化在DCT处理中得到的64个数据中,低频分量包含了图像亮度等主要信息。在从空间域到频域的变换中,图像中的缓慢变化比快速变化更易引起人眼的注意, 所以在重建图像时,低频分量的重要性高于高频分量。因而在编码时可以忽略高频分量,即减小非“0”系数的幅度以及增加“0”值系数的数目,从而达到压缩的目的,这也是量化的根据和目的,也是图像质量下降的最主要原因。在JPEG标准中,用具有64个独立元素的量化表来规定DCT域中相应的64个系数的量化精度,使得对某个系数的具体量化阶取决于人眼对该频率分量的视觉敏感程度。理论

12、上,对不同的空间分辨率、数据精度等情况,应该有不同的量化表。不过,一般采用下图所示的量化表,可取得较好的视觉效果。量化化就是用DCT变换后的系数除以量化表中相对应的量化阶后四舍五入取整。由于量化表中左上角的值较小,而右下角的值较大, 因而起到了保持低频分量、 抑制高频分量的作用。 为了便于分析比较,定义一个量化系数quotiety,越大压缩率越高。量化系数quotiety:程序中是将JPEG标准量化矩阵* quotiety作为真正的量化矩阵。quotiety取值为大于1的任意实数。本设计中利用函数integral_function.m和deintegral_function实现量化和反量化。图

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

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

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

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

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

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

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

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

21、in_Menu;endDCT_compress.m%主要思想:%-读取图像文件%-分块DCT变换%-Jpeg标准量化表量化%-Z字形游程编码%-存储压缩后的文件clear all;clc;global quotiety;FileName,PathName,FilterIndex=uigetfile(*.bmp;*.jpg;*.png,请选择要压缩的源图像);string=sprintf(%s%s,PathName,FileName);quotiety=inputdlg(系数越大压缩率越高,输入您需要的压缩系数:,1,1);h=waitbar(0,正在压缩,请稍候 );quotiety=str2

22、num(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,8 8,DCT2_function,8); % 每一小块DCT变换waitbar(2/4,h);Xpq_estimate=blkproc(Xpq,8 8,integral_function); %量化表量化waitbar(3/4,h);for index1=1:1:M/8 for index2=1:1:N/8 %对

23、每一小块游程编码,结果存在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,compressed_data); %存储编码后的信息、量化系数figure;imshow(Xpq_estimate);title(压缩图像);DCT2_function.mfunction

24、 Xpq=DCT2_function(xmn,M)T=dctmtx(M); %产生二维DCT变换矩阵Xpq=T*xmn*T;intergral_function.mfunction Xpq_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,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

25、,78,87,103,121,120,101; 72,92,95,98,112,100,103,99; %量化矩阵global quotietyXpq_estimate=int8(Xpq./(integral_table*quotiety); %此处的量化系数表示除以的Jpeg标准量化矩阵的倍数Run_length_coding_function.m%由于DCT变换后右下角频率高,左上角频率分量低。而人眼对高频成分识别小,对低频成分识别大%量化后0主要集中在右下方,于是Z字形扫描对于游程编码才有利%主要思想:原矩阵的每个元素变化为用两个元素【a,b】表示,a表示在这个元素之前0的个数, % b

26、表示这个元素是什么。当发现之后的多有元素都是0的时候用【0,0】作为结束标志。function Xpq_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;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

27、; 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;for index=1:1:64 %扫描 if Xpq_estimate(table(index,1),table(index,2)=0 %如果遇到了0,那么下一个数字到来之前的0的个数就加1 count=count+1; else %如果遇到的不是0,那么Xpq_coded=(,)的第一个元素存储之前0的个数,第二个元素存储此时

28、遇到的这个元素 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; end if count=0 Xpq_coded(compress_index,1)=0; Xpq_coded(compress_index,2)=0; endendIDCT_decompress.m%主要思想:%跟压缩过称恰好相反%-读取压缩文件

29、%-Z字形游程解码%-Jpeg标准量化表反量化%-分块DCT变换%-存储解压后的文件clear all;clc;global quotiety;uiload;h=waitbar(0,正在解压,请稍候 );Xpq_decoded=Xpq_coded;clear Xpq_coded;M,N=size(Xpq_decoded);waitbar(1/4,h);%游程解码得到Xpq_deestimatefor index1=1:1:M for index2=1:1:N Xpq_deestimate(8*(index1-1)+1:8*index1,8*(index2-1)+1:8*index2)=Run_

30、length_decoding_function(Xpq_decodedindex1,index2); endendwaitbar(2/4,h);%反量化得到幅频值Xpq_resume=blkproc(Xpq_deestimate,8 8,deintegral_function);waitbar(3/4,h);%DCT逆变换得到xmnxmn_resume=blkproc(Xpq_resume,8 8,IDCT2_function,8);xmn_resume=uint8(xmn_resume);waitbar(4/4,h);close(h);figure;imshow(xmn_resume);t

31、itle(恢复的图像);IDCT2_function.mfunction xmn_resume=IDCT2_function(Xpq_resume,M)T=dctmtx(M); %生成变换矩阵xmn_resume=T*Xpq_resume*T; % 用变化矩阵的乘法代替效率极低的for求和循环deintegral_function.mfunction Xpq_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,

32、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; global quotiety; Xpq_resume=Xpq_deestimate.*integral_table*quotiety;%反量化恢复的过程要考虑到量化系数quotiety的影响Run_length_decoding_function.m%与Run_length_coding_funct

33、ion完全相逆的过程解码,此处不再赘述function Xpq_deestimate=Run_length_decoding_function(Xpq_decoded)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;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;

34、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;cols,tmp=size(Xpq_decoded); Xpq_deestimate(1:8,1:8)=0;decompress_index=1;for index=1:1:cols if Xpq_decoded(index,2)=0 elseif Xpq_decoded(index,1)=0 Xpq_deestimate(table(decompress_index,1),table(decompress_index,2)=Xpq_decoded(index,2); decompress_index=decompress_index+1; else decompress_index=decompress_index+Xpq_decoded(index,1); Xpq_deestimate(table(decompress_index,1),table(decompress_index,2)=Xpq_decoded(index,2); decompress_index=decompress_index+1; endend

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!