收藏 分享(赏)

图像压缩(JPEG)编码算法及压缩过程的实现.doc

上传人:yjrm16270 文档编号:6358264 上传时间:2019-04-09 格式:DOC 页数:17 大小:133.50KB
下载 相关 举报
图像压缩(JPEG)编码算法及压缩过程的实现.doc_第1页
第1页 / 共17页
图像压缩(JPEG)编码算法及压缩过程的实现.doc_第2页
第2页 / 共17页
图像压缩(JPEG)编码算法及压缩过程的实现.doc_第3页
第3页 / 共17页
图像压缩(JPEG)编码算法及压缩过程的实现.doc_第4页
第4页 / 共17页
图像压缩(JPEG)编码算法及压缩过程的实现.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、秋风,秋雨,秋天的景色 博客园 首页 博问 闪存 新随笔 联系 订阅 管理随笔- 234 文章- 0 评论- 22 图象压缩(JPEG)编码算法及压缩过程的实现 转 图象压缩(JPEG )编码算法及压缩过程的实现 摘要本文首先介绍了静态图像压缩(JPEG)编码算法的基本原理、压缩的实现过程及其重要过程的离散余弦变换(DCT)算法的实现原理及软件实现的例程,其次着重介绍了压缩过程中的 DCT、量化和编码三个重要步骤的实现原理。关键词:图像压缩 有损压缩 JPEG 离散余弦变换 DCT 量化第一章 图像压缩编码的综述1.1 图象压缩的目的和方法 图象的数字化表示使得图象信号可以高质量地传输,并便于

2、图像的检索、分析、处理和存储。但是数字图像的表示需要大量的数据,必须进行数据的压缩。即使采用多种方法对数据进行了压缩,其数据量仍然巨大,对传输介质、传输方法和存储介质的要求较高。因此图象压缩编码技术的研究显得特别有意义,也正是由于图象压缩编码技术及传输技术的不断发展、更新,推动了现代多媒体技术应用的迅速发展。1.1.1 图象压缩的目的图象采样后,如果对之进行简单的 8bit 量化和 PCM 编码,其数据量是巨大的。以 CIF(Common Intermediate Format)格式的彩色视频信号为例,若采样速率为 25 帧/秒,采样样点的 Y、U、V 分量均为 8bit 量化,则一秒钟的数据

3、量为:352288382560.83Mbit要传输或存储这样大的数据量是非常困难的,必需对其进行压缩编码,在满足实际需要的前提下,尽量减少要传输或存储的数据量。虽然数字图象的数据量巨大,但图象数据是高度相关的。一幅图象的内部相邻象素之间,相邻行之间的视频序列中相邻图象之间有大量冗余信息空间相关性和时间相关性,可以使用各种方法尽量去除这些冗余信息,减少图象的数据量。除了时间冗余和空间冗余外,在一般的图象数据中还存在信息熵冗余、结构冗余、知识冗余和视觉冗余。各种冗余就是压缩图象数据的出发点。图象编码的目的就在于采用各种方法去除冗余,以尽量少的数据量来表示个重建图象。1.1.2 图象压缩的几种方法1

4、.统计和字典的压缩方法常规程序和计算机熵的数据对于那些基于利用统计变种的压缩,效果很好,这些统计变种表现在单个符号的频率以及符号或短语字符串的频率等方面,而基于字典的系统实际山就是假扮统计程序。可是遗憾的是,这类压缩对于连续色调图象的作用并不很好。这些程序的主要问题产生于这样的一个事实:照片图象的象素广泛地分布在整个范围。如果将图象中的彩色用频率分布画出,那么频率分布图中,没有我们在统计压缩的成功的情况下所看到的“尖峰”状,实际上,如果延长这个分布图,那么从类似于电视那样的生活图象源中得出的分布图会趋于平展。这意味着,每个象素代码彼此是大约相同的出现机会,决定不存在挖掘熵差的任何机会。基于字典

5、的压缩程序的运行也有类似的问题,基于扫描照片的图象决定没有任何类型的数据特征以产生相同的短语的多次出现。例如,一个栅格化的图象,类似房子墙边的垂直部分,在图片的许多连续的行中可能可以给出相似的字符串。但不幸的是,由于真实世界是变化多端的,每行中的相同的性能将彼此地略有不同,对于 20 个象素的一个字符串,其中的一两个象素会因扫描而彼此出现一步长的变化,虽然这些不同点小到人眼不能探测或对人眼不起作用,但他们毕竟妨碍了基于字典压缩的工作,对于这类压缩方法来说,字符串必须严格匹配,由于小的变化,而使匹配的字符串长度趋于很小,这就限制了压缩的效率。2.有损压缩类似于音频数据,图形图象也同样有一个比常规

6、计算机数据文件优越的地方:在压缩/扩展的循环中,他们可以被略微改动,而不会影响用户的立即质量。如果仔细修改,那么各处象素的精确灰度可以完全不被注意地进行小的改变。由于计算机栅的图形图象通常来自对真实世界源的扫描,所有他们通常表达一个已经不完美的照片的表达或是不完美的其他打印接着的表达。没有改变图象基本性能的有损压缩程序应该是可行的。假设图形图象的有损压缩是可能的,那么它是如何实现的呢?研究人员最初试验了用于语音信号的同样的技术,如差分编码和自适应编码,虽然这些技术对图象有帮助,但并没有达到所希望的那么好,原因之一是音频数据和视频数据根本不同。用常规格式采样的音频数据是趋于反复的,声音,包括讲话

7、,是由每次几秒的重复的正弦波组成的。虽然计算机上 DAC 的输入流可能由许多不同的频率叠加在一起而成,但是正弦波通常产生反复的波形。音频反复的本性自然使他利于压缩,线性预言编码和自适应差分脉冲编码调制等技术就利于了这一点,因此将音频数据流压缩了 50到 95。但开始研究图形压缩时,人们也试图用相似的技术压缩数字化的图象,取得了一些成功。最初,研究人员进行栅格化数据流的压缩,如显示在电视机栅的数据。图形数据栅格化时,图形显示成一个象素流,每次一行地显示在屏幕上,从左到右,从上到下。这样,当完成一行时,图片的一个细片就画出了,直到整个屏幕填满。数字化时,象素可以使用从 1 位到 24 位,如今的琢

8、磨图形常常使用 8 位来定义一个象素。3.差分调制差分调制依赖余模拟数据趋于“平缓”的变化,信号幅度撒谎那个的大的跳变是例外,而不是常规。在音频数据中,只要信号的采样率一定程度地高于信息本身的最大的频率分量,那么大的跳变就不会产生。音频信号的差分调制通过编码一个样点与前一个样点的不同来利用这一个特点。例如,如果单频样点位 8 位,差分编码系统可能用 4 位来编码样点之差,这就将输入数据压缩了 50。这种压缩方法中所产生的损失是来自于:使用标准的差分方法不可能总是精确地编码。信号的增长可能快于比编码的允许,或者,编码可能太粗而不能容纳下的差别,差分编码的有损性可以很好的处理,以产生出好的信号。当

9、压缩图形数据时,差分调制有很多问题。首先,图形中的象素依赖于平缓的增加或减少时不可靠的,一幅图中不同的分量间的明显界限时常有的事情。这意味着,使用差分编码的系统需要接受样点间的大的不同和小的不同。这就限制了压缩的效率。带有数据长结构的许多图象可以压缩的很好。长结构中的象素,彼此之间没有什么差别或差别很少;但时,带有突变部分的那些图象不可能压缩的很好。通常,图形图象的差分的编码似乎不产生非常强于最好的无损算法的压缩结果,他当然也不会产生所需要的、对压缩的数量级上的改进。4.自适应编码自适应编码(常常于差分编码一同使用)根据前面看到的一些象素而对将要到来的一些象素的信息做预言。例如,如果一幅灰度级

10、照片中的最新的十个象素的值都在 45 到 50 之间,那么自适应压缩系统可能预言,下一个象素很大可能也在这个范围中,之后,类似于霍夫曼或算术编码那样的基于熵的编码方案可能给将来到来的各种代码赋以概率值。可以代替地使用压缩扩展方法,将最细的粒度赋给最接近预言猜测的范围。第二章 JPEG 编码算法2.1JPEG 压缩编码基础七十年代末八十年代初,研究工作开始着眼于新的图像压缩类型,希望能够大大地优于前面所讨论过的那些非常一般的压缩技术。到八十年代末,开始可为桌面系统的图像处理而寻找应用的工作,大多是是为 UNIX 和 Macintosh 工作站加入的协处理器卡的形式,这些卡的图象质量没有任何可见退

11、化的情况下,可以以 95的比率执行图像的有损压缩。同时,另一部分人开始发展一个国际标准,它能够包括这些新的压缩的种类。如果标准允许方便的图形格式的互换,那么,显然,对于各方面都是有利的,关于标准化工作,早期的担心是:它会限制进一步革新的可能性。两个标准化组织,CCITT 和 ISO,分别从涉及图像压缩的工业和学术两个入手,并且,似乎已经潜在的阻止了工作的负结果。2.2.1JPEG 算法于 JPEG 小组简介JPEG(Joint Photographic Experts Group)是由 ISO/IEC JTC1/SC2/WG8 和 CCITT VIII/NIC 于 1986 年底联合组成的专家

12、小组。JPEG 小组的工组事研究具有连续色调的图像(包括灰度及彩色图像)的压缩算法,并将其制定为适用于大多数图像存储及通信局设备的标准算法,JPEG 小组于 1990 年提出 JPEG算法的建议,并决定对建议中的算法不再修改,除非发现了危害压缩算法标准的问题。作为静态图像压缩的标准算法,JPEG 算法必须满足以下要求:算法独立于图像的分辨率;具有低于 1bit/象素的编码率,并且能够在五秒钟内建立图像,以满足实时要求;在压缩比大约是 2 的情况下能够无失真地恢复原图像;支持顺序编解码和渐进编解码;以及对各种图像成分及数据精度的自适应能力;最后,要求编解码设备简单易实现。JPEG 小组指定了一系

13、列实现静态图像压缩编码的方法,这些方法的选择决定于具体应用的要求及性能价格比的考虑。这些方法基本上可以分为两类:基于离散余弦变换的编码和基于空间域预测编码的方法。前者,即离散余弦变化的方法压缩倍率较高但算法复杂,较难实现;后者,即预测编码的方法虽然压缩倍率较低,但是可以实现无损压缩。JPEG 中允许四种编解码模式:(1)基于 DCT 的顺序模式(sequential DCT-based)(2)基于 DCT 的渐进模式(progressive DCT-based)(3)无失真模式(Lossless)(4) 层次模式(hierarchical).其中,(1)和(2)是基于 DCT 的有损压缩;(3

14、)是基于线性预测的无损压缩;(4)可以是 DCT 与线性预测的分层混合。JPEG 算法可分为基本 JPEG 和扩展,即 Baseline System 与 Extended System。在 Baseline System 中生成的编码文件,在 Extended System 中一定可以正确解码。2.1.2 JPEG 压缩JPEG 有损压缩算法在三个成功的阶段中操作,见图 21DCT Coefficient LosslessTransformation Quantization Compression 这三个步骤形成了一个强有力的压缩器。,可以将连续色调图像压缩到少于原大小的 10,同时丢失很

15、少的原始逼真度。2.2 JPEG 中的二维 DCT本文所讨论的压缩过程的关键是被称为离散余弦变换(Discrete Cosine Transform,DCT)的数学变换。Baseline System 中的 DCT 要求输入数据是一个88 的矩阵,且每个矩阵元素具有 8bit 精度,分为从128 到 127,故 DCT 变换前,象素值先要减去 128。所谓 88 的二维 DCT 是指将 88 的象素值矩阵变换成 88 系数矩阵。88 象素值矩阵是由输入图像分块得到的,若图像的高或宽不是 8 的整数倍,必须扩展其下边或右边到 8 的整数倍。下面(式 21)给出了二维 DCT 的实用公式。式 22

16、 是反离散余弦变化(IDCT)公式。式中表示的是 88 个象素值的矩阵进行计算的,产生出 88频率系数的矩阵。88 的 DCT 及 IDCT 公式如下: 这个公式初看起来让人害怕,但它可以用相当直接的代码段来表示。for ( i = 0 ; i 0一旦建立了余弦变换矩阵,我们绕着它的主对角线旋转,将其转置,这个转置矩阵在代码中表示 ,称作转置余弦变换矩阵。矩阵的建立只需在程序初始化时进行一次,两个矩阵可以用相对短小的循环在同一时刻建立。见下面的代码:for ( j = 0 ;j N;j +)C 0 j = 1.0 / sqrt (N);Ct j 0 = C 0 j ;for ( i = 1 ;

17、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在这个等式中,“*”运算符表示的事矩阵相乘,而不是一般的算术相乘。等式中的每个因子是一个 N*N 的矩阵,在 JPEG 算法以及本章所只用的程序中,矩阵为 88。进行两个矩阵相乘时,输出矩阵中每个元素的运算代价时 N 个乘法操作和 N 个加法操作,由于我们用两个矩阵相乘来建立 D

18、CT 矩阵,在变换后的 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 + )temp i j + = ( pixel i k * Ct k j ;/ * MatrixMultiply( output ,C, temp ); */for ( i = 0 ; i N ; i + )

19、 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 的简单代码片段。值得注意的是,代码中主要是两个三层的嵌套循环,第一个三层嵌套循环是用输入的象素序列于转置余弦变换矩阵相乘,产生临时矩阵;之后,在第二个三层嵌套循环中,临时矩阵于余弦变换矩阵相乘,产生输出的 DCT 矩阵。第三章 压缩过程3.1DCT 的输出由输入的象素值矩阵及输出的 DCT 矩阵可已经看出 DCT 所建立的频谱压缩特性。“直流

20、系数”位于矩阵左上角的位置,这个表示的是输入矩阵的所有幅度的一个平均,它代表了 X 和 Y 坐标轴上的 DC 分量,而且直流系数要比 DCT 矩阵中任意值都打至少一个数量级。另外,在 DCT 矩阵中有一个通常的趋势,随着元素离直流系数越来越远,这些元素的幅度上也变的越来越小。这意味着,通过在输入数据中执行 DCT,我们已经将图像的表达集中在输出矩阵的左上角的系数上,而 DCT 矩阵的右下角部分所包含的是没有用的信息。也很有利于数据的压缩。3.2 量化由图 21 可知 JPEG 压缩过程分为三个步骤。第一步是 DCT 变换,这是一个无损压缩变换,它实际上并不实现压缩,是“有损”的准备,即为“量化

21、”处理阶段做准备。DCT 输出矩阵比原始象素矩阵占有更多的存贮空间,DCT 函数的输入包括 8 位象素值,但输出值的范围从1024 到 1023,占用 11 位,因此,为使 DCT 矩阵占用较少空间,就需要做些事情。减少 DCT 矩阵存贮位数的行为称为“量化”(Quantization)。量化只不过是通过减少整数单精度来减少存贮整数值所需要的位数第一个过程。一旦 DCT 图像压缩,我们可以随着原理原点处的直流系数越来越多的减少系数的精度:离(0,0)点越远,这个元素对于图形图像的贡献就越小,所有我们就越不用注意去维持这个值的精确精度。3.2.1 量化的算法描述JPEG 算法使用量化矩阵(Qua

22、ntization Matrix)来实现量化。对于 DCT矩阵中的每个元素位置,两个矩阵中的相应位置给出了一个量子值(Quantum Value),量子值指示出图像压缩时元素的步长大小是多少,其范围是 1 到 255。与图像关系最密切的元素用小步长编码,大小为 1 表示最高精度。随着我们从原点移开,值将变得较高,量化的实际公式相当简单:量化后的值(i, j) 圆整成最近的整数从公式中可以清楚地看到,大于 25 或 50 的量化值可能可以保证素有高频分量实际上将近似到 0,只有高频系数达到不寻常大值,才会编码成非 0。译码时,逆量化公式为:DCT(i, j) 量化后的值(i,j)*量子(i, j

23、)3.2.2 量化矩阵的选择显然有许多方法可以用来定义两个矩阵中的值,至少有两个试验途径可以测试不同的量化方案。一个是在图像还原以后,测量输入输出图像之间的数学误差;第二个途径试图用人眼来判断还原的结果,它与误差方面的数学差别不可能总是绝对一致。由于量化矩阵可以定义在压缩进行的运行时间,所以 JPEG 允许使用任何量化矩阵。在运行时间选择量化矩阵的好处之一是在被压缩的图形使用 JPEG 算法时可以相当简单地“打入”图像的质量值。可以基于突袭拿过需要和存贮容量来选择图像质量。下面的程序所提供的用于测试代码的量化表是使用非常简单的算法卷里起来的。要确定量子步长大小的值,用户输入一个单个的“质量因子

24、”(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 ) ;质量等级设置了彼此相邻的相同量化水平带的不同,这些量化水平带是面向横贯矩阵的对角线。所以,一个值的量化水平都与原点有大约相同的距离。由配置的结果看,位置(7,7)处的 DCT 系数值为 16,编码成非零值,在元素值为图像提供任何有意义的信

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

26、 -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 0-77 -39 45 0 0 0 0 0-52 60 0 0 0 0 0 0-15 0 -

27、19 0 0 0 0 0-51 19 0 0 0 0 0 03.3 编码JPEG 过程的最后步骤湿编码量化了的图像。JPEG 的编码阶段由压缩图像的三个不同步骤组成。(1)第一步是将(0,0)处的直流系数由绝对值变为相对值,因为图像中相邻的块表现出了高度的相关。用与前一个直流元素的差来编码直流元素,就回产生一个非常小的数值。(2)第二步是将图像系数安排成“zig-zag”序列。(3)最后一步是用两种不同的机制编码。第一个机制是 0 值的行程编码。第二个是 JPEG 所称作的熵编码(Entropy Coding),这是根据现实者的选择,用霍夫曼代码或算术编码送出系数代码的一步。3.3.1ZigZ

28、ag 序列JPEG 算法压缩如此有效的原因之一是,在量化过程中,DCT 图像的大量的系数截断成了 0 值,有这么多的 0 值,JPEG 委员会就选择了与处理其他系数值不同的方法处理 0 值。不使用霍夫曼或算术编码来压缩 0 值,而是使用行程编码算法(RunLength Coding,RLE),所开发的程序代码很简单,只是给出图像中连续 0 值的计数。由于在许多图像中,近一半的系数已量化成 0,这就给杰出的压缩提供了机会。增加行程差功能度的算法是将系数序列重新排序成 ZigZag 序列。JPEG算法没有象程序员可能进行的那样按照主行的顺序压缩系数,而使沿着对角线路径移动块,首先选择最大的元素值,

29、并向可能是最小的值方向走。ZigZag 序列的实际路线显示在图 31 中。用 C 实现 ZigZag 序列可能用简单的查寻表来完成是最好的。本章的样例代码中,序列编码程序成结构的一部分,该结构可以顺序存取以确定要编码的行和列。struck zigzagint row;int col; Zigzag N * N =0,0,0,1,1,0,2,0,1,1,0,2,0,3,1,2,2,1,3,0,4,0,3,1,2,2,1,3,0,4,0,5,1,4,2,3,3,2,4,1,5,0,6,0,5,1,4,2,3,3,2,4,1,5,0,6,0,7,1,6,2,5,3,4,4,3,5,2,6,1,7,0

30、,7,1,6,2,5,3,4,4,3,5,2,6,1,7,2,7,3,6,4,5,5,4,4,6,3,7,7,3,6,4,5,5,4,6,3,7,4,7,5,6,6,5,7,4,7,5,6,6,5,7,6,7,7,6,7,7下面是将每个 DCT 结果送到压缩器中的 C 代码。其中,并没有直接查寻每个结果,而使通过查寻 ZigZag 结构来确定要使用的下一个行与列,之后再对通过 ZigZag 结构中得到的行和列所确定的元素进行编码。for ( i = 0 ; i ( N * N );i + )row = ZigZag i .row;col = ZigZag i .col;result = DCT

31、 row col /Quantum row col ;OutputCode( output_file .ROUND( result ) ) ;3.3.2 熵编码讲直流元素转换成与上一个之差之后,接下来将 DCT 块重新排序成 ZigZag 序列,再后,JPEG 用一个熵编码机制送出元素,输出带有建立在其中的 RLE,它是编码机制的主要部分,基本上,熵编码输出包括三个单词的序列,不断重复直到块结束,三个单词如下:1.行程长度DCT 输出矩阵中,当前元素之前的连续 0 的个数2.位计数 后面跟着的幅度值所用的位数3.幅度 DCT 系数的幅度本设计采取的编码序列是行程编码和可变长度整型数编码的组合。

32、行程长度和位计数这两个值的组合,形成了输出的代码。,位计数是将幅度可变长度整型编码所使用的位数目。可变长度整型数编码方案利用了 DCT 的输出应该由大多数较小的数值所组成的事实,因此我们想用较少的位数目进行编码。下面是位计数及用这个数目编码的系数幅度:位计数 幅度1 1,12 3 到2, 2 到 33 7 到4, 4 到 74 15 到8, 8 到 155 31 到16,16 到 316 63 到32,32 到 637 127 到63,64 到 1278 255 到128,128 到2559 511 到256,256 到 51110 1023 到512,512 到 1023要注意的是每一个位计数编码高低值的对称序列,中间跳过的值用表中从1 位开始的较小的位计数进行编码。参考资料:1、多媒体网络通信 北京理工大学出版社 李小平 等编著2、数据通信和网络 鲁士文 等编著 清华大学出版社3、网络多媒体技术开发与应用 冯博琴 等译著 机械工业出版社4、中国多媒体视训杂志 2002 年 110 期

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

当前位置:首页 > 网络科技 > 图形图像

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报