精华内容
下载资源
问答
  • 数据是怎么被压缩

    2021-07-27 03:13:48
    计算机上的压缩过程我们都知道,计算机采用的是2进制系统。一个连续的n位二进制数集,就可以用来表示 2 n 个字符。目前的国际标准是ASCII码:用一个字节即8位数的2进制码,来表示各种字符和字母。现在我们只使用2位...

    计算机上的压缩过程

    我们都知道,计算机采用的是2进制系统。一个连续的n位二进制数集,就可以用来表示 2 n 个字符。目前的国际标准是ASCII码:用一个字节即8位数的2进制码,来表示各种字符和字母。

    现在我们只使用2位二进制码,来简单地演示由4个符号组成的字符串的压缩过程。

    假设我们有这么一串20个字母的数据:

    407d955fde5984d76334977b2d61a967.png

    默认情况下,用2位2进制码来表示这四个字母:

    A

    B

    C

    D

    00

    01

    10

    11

    每个字符在字符串中各自出现的次数并不相等:

    A:6次 B:10次 C:3次 D:1次

    而在计算机中,数据则是以2进制码的形式储存在硬盘上的:

    00 00 01 00 00 01 01 10 01 00 01 01 01 10 01 01 00 01 11 10

    压缩过程如下:

    ①注明每个字符的出现次数。把两个出现次数最小的字符圈到一起,看作一个新字符,新字符的次数为两个组成字符的次数之和。

    ②重复上述操作,直至完成对所有字符的处理。这种操作形成的结构看起来像棵树(下图),被称为——霍夫曼(Huffman)树。

    a22f2224ec26f678bd9e529ab5ddde9f.png

    ③在每一层的分支线上,按下图所示分别标上0和1。

    24671200faff053c5671e320572fef80.png

    从最顶端往下读,每个字符都有唯一的分支编号连到它那里,无重复也无遗漏,这样就得到了ABCD这四个字符的新的代码:

    A

    B

    C

    D

    10

    0

    110

    111

    用以上新编码代入原字符串中,得到:

    10 10 0 10 10 0 0 110 0 10 0 0 0 110 0 0 10 0 111 110

    整理一下得到新编码:

    原编码:0000010000010110010001010110010100011110

    新编码:1010010100011001000011000100111110

    看!数据成功被压缩。这一段40位长度的内容被压缩到了34位,压缩率是85%。

    回顾过程容易发现压缩的秘密:出现频率最多的"B"由一位二进制码“0”来表示,而出现频率较低的"C"和"D",则由长度增加了的三位二进制码来表示。通过合理分配不同长度的编码,肯定可以对数据进行一定程度的压缩。

    另外可以证明,霍夫曼树就是此类编码替代的最优化的方案之一。因为假如存在一个字符的出现频率高于另一个字符,而它的变长码长度却长于另一个字符,那么必然可以通过交换两者的位置,使得输出结果的总长度变短。有限次操作后可以达到无法再交换的情况,也就是霍夫曼树规则下的情况。

    展开全文
  • 02编码压缩.ppt

    2021-07-27 03:15:09
    19.90 积分信息的编码压缩复习引入谈谈计算机处理信息的过程什么叫信息的数字化二进制整数右起第n位的权是________。二进制数1100转换成十进制数是_________。十进制数13 转换成二进制数是_________。英文字符的...

    a7f4a3f590493a1e451dd952a488fd7c.gif 02编码与压缩.ppt

    (10页)

    edc5fbc6852b2f962a8df5b15a1cf3db.gif

    本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

    19.90 积分

    信息的编码与压缩复习引入谈谈计算机处理信息的过程什么叫信息的数字化二进制整数右起第n位的权是________。二进制数1100转换成十进制数是_________。十进制数13 转换成二进制数是_________。英文字符的编码——ASCII码一个字符的ASCII码要占用几个字节?合多少位二进制?实际上用了几位?一个字符的ASCII码要占用1个字节。合8位二进制。实际上用了7位。0位数: 8 7 6 5 4 3 2 1ASCII码只用低7位ASCII码占用8位,一个字节ASCII码表(108附一)字符012389编码484950515657字符ABCXYZ编码656667888990字符abcxyz编码979899120121122汉字的编码输入码内码字形码声音的编码过程:模拟信号——采样——量化——数字信号 (频率) (级数)3分20秒CD音频文件大小计算: (3*60+20)*44.1*1000*16*2/8=35280KB几种声音格式:CD、WAV ——MP3、WMA——RA图像编码矢量图:用公式,数据量小,不失真,逼真差位图:像素(点),分辩率,位数,特征位图文件大小计算:800*600*24/8位图文件的格式:BMP(微软)、TIF(印刷)、GIF(网页)、JPG(照片)信息的压缩信息为什么需要压缩技术?为什么可以压缩?举例说明信息压缩技术有哪几种标准?谈谈有损压缩和无损压缩的区别在哪里?为了在有限的容量中存储更多的信息,为了提高信息的传输效率,一般都要对数字化信息进行压缩处理。信息都是可以压缩的,因为有冗余信息存在的缘故。不同的数据都有不同的数据压缩标准,MP3是音乐信息压缩标准,JPG是静态图像信息压缩标准,MPEG、MR是视频信息压缩标准。能够完全还原为原来的数据的压缩称无损压缩,否则就称为有损压缩。 课堂小结1、任何形式的信息在计算机内部都是二进制的形式表示,因此我们需要有信息编码技术。2、为了减少信息的存储量,提高信息的传输效率,我们需要信息压缩技术。课堂练习第23页 关 键 词: 02 编码 压缩

    4d91c43bfc72ca913299809b07b4968f.gif  天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

    展开全文
  • JPEG)编码算法及压缩过程的实现摘要本文首先介绍了静态...关键词:图像压缩有损压缩JPEG离散余弦变换DCT量化第一章图像压缩编码的综述1.1图象压缩的目的和方法图象的数字化表示使得图象信号可以高质量地传输,并便...

    JPEG)编码算法及压缩过程的实现

    摘要

    本文首先介绍了静态图像压缩(JPEG)编码算法的基本原理、压缩的实现过程及其重要过程的离散余弦变换(DCT)算法的实现原理及软件实现的例程,其次着重介绍了压缩过程中的DCT、量化和编码三个重要步骤的实现原理。

    关键词:图像压缩有损压缩JPEG离散余弦变换DCT量化

    第一章图像压缩编码的综述

    1.1图象压缩的目的和方法

    图象的数字化表示使得图象信号可以高质量地传输,并便于图像的检索、分析、处理和存储。但是数字图像的表示需要大量的数据,必须进行数据的压缩。即使采用多种方法对数据进行了压缩,其数据量仍然巨大,对传输介质、传输方法和存储介质的要求较高。因此图象压缩编码技术的研究显得特别有意义,也正是由于图象压缩编码技术及传输技术的不断发展、更新,推动了现代多媒体技术应用的迅速发展。

    1.1.1图象压缩的目的

    图象采样后,如果对之进行简单的8bit量化和PCM编码,其数据量是巨大的。以CIF(Common Intermediate Format)格式的彩色视频信号为例,若采样速率为25帧/秒,采样样点的Y、U、V分量均为8bit量化,则一秒钟的数据量为:

    352×288×3×8×25=60.83Mbit

    要传输或存储这样大的数据量是非常困难的,必需对其进行压缩编码,在满足实际需要的前提下,尽量减少要传输或存储的数据量。

    虽然数字图象的数据量巨大,但图象数据是高度相关的。一幅图象的内部相邻象素之间,相邻行之间的视频序列中相邻图象之间有大量冗余信息—空间相关性和时间相关性,可以使用各种方法尽量去除这些冗余信息,减少图象的数据量。

    除了时间冗余和空间冗余外,在一般的图象数据中还存在信息熵冗余、结构冗余、知识冗余和视觉冗余。各种冗余就是压缩图象数据的出发点。图象编码的目的就在于采用各种方法去除冗余,以尽量少的数据量来表示个重建图象。

    1.1.2图象压缩的几种方法

    1.统计和字典的压缩方法

    常规程序和计算机熵的数据对于那些基于利用统计变种的压缩,效果很好,这些统计变种表现在单个符号的频率以及符号或短语字符串的频率等方面,而基于字典的系统实际山就是假扮统计程序。可是遗憾的是,这类压缩对于连续色调图象的作用并不很好。

    这些程序的主要问题产生于这样的一个事实:照片图象的象素广泛地分布在整个范围。如果将图象中的彩色用频率分布画出,那么频率分布图中,没有我们在统计压缩的成功的情况下所看到的“尖峰”状,实际上,如果延长这个分布图,那么从类似于电视那样的生活图象源中得出的分布图会趋于平展。这意味着,每个象素代码彼此是大约相同的出现机会,决定不存在挖掘熵差的任何机会。

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

    2.有损压缩

    类似于音频数据,图形图象也同样有一个比常规计算机数据文件优越的地方:在压缩/扩展的循环中,他们可以被略微改动,而不会影响用户的立即质量。如果仔细修改,那么各处象素的精确灰度可以完全不被注意地进行小的改变。由于计算机栅的图形图象通常来自对真实世界源的扫描,所有他们通常表达一个已经不完美的照片的表达或是不完美的其他打印接着的表达。没有改变图象基本性能的有损压缩程序应该是可行的。

    假设图形图象的有损压缩是可能的,那么它是如何实现的呢?研究人员最初试验了用于语音信号的同样的技术,如差分编码和自适应编码,虽然这些技术对图象有帮助,但并没有达到所希望的那么好,原因之一是音频数据和视频数据根本不同。

    用常规格式采样的音频数据是趋于反复的,声音,包括讲话,是由每次几秒的重复的正弦波组成的。虽然计算机上DAC的输入流可能由许多不同的频率叠加在一起而成,但是正弦波通常产生反复的波形。

    音频反复的本性自然使他利于压缩,线性预言编码和自适应差分脉冲编码调制等技术就利于了这一点,因此将音频数据流压缩了50%到95%。

    但开始研究图形压缩时,人们也试图用相似的技术压缩数字化的图象,取得了一些成功。最初,研究人员进行栅格化数据流的压缩,如显示在电视机栅的数据。

    图形数据栅格化时,图形显示成一个象素流,每次一行地显示在屏幕上,从左到右,从上到下。这样,当完成一行时,图片的一个细片就画出了,直到整个屏幕填满。数字化时,象素可以使用从1位到24位,如今的琢磨图形常常使用8位来定义一个象素。

    3.差分调制

    差分调制依赖余模拟数据趋于“平缓”

    的变化,信号幅度撒谎那个的大的跳变是例外,而不是常规。在音频数据中,只要信号的采样率一定程度地高于信息本身的最大的频率分量,那么大的跳变就不会产生。

    音频信号的差分调制通过编码一个样点与前一个样点的不同来利用这一个特点。例如,如果单频样点位8位,差分编码系统可能用4位来编码样点之差,这就将输入数据压缩了50%。这种压缩方法中所产生的损失是来自于:使用标准的差分方法不可能总是精确地编码。信号的增长可能快于比编码的允许,或者,编码可能太粗而不能容纳下的差别,差分编码的有损性可以很好的处理,以产生出好的信号。

    当压缩图形数据时,差分调制有很多问题。首先,图形中的象素依赖于平缓的增加或减少时不可靠的,一幅图中不同的分量间的明显界限时常有的事情。这意味着,使用差分编码的系统需要接受样点间的大的不同和小的不同。这就限制了压缩的效率。带有数据长结构的许多图象可以压缩的很好。长结构中的象素,彼此之间没有什么差别或差别很少;但时,带有突变部分的那些图象不可能压缩的很好。

    通常,图形图象的差分的编码似乎不产生非常强于最好的无损算法的压缩结果,他当然也不会产生所需要的、对压缩的数量级上的改进。

    4.自适应编码

    自适应编码(常常于差分编码一同使用)根据前面看到的一些象素而对将要到来的一些象素的信息做预言。例如,如果一幅灰度级照片中的最新的十个象素的值都在45到50之间,那么自适应压缩系统可能预言,下一个象素很大可能也在这个范围中,之后,类似于霍夫曼或算术编码那样的基于熵的编码方案可能给将来到来的各种代码赋以概率值。可以代替地使用压缩-扩展方法,将最细的粒度赋给最接近预言猜测的范围。

    第二章JPEG编码算法

    2.1JPEG压缩编码基础

    七十年代末八十年代初,研究工作开始着眼于新的图像压缩类型,希望能够大大地优于前面所讨论过的那些非常一般的压缩技术。到八十年代末,开始可为桌面系统的图像处理而寻找应用的工作,大多是是为UNIX和Macintosh工作站加入的协处理器卡的形式,这些卡的图象质量没有任何可见退化的情况下,可以以95%的比率执行图像的有损压缩。

    同时,另一部分人开始发展一个国际标准,它能够包括这些新的压缩的种类。如果标准允许方便的图形格式的互换,那么,显然,对于各方面都是有利的,关于标准化工作,早期的担心是:它会限制进一步革新的可能性。两个标准化组织,CCITT和ISO,分别从涉及图像压缩的工业和学术两个入手,并且,似乎已经潜在的阻止了工作的负结果。

    2.2.1JPEG算法于JPEG小组简介

    JPEG(Joint Photographic Experts

    Group)是由ISO/IECJTC1/SC2/WG8和CCITT VIII/NIC于1986年底联合组成的专家小组。JPEG小组的工组事研究具有连续色调的图像(包括灰度及彩色图像)的压缩算法,并将其制定为适用于大多数图像存储及通信局设备的标准算法,JPEG小组于1990年提出JPEG算法的建议,并决定对建议中的算法不再修改,除非发现了危害压缩算法标准的问题。

    作为静态图像压缩的标准算法,JPEG算法必须满足以下要求:算法独立于图像的分辨率;具有低于1bit/象素的编码率,并且能够在五秒钟内建立图像,以满足实时要求;在压缩比大约是2的情况下能够无失真地恢复原图像;支持顺序编解码和渐进编解码;以及对各种图像成分及数据精度的自适应能力;最后,要求编解码设备简单易实现。

    JPEG小组指定了一系列实现静态图像压缩编码的方法,这些方法的选择决定于具体应用的要求及性能价格比的考虑。这些方法基本上可以分为两类:基于离散余弦变换的编码和基于空间域预测编码的方法。前者,即离散余弦变化的方法压缩倍率较高但算法复杂,较难实现;后者,即预测编码的方法虽然压缩倍率较低,但是可以实现无损压缩。

    JPEG中允许四种编解码模式:

    (1)基于DCT的顺序模式(sequential DCT-based)

    (2)基于DCT的渐进模式(progressive DCT-based)

    (3)无失真模式(Lossless)

    (4)层次模式(hierarchical).

    其中,(1)和(2)是基于DCT的有损压缩;(3)是基于线性预测的无损压缩;(4)可以是DCT与线性预测的分层混合。

    JPEG算法可分为基本JPEG和扩展,即Baseline System与Extended System。在Baseline System中生成的编码文件,在Extended System中一定可以正确解码。

    2.1.2

    JPEG压缩

    JPEG有损压缩算法在三个成功的阶段中操作,见图2-1

    DCTCoefficientLossless

    Transformation→Quantization→Compression

    这三个步骤形成了一个强有力的压缩器。,可以将连续色调图像压缩到少于原大小的10%,同时丢失很少的原始逼真度。

    2.2 JPEG中的二维DCT

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

    下面(式2-1)给出了二维DCT的实用公式。式2-2是反离散余弦变化(IDCT)公式。式中表示的是8×8个象素值的矩阵进行计算的,产生出8×8频率系数的矩阵。

    8×8的DCT及IDCT公式如下:

    这个公式初看起来让人害怕,但它可以用相当直接的代码段来表示。

    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 < 8 ; y ++ ){

    temp +=

    Cosines [ x ] [ i ]*Cosines[ y ][ j ]*pixel[ x ][ y ];

    }

    temp * = sqrt (

    2 * 8 ) * Coefficient[ i ][ j ];

    DCT [ i ][ j ] =

    INT_ROUND (temp);

    }

    2.3DCT的实现

    测验DCT算法时所表现出的首要的问题之一是计算DCT中每个元素所需要的世界紧紧地依赖于矩阵的大小。由于使用双层嵌套循环,所以计算量为:随着N的增长,处理DCT输出数组中每个元素所要的时间也将增长。DCT的实现将图像分成更小更能处理的块,JPEG小组选用8×8的块大小进行DCT计算。

    虽然DCT大小的增加可能得到更好的压缩,但是,达到减弱返回点的时间也不会很长。研究表明,象素之间的联系很快趋于减弱,因此,原点15或20个象素位以外的象素对于预言器来说用处不大,这意味着64×64的DCT块比起将它分成四个16×16块,不会有更好的压缩,并且,越是不重要,花费的计算时间越多。

    虽然,使用16×16的块做为DCT计算的基础的确是一个好的选择,但是JPEG委员会选择的就是8×8的块,这主要是,为了允许那些使用今天技术所建立起的使用实现。这类压缩称作“块压缩”。

    2.3.1矩阵相乘

    上面显示的DCT定义是相当直接的双层嵌套循环。循环的内层元素为每个要计算的元素执行N×N次,循环的内层有两个相乘操作和一个相加操作。

    更为有效的DCT形式可能是使用矩阵操作进行计算。为实现这个操作。首先要建立称为余弦变化矩阵(Cosine Transform Matrix)的一个矩阵C,该矩阵由式2-3给出。

    =if i=0

    ifi>0

    一旦建立了余弦变换矩阵,我们绕着它的主对角线旋转,将其转置,这个转置矩阵在代码中表示,称作转置余弦变换矩阵。矩阵的建立只需在程序初始化时进行一次,两个矩阵可以用相对短小的循环在同一时刻建立。见下面的代码:

    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

    在这个等式中,“*”运算符表示的事矩阵相乘,而不是一般的算术相乘。等式中的每个因子是一个N*N的矩阵,在JPEG算法以及本章所只用的程序中,矩阵为8×8。进行两个矩阵相乘时,输出矩阵中每个元素的运算代价时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.0

    for ( k = 0

    ; k < N ; k ++ )

    temp[ 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的简单代码片段。值得注意的是,代码中主要是两个三层的嵌套循环,第一个三层嵌套循环是用输入的象素序列于转置余弦变换矩阵相乘,产生临时矩阵;之后,在第二个三层嵌套循环中,临时矩阵于余弦变换矩阵相乘,产生输出的DCT矩阵。

    第三章压缩过程

    3.1DCT的输出

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

    3.2量化

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

    3.2.1量化的算法描述

    JPEG算法使用量化矩阵(Quantization Matrix)来实现量化。对于DCT矩阵中的每个元素位置,两个矩阵中的相应位置给出了一个量子值(Quantum Value),量子值指示出图像压缩时元素的步长大小是多少,其范围是1到255。

    与图像关系最密切的元素用小步长编码,大小为1表示最高精度。随着我们从原点移开,值将变得较高,量化的实际公式相当简单:

    量化后的值(i, j)=圆整成最近的整数

    从公式中可以清楚地看到,大于25或50的量化值可能可以保证素有高频分量实际上将近似到0,只有高频系数达到不寻常大值,才会编码成非0。

    译码时,逆量化公式为:

    DCT(i, j)=量化后的值(i,j)*量子(i, j)

    3.2.2量化矩阵的选择

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

    下面的程序所提供的用于测试代码的量化表是使用非常简单的算法卷里起来的。要确定量子步长大小的值,用户输入一个单个的“质量因子”(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,编码成非零值,在元素值为图像提供任何有意义的信息之前,,它为该元素值设定了界限,任何此界限一下的贡献都被扔掉。这就是算法中发生“有损”效果的地方。DCT的第一个步骤中除了数学精度损失外没有任何损失,并且量化之后的步骤也是无所的编码过程,所以我们有机会丢掉数据的唯一地方就在这儿。

    由将DCT矩阵量化后的量化结果来看,量化/逆量化周期有明显的压缩效果,矩阵的高频部分已大部分截成0,消除了在被还原图像中的影响,矩阵中接近直流系数的系数可能被修改,但与原系数相比修改不大。下图即为量化前和逆量化后的DCT矩阵的结果。

    DCT Matrix before923-9-73-102

    Quantization-39-581217-2242

    -84621-1834-55

    -52-36-1014-104-20

    -86-4049 -717-6-25

    -6265-12-23-8-20

    -1714-3617-1133-1

    -5432-9-922013

    DCT Matrix after900-700000

    Dequantization-35-569110000

    -84540-130000

    -45-33000000

    -77-394500000

    -5260000000

    -150-1900000

    -5119000000

    3.3编码

    JPEG过程的最后步骤湿编码量化了的图像。JPEG的编码阶段由压缩图像的三个不同步骤组成。

    (1)第一步是将(0,0)处的直流系数由绝对值变为相对值,因为图像中相邻的块表现出了高度的相关。用与前一个直流元素的差来编码直流元素,就回产生一个非常小的数值。

    (2)第二步是将图像系数安排成“zig-zag”序列。

    (3)最后一步是用两种不同的机制编码。第一个机制是0值的行程编码。第二个是JPEG所称作的熵编码(Entropy Coding),这是根据现实者的选择,用霍夫曼代码或算术编码送出系数代码的一步。

    3.3.1Zig-Zag序列

    JPEG算法压缩如此有效的原因之一是,在量化过程中,DCT图像的大量的系数截断成了0值,有这么多的0值,JPEG委员会就选择了与处理其他系数值不同的方法处理0值。

    不使用霍夫曼或算术编码来压缩0值,而是使用行程编码算法(Run-Length Coding,RLE),所开发的程序代码很简单,只是给出图像中连续0值的计数。由于在许多图像中,近一半的系数已量化成0,这就给杰出的压缩提供了机会。

    增加行程差功能度的算法是将系数序列重新排序成Zig-Zag序列。JPEG算法没有象程序员可能进行的那样按照主行的顺序压缩系数,而使沿着对角线路径移动块,首先选择最大的元素值,并向可能是最小的值方向走。

    Zig-Zag序列的实际路线显示在图3-1中。

    用C实现Zig-Zag序列可能用简单的查寻表来完成是最好的。本章的样例代码中,序列编码程序成结构的一部分,该结构可以顺序存取以确定要编码的行和列。

    struck zigzag{

    int 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},

    {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代码。其中,并没有直接查寻每个结果,而使通过查寻Zig-Zag结构来确定要使用的下一个行与列,之后再对通过Zig-Zag结构中得到的行和列所确定的元素进行编码。

    for ( i = 0 ; i < (

    N * N );i ++ ){

    row = ZigZag[ i ]

    .row;

    col = ZigZag[ i ]

    .col;

    result = DCT[ row

    ][ col ]/Quantum[ row ][ col ];

    OutputCode(

    output_file .ROUND( result ) ) ;

    }

    3.3.2熵编码

    讲直流元素转换成与上一个之差之后,接下来将DCT块重新排序成Zig-Zag序列,再后,JPEG用一个熵编码机制送出元素,输出带有建立在其中的RLE,它是编码机制的主要部分,基本上,熵编码输出包括三个单词的序列,不断重复直到块结束,三个单词如下:

    1.行程长度——DCT输出矩阵中,当前元素之前的连续0的个数

    2.位计数——后面跟着的幅度值所用的位数

    3.幅度——DCT系数的幅度

    本设计采取的编码序列是行程编码和可变长度整型数编码的组合。行程长度和位计数这两个值的组合,形成了输出的代码。,位计数是将幅度可变长度整型编码所使用的位数目。

    可变长度整型数编码方案利用了DCT的输出应该由大多数较小的数值所组成的事实,因此我们想用较少的位数目进行编码。下面是位计数及用这个数目编码的系数幅度:

    位计数幅度

    1-1,1

    2-3到-2,2到3

    3-7到-4,4到7

    4-15到-8,8到15

    5-31到-16,16到31

    6-63到-32,32到63

    7-127到-63,64到127

    8-255到-128,128到-255

    9-511到-256,256到511

    10-1023到-512,512到1023

    要注意的是每一个位计数编码高低值的对称序列,中间跳过的值用表中从1位开始的较小的位计数进行编码。

    参考资料:1、《多媒体网络通信》北京理工大学出版社李小平等编著

    2、《数据通信和网络》鲁士文等编著清华大学出版社

    3、《网络多媒体技术开发与应用》冯博琴等译著机械工业出版社

    4、《中国多媒体视训》杂志2002年1—10期

    展开全文
  • 图像压缩与编码及MATLAB实现近年来,随着计算机通信技术的迅速发展,特别是多媒体网络技术的兴起,图像压缩与编码已受到了人们越来越多的关注。...因此,一般把此项处理称为压缩编码。 6.1 图像压缩与编码概述 6.1...

    图像压缩与编码及MATLAB实现

    近年来,随着计算机通信技术的迅速发展,特别是多媒体网络技术的兴起,图像压缩与编码已受到了人们越来越多的关注。 图像压缩与编码从本质上来说就是对要处理的图像按一定的规则进行变换和组合,从而达到以尽可能少的代码(符号)来表示尽可能多的数据信息。压缩通过编码来实现,或者说编码带来压缩的效果。因此,一般把此项处理称为压缩编码。 6.1 图像压缩与编码概述 6.1.1 图像压缩与编码概念 6.1.2 图像压缩编码的分类 图6.1 压缩处理示意图 6.1.3 图像压缩的国际标准 (1)二进制图像压缩标准 (2)静止图像压缩标准 (3)运动图像压缩标准 1)H.261 2)MPEG-1 3)MPEG-2 4)MPEG-4、MPEG-7 5)H.263 6.1.4 图像压缩编码术语简介 (1)图像熵与平均码字长度 (2)编码效率 (3)压缩比 6.2 无损压缩技术 6.2.1 无损压缩技术概述 6.2.2 霍夫曼(huffman)编码 (1)huffman编码的基本原理 在无损压缩的编码方法中,Huffman编码是一种较有效的编码方法。Huffman编码是一种长度不均匀的、平均码率可以接近信息源熵值的一种编码。 (2)huffman编码过程举例 (2)huffman编码过程举例 图6.2 Huffman编码过程示意图 6.2.3 算术编码 (1)算术编码的基本原理 (2)算术编码举例 6.2.4 跳过白色块编码(WBS) 跳过白色块编码是二值图像压缩编码方法之一。二值图像是指仅有黑(国际建议规定用“1”代表)、白(用“0”代表)两个灰度级的图像。 表6.1 几种图片的常用分辨率 (1)一维 W BS编码 (2)二维 W BS编码 6.2.5 行程编码 6.2.6 方块编码(BTC) (1)方块编码的基本原理 (2)自适应方块编码 6.2.7 无损编码技术的 MATLAB 实现 (1)行程编码的 MATLAB 实现 (2)霍夫曼编码的 MATLAB 实现 以上代码中的输出数组 C 的第一维表示颜色值,第二维表示代码的数值大小,第三维表示该代码的位数,将这三个参数作为码表在压缩文件头部,则其以下的数据将按照这三个参数 6.3 有损压缩技术 6.3.1 预测编码 预测编码方式,是目前应用比较广泛的编码技术之一。常见的 DPCM、ADPCM、ΔM 等都属于预测编码方式的编码技术。通常,图像的相邻像素值具有较强的相关性,观察一个像素的相邻像素就可以得到关于该像素的大量信息。这种性质导致了预测编码技术。 (1)差分脉冲编码调制(DPCM) 最常用的预测编码方法就是差分脉冲编码调制,即 DPCM 图 6.3 DPCM 系统框图 (2)线性预测编码 (3)预测方案 图 6.4 像素的编号 1)前值预测 2)一维预测 3)二维预测 4)三维预测 (4)自适应预测编码(ADPCM) 6.3.2 变换编码 (1)变换编码的原理 图6.5 变换编码框图 (2)各种变换编码比较 1)K-L变换 图6.6 二维 DCT变换编码压缩解压缩框图 表6.2 JPEG 标准中的亮度量化表 表6.3 JPEG 标准中的色度量化表 图6.7 DCT编码的曲徊排序路线 6.3.3 有损压缩的MATLAB实现方法 图6.8 图像预测编码前、后显示效果比较 6.4 混合编码 6.4.1 子带编码(SBC) 子带编码(Subband Coding)的基本思想是:使用一组带通滤波器(Band-Pass Filter,BPF)把输入图像的傅立叶频谱分成若干个连续的频段,每个频段称为子带。对每个子带中的图像信号采用单独的编码方案去编码。也就是说:子带编码是把图像信号通过一组带通滤波器分解成不同频带内的分量,然后在每个独立的子带中对信号进行降率采样和单独编码。 图6.9 子带编码方框图 6.4.2 小波变换编码 6.4.3 分形编码 分形(Fractal)是 Mandelbrot在 1975年提出的几何学新概念。Fractal来自拉丁文Fractus, 意为“碎片”。 (1)分形和分维的基本概念 (2)分形图像编码的基本原理 6.4.4 基于小波变换的图像压缩技术的 MATLAB 实现 6.4.4 基于小

    展开全文
  • 一、概要在项目开发中,有引入用到rANS熵编码压缩算法,在使用的背后,想看看其运行的基本原理,也算补一下个人的熵编码知识。这里提到的熵编码压缩算法都是无损压缩。很久没有写文章了,太忙了,不知道一年一篇文章...
  • 开发与应用 计算机与信息技术 ·23· 基于 Matlab 的图像压缩编码 杨晓 李悦 (贵州大学 计算机与信息学院,贵州 贵阳 550025) 摘 要 本文描述了图像编码压缩方法的主要分类,介绍了每个分类里面的典型算法的原理、...
  • JPEG压缩编码流程

    2021-03-04 11:21:33
    基于离散余弦变换(DCT)的JPEG压缩编码过程: 1、正向离散余弦变换(FDCT) 2、量化(Quantization) 3、 Z字形编码(Zigzag Scan) 4、使用差分脉冲编码调制(DPCM)对直流系数(DC)进行编码 5、使用行程长度...
  • 原理介绍什么是Huffman压缩Huffman( 哈夫曼 ) 算法在上世纪五十年代初提出来了,它是一种无损压缩方法,在压缩过程中不会丢失信息熵。并且能够证明 Huffman 算法在无损压缩算法中是最优的。Huffman 原理简单,实现...
  • b)哈夫曼树的构造过程和哈夫曼编码 c)哈夫曼压缩 解释:哈夫曼编码是怎么达到压缩的? 如上图所示,把结点权值看作结点出现的次数。字符a出现45次,字符b出现13次,字符c出现12次,字符d出现16次,字符e出现9次,...
  • 2 用于图像压缩,可根据图像的像素直方图来进行图像压缩,如PNG格式图像压缩使用的算法就包括哈夫曼编码,在编码过程中并未舍弃信息故哈夫曼编码是一种无损压缩方式。 3.哈夫曼解码 即给定由哈夫曼编码的结果10 11 ...
  • 编码:无损压缩的统称 常见熵编码: 1 哈夫曼编码 2 算术编码 3 香农编码 1 哈夫曼编码详解 平衡:按照左小右大来组织结构 哈夫曼:根据使用频率计算位置,出现频率高的就距离根节点近 编码具体方式举例: 比如有...
  • 百度定义:哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,...
  • 基于DCT的图像压缩编码算法的MATLAB实现 摘要 随着科学技术的发展,图像压缩技术越来越引起人们的关注。为此从众多的图像压缩编码标准中选取了基于DCT变换的JPEG图像压缩编码算法进行研究,并通过对比分析各种软件...
  • 基于哈夫曼编码对文件进行压缩和解压缩(详细讲解) 本文对应c++代码实现链接 一、背景 利用特定的算法来压缩数据的工具,压缩后生成的文件称为压缩包。如果想使用其中的数据,就得用压缩软件对数据进行解压。利用...
  • 1. 为什么要压缩 试想一下不压缩图像的情形:图像最基本的格式就是RGB,这里以24bit的RGB图像举例,也就是一个像素占3个字节。视频是一帧一帧的图像组成,假设现在的视频分辨率是1080p,帧率是15帧每秒。每秒需要的...
  • -数据压缩与信源编码大作业2数据压缩作业2——...并且运用C语言编写相应的压缩编码以及解压缩编码程序,加深对图像压缩编码的理解。二、试验内容:自行设计一种图像无损压缩方法,编写相应的编解码程序img_Code/img_D...
  • 用哈夫曼编码C语言实现文件压缩《用哈夫曼编码实现文件压缩》实 验 报 告课程名称 数据结构B实验学期 2012 至 2013 学年 第 一 学期学生所在系部 计算机学院年级 2011 专业班级 信管B111学生姓名 学号任课教师 兰芸...
  • 基于哈夫曼编码实现文件压缩是在学习数据结构(严蔚敏版)书中哈夫曼树及其应用后对书中伪代码的实现和完善,采用哈夫曼静态编码的方式,通过对数据进行两遍扫描,第一次统计出现的字符频次,进而构造哈夫曼树,第二遍...
  • JPEG编码压缩率调整

    千次阅读 2021-01-08 01:06:05
    u32Qfactor:量化表因子范围为[1, 99],u32Qfactor 越大,量化表中的量化系数越小,得到的图像质量会更好,同时,编码压缩率更低。同理 u32Qfactor 越小,量化表中的量化系数越大,得到的图像质量会更差,同时,编码...
  • 音频压缩分为两种,其基本的方法都是消除冗余信息,在这里的冗余信息指的是:人的听觉范围以外的音频信息: (1)有损压缩:消除冗余信息后,无法还原出原声。 (2)无损压缩:消除冗余信息后仍能够还原出原声。
  • 一:哈夫曼树与哈夫曼编码 大家知道,文件压缩的原理么? 假如我们有一个文件,文件当中仅有 A、B、C、D、E 五种字符,这五种字符出现的频率分别为 5次、4次、3次、2次、1次。 我们知道每个英文字母均占用一个字节,...
  • } // 编码过程 public double Coder() { double gNum = 0; // 用于存储信息码的值 // 左边界值和右边界值,以及左右边界值的差值 double left = 0, right = 1, d = 1; Unit u1 = new Unit(); while (true) { String...
  • 本发明属于图片处理技术领域,尤其涉及一种基于Huffman编码的图像再压缩处理方法。背景技术:目前,业内常用的现有技术是这样的:由于各种新型传感器的出现,图像质量得到了巨大的提升,随之而来的数据量对图像的...
  • 而这种降低码率的过程,被称为压缩编码或新源编码.这节介绍一些基础的压缩编码思想与方法,为后面Opus语音编码做基础准备.压缩编码又可以分为无损压缩,有损压损,混合压缩无损压缩编码有:莫尔斯哈夫曼游程编码RLC算术...
  • 1) #得到代价函数的初始梯度 gradient = gradient_function(theta, X, Y) #不断迭代的过程 while not all(abs(gradient) ): #更新迭代公式 theta = theta - alpha * gradient #更新迭代所用的梯度 gradient = ...
  • 1. 压缩原理deflate算法 a) LZ77 算法原理 b) Huffman算法原理 ...对于未知规则的数据:则是采用一种更高效的编码来代替原有数据的编码。一种方法是找出数据中那些重复出现的字符串,然后用更短的符号代替...
  • 其目的是通过映射改变图像数据的特性,使之更有利于压缩编码。(2)量化器。在限失真编码中要对映射后的数据进行量化,若量化是对映射后的数据逐个的进行的,则称标准量化,若量化是成组的进行的,则称矢量量化,量化...
  • Huffman编码可用于数据压缩已经是人所共知的事实。但是具体说到如何实现编码,至少作者在实验中是遇到问题了的!对数值串:[22006 22006 44004 87999 175989] --1*5进行huffman编码,下面左列是要编码的数值,右列...
  • 1、视频压缩编码标准H.264基本概念 从0开始,以一个H.264码流分析器的形式,解析H.264的压缩算法 高层语言解析 NAL解析 各层语法元素解析 由语法元素重建图像 2、参考代码JM的研究:基本结构和实现方式 H.264\X...
  • 这个程序是研一上学期的课程大作业。当时,跨专业的我只有一点 C...源码托管在 Github:点此打开链接以下为完整的作业报告:一、问题描述:名称:基于哈夫曼编码的文件压缩解压目的:利用哈夫曼编码压缩存储文件,节...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 171,466
精华内容 68,586
关键字:

压缩是编码的过程吗