毕业设计(论文)-DCT快速算法分析及在图像压缩编码中的应用.doc

上传人:来看看 文档编号:3945395 上传时间:2019-10-10 格式:DOC 页数:27 大小:183.50KB
返回 下载 相关 举报
毕业设计(论文)-DCT快速算法分析及在图像压缩编码中的应用.doc_第1页
第1页 / 共27页
毕业设计(论文)-DCT快速算法分析及在图像压缩编码中的应用.doc_第2页
第2页 / 共27页
毕业设计(论文)-DCT快速算法分析及在图像压缩编码中的应用.doc_第3页
第3页 / 共27页
毕业设计(论文)-DCT快速算法分析及在图像压缩编码中的应用.doc_第4页
第4页 / 共27页
毕业设计(论文)-DCT快速算法分析及在图像压缩编码中的应用.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《毕业设计(论文)-DCT快速算法分析及在图像压缩编码中的应用.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)-DCT快速算法分析及在图像压缩编码中的应用.doc(27页珍藏版)》请在三一文库上搜索。

1、DCT快速算法分析及在图像压缩编码中的应用Application of DCT Fast Algorithm Analyse in Image Compression Code专 业: 电子信息科学与技术学 号: 03111230姓 名: 指导教师: II 目录内容摘要IAbstractII第一章 离散余弦变换11.1 引言11.2 离散余弦变换定义11.3 DCT的算法21.4 DCT快速算法的研究2第二章 图像压缩编码的综述42.1 图象压缩的目的和方法42.2 图象压缩的目的42.3 图象压缩的几种方法42.4.自适应编码6第三章 JPEG编码算法73.1 JPEG压缩编码基础73.2

2、JPEG算法于JPEG小组简介73.3 JPEG压缩83.4 JPEG中的二维DCT83.5 DCT的实现9第四章 压缩过程124.1 DCT的输出124.2 量化124.3量化的算法描述124.4 量化矩阵的选择134.5 编码144.6 ZigZag序列144.7 熵编码16结束语19参 考 文 献20致谢21襄樊学院毕业论文(设计)内容摘要本文主要介绍两个方面:DCT快速算法和图像压缩编码。首先介绍离散余弦变换的定义及其变换方法,并介绍离散余弦变换的几种快速算法,提出六种离散余弦变换的快速算法. 其次讲述图像压缩(JPEG)的目的和编码算法的基本原理,分析图象压缩编码的几种应用方法,着重

3、说明DCT算法在图象压缩中的广泛应用。以及离散余弦变换(DCT)算法在图像压缩编码中的实现过程。利用离散余弦变换的某些特点去减少搜索块的数目和缩小搜索块的范围两方面减少分形图像的编码时间。为了减少对图像的质量影响,对于编码恢复的图像采用了图像平滑的处理方式减少块效应并提出最恰当一种快速算法应用于图像压缩编码中。还介绍了在图象压缩过程中的离散余弦变换、量化和编码三个重要步骤的实现原理。关键词:离散余弦变换, 图像压缩编码,快速算法,量化AbstractIn this article, the author mainly introduces two aspects: DCT fast algor

4、ithm and image compression code. First this paper explains the definition of discrete cosine transformation and the transformation method, and then introduces several kinds of fast and discrete cosine transformation and research, proposes six kinds of discrete cosine transformations fast algorithm .

5、Second, the goal of image compression (JPEG) and the code algorithm basic on principle has been presented, with the method of image compression applications being analyzed, the widespread using of DCT in image compression, as well as discrete cosine transformation (DCT) algorithm implement process i

6、n image compression code being emphasized. The picture code processing time can be reduced in two ways, by reducing the search block number and by reducing search block scope respectively. In order to avoid some influence on the picture quality , the most appropriate solution of picture smooth proce

7、ssing, has been proposed to reduce the influence. Also three important steps the realization principles of discrete cosine transformation and quantification and codes in the image process are introduced.Keywords: Discrete cosine transformation, Image compression coding, Fast algorithm, Quantificatio

8、n22 第一章 离散余弦变换1.1 引言图像压缩编码技术是现代多媒体及通信领域中的关键技术之一。目前已出现了多种压缩技术并制定了相应的国际标准。离散余弦变换(DCT)是许多图像编码国际标准的核心。 但传统的DCT变换存在一些明显的缺点,如编码时间解码时间较长和“块效应”明显等。对此,本文结合DCT变换的特性,利用分形的Peano-hilbert扫描曲线,对基于DCT变换的图像编码方法进行了研究,并提出了改进方法。主要工作分为两个部分: 一是在分块DCT基础上的改进。对分块后生成的各图像块矩阵,不直接作二维DCT变换,而是先进行扫描,使之重排成一维向量,再进行一维DCT变换,这样可以减少运算量。

9、 其次是对层次余弦变换编码部分的改进。使用层次DCT变换与零树编码相结合的方法,并在扫描编码过程中,按Peano-hilbert扫描顺序进行编码。这样不仅可以减少“块效应”,而且可以加快编码速度。 文章通过对实际图像的压缩编码,将改进的方法和传统方法的编码性能进行了比较。结果表明,使用改进后的方法,不仅可以获得较好的图像压缩效果,而且还可以减少运算次数,缩短编、解码时间。1.2 离散余弦变换定义离散余弦变换(Discrete Cosine Transform,简称DCT变换)是一种与傅立叶变换紧密相关的数学运算。在傅立叶级数展开式中,如果被展开的函数是实偶函数,那么其傅立叶级数中只包含余弦项,

10、再将其离散化可导出余弦变换,因此称之为离散余弦变换。 离散余弦变换(DCT)是N.Ahmed等人在1974年提出的正交变换方法。它常被认为是对和图像信号进行变换的最佳方法。为了工程上实现的需要,国内外许多学者花费了很大精力去寻找或改进离散余弦变换的快速算法。由于近年来数字信号处理芯片(DSP)的发展,加上专用集成电路设计上的优势,这就牢固地确立离散余弦变换(DCT)在目前图像编码中的重要地位,成为H.261、JPEG、MPEG 等国际上公用的编码标准的重要环节。在视频压缩编码中,最常用的变换方法是DCT,DCT被认为是性能接近K-L变换的准最佳变换,变换编码的主要特点有:1. 在变换域里视频图

11、像要比空间域里简单。 2. 视频图像的相关性明显下降,信号的能量主要集中在少数几个变换系数上,采用量化和熵编码可有效地压缩其数据。 3. 具有较强的抗干扰能力,传输过程中的误码对图像质量的影响远小于预测编码通常,对高质量的图像,DMCP要求信道误码率 ,而变换编码仅要求信道误码率 。 DCT等变换有快速算法,能实现实时视频压缩。针对目前采用的帧内编码加运动补偿的视频压缩方法的不足, 我们在Westwater 等人提出三维视频编码的基础上, 将三维变换的结构应用于视频图像压缩, 进一步实现了新的视频图像序列的编码方法。离散余弦变换DCT(Discrete Cosine Transform)是数码

12、率压缩需要常用的一个变换编码方法。任何连续的实对称函数的傅立叶变换中只含余弦项,因此余弦变换与付立叶变换一样有明确的物理意义。DCT是先将整体图像分成N*N像素块,然后对N*N像素块逐一进行DCT变换。由于大多数图像的高频分量较小,相应于图像高频分量的系数经常为零,加上人眼对高频成分的失真不太敏感,所以可用更粗的量化。因此,传送变换系数的数码率要大大小于传送图像像素所用的数码率。到达接收端后通过反离散余弦变换回到样值,虽然会有一定的失真,但人眼是可以接受的。1.3 DCT的算法DCT是数字图像处理中重要的变换,很多重要的图像算法、图像应用都是基于DCT变换的,如JPEG图像编码方式。对于大尺寸

13、的二维数值矩阵,倘若采用普通的DCT变换来进行,其所花费的时间将是让人难以忍受甚至无法达到实用。而要克服这一难点,DCT变换的快速算法无非是非常吸引人的。就目前而言,DCT变换的快速算法无非有以下两种方式:1 由于FFT算法的普便采用,直接利用FFT来实现DCT变换的快速算法相比来说就相对容易。但是此种方法也有不足:计算过程会涉及到复数的运算。由于 DCT变换前后的数据都是实数,计算过程中引入复数,而一对复数的加法相当于两对实数的加法,一对复数的乘法相当于四对实数的乘法和两对实数的加法,显然是增加了运算量,也给硬件存储提出了更高的要求。2直接在实数域进行DCT快速变换。1.4 DCT快速算法的

14、研究离散余弦变换DCT的快速算法及滤波器实现结构,子波变换域图像门槛降噪。离散余弦变换是广泛应用于信号处理、图像处理领域的重要工具之一,已经被多个国际标准所接受,如JPEG、MPEG、H.263等。DCT应用到实际系统中的前提是具有能够快速实现的算法,自从1977第一个真正的DCT快速算法出现以来,寻求更快、更规则、更简单的DCT快速算法一直是信号处理领域的一个研究方向。论文针对应用中对DCT长度的各种需要,研究DCT的快速算法和适用于硬件和并行处理的滤波器结构。取得的主要进展有: 1提出了一种用循环卷积实现的素长度DCT快速新算法,算法具有规则的实现结构,与现有算法相比具有更低的运算复杂性,

15、算法不仅适用于软件实现,而且适用于硬件实现。 2提出了一种非常高效率的44二维DCT算法,并将其作为核心模块构造在各种矩形二维DCT计算中。实验表明,新算法比行列法快4倍。 3根据DCT变换的某些数学特性,推导并提出了一种将NN(N=2n)二维DCT转化为N个N点一维DCT计算的快速算法。 4提出了一种新的qm长度DCT的基q递归分解算法。根据数论关于数的分解定理,提出了一种新的任意复合长度DCT的快速算法。 5利用特别设计的快速多项式变换算法和RDFT(reduced DFT)算法,提出了计算qnqm(q为奇素数,m、n为任意整数)二维DCT的快速算法。 6根据硬件实现DCT的需要,研究了各

16、种长度的DCT用数字滤波器实现的结构。提出:(1) 素长度DCT的二阶递归滤波器结构;(2) 2N长度DCT并行处理一阶递归滤波器结构;(3) 任意长度DCT的二阶递归滤波器结构。以上各种新型算法都是目前适应于图象压缩编码中应用最广泛的算法。第二章 图像压缩编码的综述2.1 图象压缩的目的和方法图象的数字化表示使得图象信号可以高质量地传输,并便于图像的检索、分析、处理和存储。但是数字图像的表示需要大量的数据,必须进行数据的压缩。即使采用多种方法对数据进行了压缩,其数据量仍然巨大,对传输介质、传输方法和存储介质的要求较高。因此图象压缩编码技术的研究显得特别有意义,也正是由于图象压缩编码技术及传输

17、技术的不断发展、更新,推动了现代多媒体技术应用的迅速发展。2.2 图象压缩的目的图象采样后,如果对之进行简单的8bit量化和PCM编码,其数据量是巨大的。以CIF(Common Intermediate Format)格式的彩色视频信号为例,若采样速率为25帧/秒,采样样点的Y、U、V分量均为8bit量化,则一秒钟的数据量为: 352288382560.83Mbit要传输或存储这样大的数据量是非常困难的,必需对其进行压缩编码,在满足实际需要的前提下,尽量减少要传输或存储的数据量。虽然数字图象的数据量巨大,但图象数据是高度相关的。一幅图象的内部相邻象素之间,相邻行之间的视频序列中相邻图象之间有大

18、量冗余信息空间相关性和时间相关性,可以使用各种方法尽量去除这些冗余信息,减少图象的数据量。除了时间冗余和空间冗余外,在一般的图象数据中还存在信息熵冗余、结构冗余、知识冗余和视觉冗余。各种冗余就是压缩图象数据的出发点。图象编码的目的就在于采用各种方法去除冗余,以尽量少的数据量来表示个重建图象。2.3 图象压缩的几种方法231. 统计和字典的压缩方法常规程序和计算机熵的数据对于那些基于利用统计变种的压缩,效果很好,这些统计变种表现在单个符号的频率以及符号或短语字符串的频率等方面,而基于字典的系统实际山就是假扮统计程序。可是遗憾的是,这类压缩对于连续色调图象的作用并不很好。这些程序的主要问题产生于这

19、样的一个事实:照片图象的象素广泛地分布在整个范围。如果将图象中的彩色用频率分布画出,那么频率分布图中,没有我们在统计压缩的成功的情况下所看到的“尖峰”状,实际上,如果延长这个分布图,那么从类似于电视那样的生活图象源中得出的分布图会趋于平展。这意味着,每个象素代码彼此是大约相同的出现机会,决定不存在挖掘熵差的任何机会。基于字典的压缩程序的运行也有类似的问题,基于扫描照片的图象决定没有任何类型的数据特征以产生相同的短语的多次出现。例如,一个栅格化的图象,类似房子墙边的垂直部分,在图片的许多连续的行中可能可以给出相似的字符串。但不幸的是,由于真实世界是变化多端的,每行中的相同的性能将彼此地略有不同,

20、对于20个象素的一个字符串,其中的一两个象素会因扫描而彼此出现一步长的变化,虽然这些不同点小到人眼不能探测或对人眼不起作用,但他们毕竟妨碍了基于字典压缩的工作,对于这类压缩方法来说,字符串必须严格匹配,由于小的变化,而使匹配的字符串长度趋于很小,这就限制了压缩的效率。232. 有损压缩类似于音频数据,图形图象也同样有一个比常规计算机数据文件优越的地方:在压缩/扩展的循环中,他们可以被略微改动,而不会影响用户的立即质量。如果仔细修改,那么各处象素的精确灰度可以完全不被注意地进行小的改变。由于计算机栅的图形图象通常来自对真实世界源的扫描,所有他们通常表达一个已经不完美的照片的表达或是不完美的其他打

21、印接着的表达。没有改变图象基本性能的有损压缩程序应该是可行的。假设图形图象的有损压缩是可能的,那么它是如何实现的呢?研究人员最初试验了用于语音信号的同样的技术,如差分编码和自适应编码,虽然这些技术对图象有帮助,但并没有达到所希望的那么好,原因之一是音频数据和视频数据根本不同。用常规格式采样的音频数据是趋于反复的,声音,包括讲话,是由每次几秒的重复的正弦波组成的。虽然计算机上DAC的输入流可能由许多不同的频率叠加在一起而成,但是正弦波通常产生反复的波形。音频反复的本性自然使他利于压缩,线性预言编码和自适应差分脉冲编码调制等技术就利于了这一点,因此将音频数据流压缩了50到95。但开始研究图形压缩时

22、,人们也试图用相似的技术压缩数字化的图象,取得了一些成功。最初,研究人员进行栅格化数据流的压缩,如显示在电视机栅的数据。图形数据栅格化时,图形显示成一个象素流,每次一行地显示在屏幕上,从左到右,从上到下。这样,当完成一行时,图片的一个细片就画出了,直到整个屏幕填满。数字化时,象素可以使用从1位到24位,如今的琢磨图形常常使用8位来定义一个象素。233. 差分调制差分调制依赖余模拟数据趋于“平缓的变化,信号幅度撒谎那个的大的跳变是例外,而不是常规。在音频数据中,只要信号的采样率一定程度地高于信息本身的最大的频率分量,那么大的跳变就不会产生。音频信号的差分调制通过编码一个样点与前一个样点的不同来利

23、用这一个特点。例如,如果单频样点位8位,差分编码系统可能用4位来编码样点之差,这就将输入数据压缩了50。这种压缩方法中所产生的损失是来自于:使用标准的差分方法不可能总是精确地编码。信号的增长可能快于比编码的允许,或者,编码可能太粗而不能容纳下的差别,差分编码的有损性可以很好的处理,以产生出好的信号。当压缩图形数据时,差分调制有很多问题。首先,图形中的象素依赖于平缓的增加或减少时不可靠的,一幅图中不同的分量间的明显界限时常有的事情。这意味着,使用差分编码的系统需要接受样点间的大的不同和小的不同。这就限制了压缩的效率。带有数据长结构的许多图象可以压缩的很好。长结构中的象素,彼此之间没有什么差别或差

24、别很少;但时,带有突变部分的那些图象不可能压缩的很好。通常,图形图象的差分的编码似乎不产生非常强于最好的无损算法的压缩结果,他当然也不会产生所需要的、对压缩的数量级上的改进。2.4.自适应编码自适应编码(常常于差分编码一同使用)根据前面看到的一些象素而对将要到来的一些象素的信息做预言。例如,如果一幅灰度级照片中的最新的十个象素的值都在45到50之间,那么自适应压缩系统可能预言,下一个象素很大可能也在这个范围中,之后,类似于霍夫曼或算术编码那样的基于熵的编码方案可能给将来到来的各种代码赋以概率值。可以代替地使用压缩扩展方法,将最细的粒度赋给最接近预言猜测的范围。第三章 JPEG编码算法3.1 J

25、PEG压缩编码基础七十年代末八十年代初,研究工作开始着眼于新的图像压缩类型,希望能够大大地优于前面所讨论过的那些非常一般的压缩技术。到八十年代末,开始可为桌面系统的图像处理而寻找应用的工作,大多是是为UNIX和Macintosh工作站加入的协处理器卡的形式,这些卡的图象质量没有任何可见退化的情况下,可以以95的比率执行图像的有损压缩。同时,另一部分人开始发展一个国际标准,它能够包括这些新的压缩的种类。如果标准允许方便的图形格式的互换,那么,显然,对于各方面都是有利的,关于标准化工作,早期的担心是:它会限制进一步革新的可能性。两个标准化组织,CCITT和ISO,分别从涉及图像压缩的工业和学术两个

26、入手,并且,似乎已经潜在的阻止了工作的负结果。3.2 JPEG算法于JPEG小组简介JPEG(Joint Photographic Experts Group)是由 ISO/IEC JTC1/SC2/WG8和CCITT VIII/NIC于1986年底联合组成的专家小组。JPEG小组的工组事研究具有连续色调的图像(包括灰度及彩色图像)的压缩算法,并将其制定为适用于大多数图像存储及通信局设备的标准算法,JPEG小组于1990年提出JPEG算法的建议,并决定对建议中的算法不再修改,除非发现了危害压缩算法标准的问题。作为静态图像压缩的标准算法,JPEG算法必须满足以下要求:算法独立于图像的分辨率;具有

27、低于1bit/象素的编码率,并且能够在五秒钟内建立图像,以满足实时要求;在压缩比大约是2的情况下能够无失真地恢复原图像;支持顺序编解码和渐进编解码;以及对各种图像成分及数据精度的自适应能力;最后,要求编解码设备简单易实现。JPEG中允许四种编解码模式:(1)基于DCT的顺序模式(sequential DCT-based)(2)基于DCT的渐进模式(progressive DCT-based)(3)无失真模式(Lossless)(4)层次模式(hierarchical).其中,(1)和(2)是基于DCT的有损压缩;(3)是基于线性预测的无损压缩;(4)可以是DCT与线性预测的分层混合。JPEG算

28、法可分为基本JPEG和扩展,即Baseline System 与Extended System。在Baseline System中生成的编码文件,在Extended System中一定可以正确解码。3.3 JPEG压缩JPEG有损压缩算法在三个成功的阶段中操作,见下表1表1DCT Coefficient Lossless Transformation Quantization Compression 这三个步骤形成了一个强有力的压缩器。,可以将连续色调图像压缩到少于原大小的10,同时丢失很少的原始逼真度。3.4 JPEG中的二维DCT本文所讨论的压缩过程的关键是被称为离散余弦变换(Discre

29、te Cosine Transform,DCT)的数学变换。Baseline System中的DCT要求输入数据是一个88的矩阵,且每个矩阵元素具有8bit精度,分为从128到127,故DCT变换前,象素值先要减去128。所谓88的二维DCT是指将88的象素值矩阵变换成88系数矩阵。88象素值矩阵是由输入图像分块得到的,若图像的高或宽不是8的整数倍,必须扩展其下边或右边到8的整数倍。下面给出了二维DCT的实用公式。下面是反离散余弦变化(IDCT)公式。式中表示的是88个象素值的矩阵进行计算的,产生出88频率系数的矩阵。88的DCT及IDCT 公式如下: (3-1) (3-2)其中: C(u)=

30、 u=0 C(u)=1 u0 C(v)= v=0C(v)=1 v0 f(i,j):像素值,-128 f(i,j) 127F(x,y)= (3-3)C()=当=0C()=1,当=1,2,7这个公式初看起来让人害怕,但它可以用相当直接的代码段来表示。for ( i = 0 ; i 8 ; i + + )for ( j = 0 ;j 8 : j + + )temp 0.0;for ( x = 0 ; x 8 ; x + )for ( y = 0 ; y 0 ; (3-5) 一旦建立了余弦变换矩阵,我们绕着它的主对角线旋转,将其转置,这个转置矩阵在代码中表示,称作转置余弦变换矩阵。矩阵的建立只需在程序

31、初始化时进行一次,两个矩阵可以用相对短小的循环在同一时刻建立。见下面的代码:for ( j = 0 ;j N;j +)C 0 j = 1.0 / sqrt (N);Ct j 0 = C 0 j ;for ( i = 1 ;i N; i +)for ( j = 0; j N ;j +) C i j = sqrt ( 2.0/N )*cos( ( 2* j + 1 ) * i * pi / ( 2.0 * N ) ;Ct j i = C i j ;一旦这两个矩阵建立,我们就可以使用DCT函数的替代定义: DCT = C * 象素 * Ct (3-6)在这个等式中,“*”运算符表示的事矩阵相乘,而不

32、是一般的算术相乘。等式中的每个因子是一个N*N的矩阵,在JPEG算法以及本章所只用的程序中,矩阵为88。进行两个矩阵相乘时,输出矩阵中每个元素的运算代价时N个乘法操作和N个加法操作,由于我们用两个矩阵相乘来建立DCT矩阵,在变换后的DCT矩阵中的每个元素都是用2N个乘法和加大建立起来的,这一点,大大地改进了前面使用嵌套循环的DCT定义。/ * MatrixMultiply( temp , input , Ct )*/for ( i = 0 ; i N; i + )for ( j = 0 ;j N ; j + ) temp i j = 0.0for ( k = 0 ; k N ; k + )te

33、mp i j + = ( pixel i k * Ct k j ;/ * MatrixMultiply( output ,C, temp ); */for ( i = 0 ; i N ; i + ) for ( j = 0 ; j N ; j + ) temp1 = 0.0;for ( k = 0 ; k N ; k + )temp1 + = C i j * temp k j ;DCT i j = temp1 ;上面显示的是通过矩阵运算实现DCT的简单代码片段。值得注意的是,代码中主要是两个三层的嵌套循环,第一个三层嵌套循环是用输入的象素序列于转置余弦变换矩阵相乘,产生临时矩阵;之后,在第二个

34、三层嵌套循环中,临时矩阵于余弦变换矩阵相乘,产生输出的DCT矩阵。第四章 压缩过程4.1 DCT的输出由输入的象素值矩阵及输出的DCT矩阵可已经看出DCT所建立的频谱压缩特性。“直流系数”位于矩阵左上角的位置,这个表示的是输入矩阵的所有幅度的一个平均,它代表了X和Y坐标轴上的DC分量,而且直流系数要比DCT矩阵中任意值都打至少一个数量级。另外,在DCT矩阵中有一个通常的趋势,随着元素离直流系数越来越远,这些元素的幅度上也变的越来越小。这意味着,通过在输入数据中执行DCT,我们已经将图像的表达集中在输出矩阵的左上角的系数上,而DCT矩阵的右下角部分所包含的是没有用的信息。也很有利于数据的压缩。4

35、.2 量化由图21可知JPEG压缩过程分为三个步骤。第一步是DCT变换,这是一个无损压缩变换,它实际上并不实现压缩,是“有损”的准备,即为“量化”处理阶段做准备。DCT输出矩阵比原始象素矩阵占有更多的存贮空间,DCT函数的输入包括8位象素值,但输出值的范围从1024到1023,占用11位,因此,为使DCT矩阵占用较少空间,就需要做些事情。减少DCT矩阵存贮位数的行为称为“量化”(Quantization)。量化只不过是通过减少整数单精度来减少存贮整数值所需要的位数第一个过程。一旦DCT图像压缩,我们可以随着原理原点处的直流系数越来越多的减少系数的精度:离(0,0)点越远,这个元素对于图形图像的

36、贡献就越小,所有我们就越不用注意去维持这个值的精确精度。4.3量化的算法描述JPEG算法使用量化矩阵(Quantization Matrix)来实现量化。对于DCT矩阵中的每个元素位置,两个矩阵中的相应位置给出了一个量子值(Quantum Value),量子值指示出图像压缩时元素的步长大小是多少,其范围是1到255。与图像关系最密切的元素用小步长编码,大小为1表示最高精度。随着我们从原点移开,值将变得较高,量化的实际公式相当简单: 量化后的值(i, j) 圆整成最近的整数 (4-1)从公式中可以清楚地看到,大于25或50的量化值可能可以保证素有高频分量实际上将近似到0,只有高频系数达到不寻常大

37、值,才会编码成非0。译码时,逆量化公式为:DCT(i, j) 量化后的值(i,j)*量子(i, j) (4-2)4.4 量化矩阵的选择显然有许多方法可以用来定义两个矩阵中的值,至少有两个试验途径可以测试不同的量化方案。一个是在图像还原以后,测量输入输出图像之间的数学误差;第二个途径试图用人眼来判断还原的结果,它与误差方面的数学差别不可能总是绝对一致。由于量化矩阵可以定义在压缩进行的运行时间,所以JPEG允许使用任何量化矩阵。在运行时间选择量化矩阵的好处之一是在被压缩的图形使用JPEG算法时可以相当简单地“打入”图像的质量值。可以基于突袭拿过需要和存贮容量来选择图像质量。下面的程序所提供的用于测

38、试代码的量化表是使用非常简单的算法卷里起来的。要确定量子步长大小的值,用户输入一个单个的“质量因子”(quality factor),它的范围为1到25。大于25的值是可以工作的,但是值为25时,图像质量已经退化得很厉害,所以任何进一步的实验都是无意义的。for ( i = 0 ; i N ; i + )for ( j = 0 ; j N ; j + )Quantum i j = 1 + ( 1 + i + j ) * quality ) ;质量等级设置了彼此相邻的相同量化水平带的不同,这些量化水平带是面向横贯矩阵的对角线。所以,一个值的量化水平都与原点有大约相同的距离。由配置的结果看,位置(

39、7,7)处的DCT系数值为16,编码成非零值,在元素值为图像提供任何有意义的信息之前,它为该元素值设定了界限,任何此界限一下的贡献都被扔掉。这就是算法中发生“有损”效果的地方。DCT的第一个步骤中除了数学精度损失外没有任何损失,并且量化之后的步骤也是无所的编码过程,所以我们有机会丢掉数据的唯一地方就在这儿。由将DCT矩阵量化后的量化结果来看,量化/逆量化周期有明显的压缩效果,矩阵的高频部分已大部分截成0,消除了在被还原图像中的影响,矩阵中接近直流系数的系数可能被修改,但与原系数相比修改不大。下图即为量化前和逆量化后的DCT矩阵的结果。程序如下:DCT Matrix before 92 3 -9

40、 -7 3 -1 0 2Quantization -39 -58 12 17 -2 2 4 2 -84 62 1 -18 3 4 -5 5 -52 -36 -10 14 -10 4 -2 0 -86 -40 49 -7 17 -6 -2 5 -62 65 -12 -2 3 -8 -2 0 -17 14 -36 17 -11 3 3 -1 -54 32 -9 -9 22 0 1 3DCT Matrix after 90 0 -7 0 0 0 0 0Dequantization -35 -56 9 11 0 0 0 0 -84 54 0 -13 0 0 0 0 -45 -33 0 0 0 0 0

41、0 -77 -39 45 0 0 0 0 0 -52 60 0 0 0 0 0 0 -15 0 -19 0 0 0 0 0 -51 19 0 0 0 0 0 04.5 编码JPEG过程的最后步骤湿编码量化了的图像。JPEG的编码阶段由压缩图像的三个不同步骤组成。(1)第一步是将(0,0)处的直流系数由绝对值变为相对值,因为图像中相邻的块表现出了高度的相关。用与前一个直流元素的差来编码直流元素,就回产生一个非常小的数值。(2)第二步是将图像系数安排成“zig-zag”序列。(3)最后一步是用两种不同的机制编码。第一个机制是0值的行程编码。第二个是JPEG所称作的熵编码(Entropy Coding),这是根据现实者的选择,用霍夫曼代码或算术编码送出系数代码的一步。4.6 ZigZag序列JPEG算法压缩如此有效的原因之一是,在量化过程中,DCT图像的大量的系数截断成了0值,有这么多的0值,JPEG委员会就选择了与处理其他系数值不同的方法处理0值。不使用霍夫曼或算

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1