精华内容
下载资源
问答
  • 视频编码常用编码介绍

    千次阅读 2018-04-13 23:35:11
    原文:...一定的信息量尽量用较少的字符来表示压缩编码的必要性电子计算机的出现使信息话社会有了数字化的特点,电脑中的信息要以数字量表示出来,...

    原文:https://blog.csdn.net/SoaringLee_fighting/article/details/78303747

    熵编码

    数据压缩编码的概念:

    编码是用一些简单的字符来表达一定的信息,例如,如果明天是晴天用1来表示,阴天就是0

    压缩是消除数据间的相关性,一定的信息量尽量用较少的字符来表示

    压缩编码的必要性

    电子计算机的出现使信息话社会有了数字化的特点,电脑中的信息要以数字量表示出来,但我们可以简单的看一下数字话了的信息数量大小:

    一片CD-ROM 650M

    cif格式视频大小352*288 彩色,4:2:0格式存储的话

    每帧大小352*288*1.5=228096B

    播放速度30帧每秒228096*30=6842880B=6.526MB

    650/6.526=99.6s

    这个问题是多媒体技术发展中的一个非常棘手的瓶颈问题,单纯靠扩大存储器容量,增加通信干线的传输率的办法是不现实的

    通过数据压缩手段把信息的数据量压下来,以压缩形式存储和传输,既紧缩节约了存储空间,又提高了通信干线的传输效率,同时也使计算机实时处理音频视频信息,保证播出高质量的视频,音频节目成为可能

    可行性:

    多媒体文本 声音 静态图像 视频图像等信源数据有极强的相关性,也就是说有大量的冗余信息,数据压缩的目的就是消除数据间的相关性,保留相互独立的信息分量

    (以视频图像为例,空间相关性、时间相关性)

    数据压缩编码的理论基础:

    信息论,从信息论的角度来看,压缩就是去掉信息中的冗余,即保留不确定的东西,去掉确定的东西(即可以推知的东西),使用一种更接近信息本质的描述来代替原有的冗余的描述,这个本质的东西就是信息量(即不确定因素)

    信息论中的信源编码理论解决的主要问题:

    (1)数据压缩的理论极限

    (2)数据压缩的基本途径。

    根据信息论的原理,可以找到最佳数据压缩编码的方法,数据压缩的理论极限是信息熵。如果要求编码过程中不丢失信息量,即要求保存信息熵,这种信息保持编码叫熵编码,是根据消息出现概率的分布特性而进行的,属于统计编码中的一类,是无损数据压缩编码。

    熵编码的基本原理;

    熵编码立在随机过程的统计基础之上的是建

    熵的概念:

    在信息论中,有这样的信息量:

    是信号 在X中出现的概率

    信源X发出的信号 ,求n个随机时间的自信息统计平均(求数学期望),即

    H(X)在信息论中称为信源X的熵,它的含义是信源X发出任意一个随机变量的平均信息量

    数学上可以证明,等概率时间的熵最大

    以n=8为例

    熵的范围:

    在编码中用熵值衡量是否为最佳编码

    若以 表示编码器输出码字的平均码长,则

    当 有冗余,不是最佳

    当 不可能

    当 最佳编码( 稍大于 )

    熵值是平均码字 的下限

    熵编码又叫熵保存编码 信息保持编码 无失真压缩编码,要求编码输出码字的平均码长,只能大于等于信源熵,若不满足这个条件,在信源编码的过程中就要丢失信息,所以信源熵是无失真信源编码,输出码字平均码长的下限

      常见的熵编码方法:香农编码(shannon)、哈夫曼编码(huffman)、算术编码(arithmetic coding)、哥伦布编码(Golomb Codes)等。

    2、可变长编码(Variable Length Coding,VLC)

      可变长编码通过给出现概率大的符号赋予较短的码字,改变码字长度达到压缩信息冗余的目的,编码和解码过程完全可逆,又称为统计编码和无失真的压缩编码方法。最常用的可变长编码为Huffman、哥伦布编码、游程长度编码。

    3、算术编码(Arithmetic coding)

       算术编码的本质是对输入流分配一个码字,而不是为每个符号分配一个码字。算术编码对整条信息(无论多长),其输出仅仅是一个小数,而且是介于0和1之间(半开区间[0,1))的二进制小数。如果算术编码对某条信息的输出为1010001111,那么表示的是小数0.1010001111,换算成十进制即为0.64。

        3.1 编码

       算术编码不是单独对一个码字进行编码,而是对整条信息进行编码。

    编码举例:

         考虑某条信息中可能出现的字符仅有a,b,c三种,我们要编码的字符串为bccb。

    (1) 假设三者出现概率一样,即p(a) = p(b) = p(c) = 1/3,将0~1区间按照概率的比例分配给三个字符a b c;

    (2) 第一个b在(0.3333, 0.6667),此时三个字符的概率调整后为p(a) = 1/4,p(b) = 2/4,p(c) = 1/4,将(0.3333, 0.6667)区间分配给三个字符。

    (3) 输入第二个字符c,c的区间为(0.5834,0.6667);

    (4) 此时概率重新更新为p(a) = 1/5,p(b) = 2/5,p(c) = 2/5,用这个概率分布划分区间(0.5834,0.6667);

    (5) 输入第三个字符c,c的区间为(0.6334,0.6667);

    (6) 更新三个字符的概率分布为p(a) = 1/6,p(b)=2/6,p(c)=3/6,用这个概率分布划分区间(0.6334,0.6667);

    (7) 最后一个字符b,得到b的区间为(0.6390,0.6501);因此只需要在这个区间中随便选择一个容易变成二进制的小数即可,比如0.64,将它变成二进制位0.1010001111,去掉没有太多意义的0和小数点,可以输出1010001111,编码结束。


    3.2 解码

      解码过程与编码大致相同,描述如下:

    (1) 解码之前假定三个字符的概率相同,并得到上面的第一幅分布图。解码时获取的二进制流为1010001111,先变成小数即为0.64;

    (2) 0.64落在字符b区间,立即输出字符b,并得到三个字符新的概率分布;

    (3) 采用新的概率分布划分b的区间,在新的划分中0.64落在字符c的区间,输出字符c,得到三个字符新的概率分布;

    (4) 采用新的概率分布划分c的区间,在新的划分中0.64落在字符c的区间,输出字符c,得到三个字符新的概率分布;

    (5) 采用新的概率分布划分c的区间,在新的划分中0.64落在字符b的区间,输出字符b;

    (6) 完成消息长度的解码,不再继续划分。

        编码器和解码器都知道信息的长度,因此解码器的解码过程不会无限制的运行下去。实际上在解码器中需要添加一个专门的终止符,当解码器看到终止符时就停止解码。


    3.3 多阶算术编码

       编码时考虑符号之间的相关性,把多个符号按照不同的上下文结构组合在一起,当作一个编码单元进行自适应算术编码,可以进一步提高编码效率。可以用“阶”表示上下文相关符号序列的长度,1阶上下文自适应统计的就是符号在某个特定的符号后面出现的概率,同样2阶、3阶上下文自适应统计的是符号在某两个、三个特定符号后出现的概率,使用多阶算术编码,使地同一符号可以在多个动态统计的上下文概率表中取得概率值较大的进行编码。

    4、Huffman编码原理

    参考:http://blog.csdn.net/abcjennifer/article/details/8020695

    5、Shannon-Fano编码

         参考:http://blog.csdn.net/abcjennifer/article/details/8022445
                 Wikipedia:https://en.wikipedia.org/wiki/Shannon%E2%80%93Fano_coding

    6、指数哥伦布编码

      参见我的blog: http://blog.csdn.net/soaringlee_fighting/article/details/78178405

    7、CABAC编码

      参见我的blog:http://blog.csdn.net/soaringlee_fighting/article/details/78217525

    8、CAVLC编码

      参见我的blog:http://blog.csdn.net/soaringlee_fighting/article/details/7824087
    8

    展开全文
  • 包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。 5、如果使用到了设计模式,建议在类名中体现出具体模式。 6、接口类中的方法和属性不要加任何修饰符号(public 也不要加),保持代码的...

    1、抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以它要测试的类的名称开始,以Test结尾。
    2、中括号是数组类型的一部分,数组定义如下:String[] args;
    3、POJO类中布尔类型的变量,都不要加is,否则部分框架解析会引起序列化错误。
    4、包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。
    5、如果使用到了设计模式,建议在类名中体现出具体模式。
    6、接口类中的方法和属性不要加任何修饰符号(public 也不要加),保持代码的简洁性,并加上有效的Javadoc注释。尽量不要在接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量。
    7、对于Service和DAO类,基于SOA的理念,暴露出来的服务一定是接口,内部的实现类用Impl的后缀与接口区别。
    8、枚举类名建议带上Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开。
    9、各层命名规约:
       A) Service/DAO层方法命名规约
         1) 获取单个对象的方法用get做前缀。
         2) 获取多个对象的方法用list做前缀。
         3) 获取统计值的方法用count做前缀。
         4) 插入的方法用save(推荐)或insert做前缀。
         5) 删除的方法用remove(推荐)或delete做前缀。
         6) 修改的方法用update做前缀。
       B) 领域模型命名规约
         1) 数据对象:xxxDO,xxx即为数据表名。
         2) 数据传输对象:xxxDTO,xxx为业务领域相关的名称。
         3) 展示对象:xxxVO,xxx一般为网页名称。
         4) POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。

    10、long或者Long初始赋值时,必须使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解。
    11、常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。
         1) 跨应用共享常量:放置在二方库中,通常是client.jar中的constant目录下。
         2) 应用内共享常量:放置在一方库的modules中的constant目录下。

    12、if/for/while/switch/do等保留字与左右括号之间都必须加空格。
    13、任何运算符左右必须加一个空格。
    14、缩进采用4个空格,禁止使用tab字符。
    15、单行字符数限制不超过120个,超出需要换行,换行时遵循如下原则:
         1)第二行相对第一行缩进4个空格,从第三行开始,不再继续缩进,参考示例。
         2) 运算符与下文一起换行。
         3) 方法调用的点符号与下文一起换行。
         4) 在多个参数超长,逗号后进行换行。
         5) 在括号前不要换行,

    16、方法参数在定义和传入时,多个参数逗号后边必须加空格。
         method(“a”, “b”, “c”);
    17、IDE的text file encoding设置为UTF-8; IDE中文件的换行符使用Unix格式,不要使用windows格式。
    18、避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。
    19、所有的覆写方法,必须加@Override注解。
    20、不能使用过时的类或方法。
    21、Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。 正例: “test”.equals(object);
    22、所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较
    23、关于基本数据类型与包装数据类型的使用标准如下:
         1) 【强制】所有的POJO类属性必须使用包装数据类型。
         2) 【强制】RPC方法的返回值和参数必须使用包装数据类型。
         3) 【推荐】所有的局部变量使用基本数据类型。

    24、定义DO/DTO/VO等POJO类时,不要设定任何属性默认值。
    25、序列化类新增属性时,请不要修改serialVersionUID字段,避免反序列失败;如果完全不兼容升级,避免反序列化混乱,那么请修改serialVersionUID值。
    26、构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在init方法中。
    27、POJO类必须写toString方法。使用IDE的中工具:source> generate toString时,如果继承了另一个POJO类,注意在前面加一下super.toString。
    28、使用索引访问用String的split方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会有抛IndexOutOfBoundsException的风险。
    29、 类内方法定义顺序依次是:公有方法或保护方法 > 私有方法 > getter/setter方法。
    30、下列情况,声明成final会更有提示性:
         1) 不需要重新赋值的变量,包括类属性、局部变量。
         2) 对象参数前加final,表示不允许修改引用的指向。
         3) 类方法确定不允许被重写。

    31、类成员与方法访问控制从严:
         1) 如果不允许外部直接通过new来创建对象,那么构造方法必须是private。
         2) 工具类不允许有public或default构造方法。
         3) 类非static成员变量并且与子类共享,必须是protected。
         4) 类非static成员变量并且仅在本类使用,必须是private。
         5) 类static成员变量如果仅在本类使用,必须是private。
         6) 若是static成员变量,必须考虑是否为final。
         7) 类成员方法只供类内部调用,必须是private。
         8) 类成员方法只对继承类公开,那么限制为protected。

    32、关于hashCode和equals的处理,遵循如下规则:
         1) 只要重写equals,就必须重写hashCode。
         2) 因为Set存储的是不重复的对象,依据hashCode和equals进行判断,所以Set存储的对象必须重写这两个方法。
         3) 如果自定义对象做为Map的键,那么必须重写hashCode和equals。
    33、不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。

    推荐使用IntelliJ IDEA插件:
    在这里插入图片描述

    展开全文
  • 计算机常用的数制及编码

    千次阅读 2017-08-14 14:05:25
    编码是采用少量的基本符号,选用一定的组合原则,以表示大量复杂多样的信息的技术。计算机是信息处理的工具,任何信息必须转换成二进制形式数据后才能由计算机进行处理、存储和传输。1.1.1.1.1.1 二进制数二进制数...
     

    数制也称计数制,是指用一组固定的符号和统一的规则来表示数值的方法。编码是采用少量的基本符号,选用一定的组合原则,以表示大量复杂多样的信息的技术。计算机是信息处理的工具,任何信息必须转换成二进制形式数据后才能由计算机进行处理、存储和传输。

    1.1.1.1.1.1       二进制数

    二进制数的表示

    我们习惯使用的十进制数是由0、1、2、3、4、5、6、7、8、9十个不同的符号组成,每一个符号处于十进制数中不同的位置时,它所代表的实际数值是不一样的。例如1999年可表示成

    1×1000+9×100+9×10+9×1

    =1×103+9×102+9×101+9×100

    式中每个数字符号的位置不同,它所代表的数值也不同,这就是经常所说的个位、十位、百位、千位……的意思。二进制数和十进制数一样,也是一种进位计数制,但它的基数是2。数中0和1的位置不同,它所代表的数值也不同。例如二进制数1101表示十进制数13。

           (11012 _ 1×23+1×22+0×21+1×20

                    _8+4+0+1_13

    一个二进制数具有下列两个基本特点:

    ·两个不同的数字符号,即0和1

    ·逢二进一

    一般我们用(    角标表示不同进制的数。例如:十进制用(    )10表示,二进制数用(    )2表示。

    在微机中,一般在数字的后面,用特定字母表示该数的进制。例如:

    B—二进制       D-十进制(D可省略)     O-八进制      H-十六进制

    1.1.1.1.1.2       二进制与其它数制

    在进位计数制中有数位,基数和位权三个要素。数位是指数码在一个数中所处的位置;基数是指在某种进位计数制中,每个数位上所能使用的数码的个数。例如:二进制数基数是2,每个数位上所能使用的数码为0和1二个数码。在数制中有一个规则,如是N进制数必须是逢N进1。对于多位数,处在某一位上的“1”所表示的数值的大小,称为该位的位权。例如,二进制第2位的位权为2,第3位的位权为4。一般情况下,对于N进制数,整数部分第i位的位权为Ni-1,而小数部分第j位的位权为N-j

    下面主要介绍与计算机有关的常用的几种进位计数制。

    1 十进制(十进位计数制)

    具有十个不同的数码符号0、1、2、3、4、5、6、7、8、9,其基数为10;十进制数的特点是逢十进一。例如:

          (101110 _1×103+0×102+1×101+1×100

    2   八进制(八进位计数制)

    具有八个不同的数码符号0、1、2、3、4、5、6、7,其基数为8;八进制数的特点是逢八进一。例如:

          (10118 _1×83+0×82+1×81+1×80

                                  _ (52110

    3   十六进制(十六进位计数制)

    具有十六个不同的数码符号0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,其基数为16,十六进制数的特点是逢十六进一。例如:

      (101116 _ 1×163+0×162+1×161+1×160

                    _ (411310

     

    表 1-1    四位二进制数与其它数制的对应表

     

    二进制

    0000

    0001

    0010

    0011

    0100

    0101

    0110

    0111

    1000

    1001

    1010

    1011

    1100

    1101

    1110

    1111

     

    十进制

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

     

    八进制

    0

    1

    2

    3

    4

    5

    6

    7

    10

    11

    12

    13

    14

    15

    16

    17

     

    十六进制

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    A

    B

    C

    D

    E

    F

     

     

    1.1.1.1.1.3       不同进制数之间的转换

    用计算机处理十进制数,必须先把它转化成二进制数才能被计算机所接受,同理,计算结果应将二进制数转换成人们习惯的十进制数。这就产生了不同进制数之间的转换问题。

    1   十进制数与二进制数之间的转换

    十进制整数转换成二进制整数

        一个十进制整数转换为二进制整数的方法如下:

    把被转换的十进制整数反复地除以2,直到商为0,所得的余数(从末位读起)就是这个数的二进制表示。简单地说就是“除2取余法”。

    例如,将十进制整数(21510转换成二进制整数

     

     

     

     

            于是(21510=(11010111)2

    十进制整数转换成二进制整数的方法清楚以后,那么,十进制整数转换成八进制或十六进制就很容易了。十进制整数转换成八进制整数的方法是“除8取余法”,十进制整数转换成十六进制整数的方法是“除16取余法”。

    (2)二进制数转换成十进制数

    把二进制数转换为十进制数的方法是:将二进制数按权展开求和即可。

    例如,将(10110011.1012 转换成十进制数。

    1×27          代表十进制数128

    0×26          代表十进制数0

    1×25          代表十进制数32

    1×24          代表十进制数16

    0×23          代表十进制数0

    0×22          代表十进制数0

    1×21          代表十进制数2

    1×20          代表十进制数1

    1×2-1         代表十进制数0.5

    0×2-2         代表十进制数0

    1×2-3         代表十进制数0.125

    于是,(10110011.1012=128+32+16+2+1+0.5+0.125=(179.625)10。同理,非十进制数转换成十进制数的方法是,把各个非十进制数按权展开求和即可。如把二进制数(或八进制数或十六进制数)写成2(或8或16)的各次幂之和的形式,然后再计算其结果。

    2 二进制数与八进制数之间的转换

    二进制数与八进制数之间的转换十分简捷方便,他们之间的对应关系是:八进制数的每一位对应二进制数的三位。

    (1 二进制数转换成八进制数

    由于二进制数和八进制数之间存在特殊关系,即81_23,因此转换方法比较容易,具体转换方法是:将二进制数从小数点开始,整数部分从右向左3位一组,小数部分从左向右3位一组,不足三位用0补足即可。

    例如,将(10110101110.110112化为八进制数。

    解:010     110      101      110  .  110      110

        ↓       ↓       ↓       ↓      ↓       ↓

         2        6       5       6   .  6        6

    于是   (10110101110.11011)2=(2656.66)8

    (2) 八进制数转换成二进制数

    方法:以小数点为界,向左或向右每一位八进制数用相应的三位二进制数取代,然后将其连在一起即可。

    例如,将(6237.4318转换为二进制数。

    解:  6      2     3      7   .  4      3      1

        ↓     ↓     ↓     ↓       ↓     ↓     ↓

       110    010   011    111   . 100    011    001

    于是    (6237.431)8=(110010011111.100011001)2

    3 二进制数与十六进制数之间的转换

    (1)二进制数转换成十六进制数

    二进制数的每四位,刚好对应于十六进制数的一位(161_24),其转换方法是:将二进制数从小数点开始,整数部分从右向左4位一组,小数部分从左向右4位一组,不足四位用0补足,每组对应一位十六进制数即可得到十六进制数。

    例1:将二进制数(101001010111.110110101)转换为十六进制数。

    解:1010      0101      0111   .   1101      1010      1000

         ↓       ↓        ↓         ↓        ↓        ↓

          A         5         7   .     D         A         8

    于是    (101001010111)2=(A57.DA1)16

    例2:将二进制数(100101101011111)2  转换为十六进制数。

    解:0100      1011      0101      1111

         ↓       ↓        ↓        ↓

         4          B        5          F

    于是    (100101101011111)2=(4B5F)16

    (1)     (2        十六进制数转换成二进制数

    方法:以小数点为界,向左或向右每一位十六进制数用相应的四位二进制数取代,然后将其连在一起即可。

    例如,将(3AB.1116转换成二进制数。

    解:3      A        B   .   1      1

       ↓      ↓      ↓       ↓     ↓

      0011    1010   1011   .  0001  0001

    于是(3AB.1116=(1110101011.00010001)2

    1.1.1.1.1.4       二进制数在计算机内的表示

    计算机内表示的数,分成整数和实数两大类。在计算机内部,数据是以二进制的形式存储和运算的。数的正负用高位字节的最高位来表示,定义为符号位,用“0”表示正数,“1”表示负数。例如,二进制数+1101000在机器内的表示为:

     

    0

    1

    1

    0

    1

    0

    0

    0

    符号位

    ASCII

    计算机中,对非数值的文字和其他符号进行处理时,要对文字和符号进行数字化处理,即用二进制编码来表示文字和符号。字符编码(Character Code)是用二进制编码来表示字母、数字以及专门符号。

    在计算机系统中,有两种重要的字符编码方式:ASCII和EBCDIC。EBCDIC主要用于IBM的大型主机,ASCII用于微型机与小型机。下面我们简要介绍ASCII码。

    目前计算机中普遍采用的是ASCII(AmericanStandard Code for Information Interchange)码,即美国信息交换标准代码。ASCII码有7位版本和8位版本两种,国际上通用的是7位版本,7位版本的ASCII码有128个元素,只需用7个二进制位(27=128)表示,其中控制字符32个,阿拉伯数字10个,大小写英文字母52个,各种标点符号和运算符号34个。在计算机中实际用8位表示一个字符,最高位为“0”。书后附录一列出了全部128个符号的ASCII码。例如,数字0的ASCII码为48,大写英文字母A的ASCII码为65,空格的ASCII码为32等等。有的计算机教材中的ASCII码用16进制数表示,这样,数字0的ASCII码为30H,字母A的ASCII为41H,…。

    EBCDIC (扩展的二-十进制交换码)是西文字符的另一种编码,采用8位二进制表示,共有256种不同的编码,可表示256个字符,在某些计算机中也常使用。
    展开全文
  • 1. 数字视频压缩的必要性和可能性 按ITU-R BT. 601建议,数字化后的输入图像格式为720*576像素,帧频为25帧/s,采样格式为4:2:2,量化精度为8bit, 则数码率:(720 * 576 + 360 * 576 + 360 * 576) * 25帧/s * 8...

    1. 数字视频压缩的必要性和可能性

    按ITU-R BT. 601建议,数字化后的输入图像格式为720*576像素,帧频为25帧/s,采样格式为4:2:2,量化精度为8bit,
    数码率:(720 * 576 + 360 * 576 + 360 * 576) * 25帧/s * 8bit = 165.888Mbit/s
    如果视频信号数字化后直接存放在650MB的光盘中,在不考虑音频信号的情况下,每张光盘只能存储31s的视频信号。

    数据压缩的理论基础是信息论。从信息论的角度来看,压缩就是去掉数据中的冗余,即保留不确定的信息,去掉确定的信息(可推知的),也就是用一种更接近信息本质的描述来代替原有冗余的描述。数据图像和视频数据中存在着大量的数据冗余和主观视觉冗余,因此图像和视频数据压缩不仅是必要的,而且也是可能的。

    1.1 空间冗余

    空间冗余也称空域冗余,是一种与像素间相关性直接联系的数据冗余。例如:数字图像的亮度信号和色度信号在空间域(X,Y坐标系)虽然属于一个随机场分布,但是他们可以看成为一个平稳的马尔可夫场。通俗讲,图像像素点在空间域中的亮度值和色度信号值,除了边界轮毂外,都是缓慢变化。因此,图像的帧内编码即以减少空间冗余进行数据压缩

    1.2 时间冗余

    时间冗余也称为时域冗余,它是针对视频序列图像而言的。视频序列每秒有25 ~ 30帧图像,相邻帧之间的时间间隔很小(例如,帧频为25Hz的电视信号,期帧间间隔只有 0.04s),使得图像有很强的相关性。因此,对于视频压缩而言,通常采用运动估值和运动补偿预测技术来消除时间冗余

    1.3 统计冗余

    统计冗余也称编码表示冗余或符合冗余。由信息论的有关原来可知,为了表示图像数据的一个像素点,只要按其信息熵的大小分配相应的比特数即可。若用相同码长表示不同出现概率的符号,则会造成比特数的浪费。如果采用可变长编码技术,对出现概率大的符号用短码字表示,对出现概率小的符号用长码字表示,则可去除符号冗余,从而节约码字,这就是熵编码的思想

    1.4 结构冗余

    在有些图像的部分区域内有着很相似的纹理结构,或是图像的各个部分之间存在着某种关系,例如自相似性等,这些都是结构冗余的表现。分形图像编码的基本思想就是利用了结构冗余。

    1.5 知识冗余

    在某些特定的应用场合,编码对象中包含的信息与某些先验的基本知识有关。这时,可以利用这些先验知识为编码对象建立模型。通过提取模型参数,对参数进行编码,而不是对图像像素值直接进行编码,可以达到非常高的压缩比。这是模型基编码(或称知识基编码、语义基编码)的基本思想

    1.6 人眼的视觉冗余

    视觉冗余度是相对于人眼的视觉特性而言。压缩视觉冗余的核心思想是去掉那些相对人眼而言是看不到的或可有可无的图像数据。对视觉冗余的压缩通常反映在各种具体的压缩编码中。如对于离散余弦变换(DCT)系数的直流与低频部分采用细量化,而对高频部分采用粗量化。在帧间预测编码中,高压缩比的预测帧及双向预测帧的采用,也是利用了人眼对运动图像细节不敏感的特性。

    2. 无失真编码和限失真编码

    . 从信息论的角度出发,根据解码后还原的数据是否与原始数据完全相同,可将数据压缩方法分为两大类:无失真编码和限失真编码。

    1)  无失真编码:

    无失真编码又称无损编码、信息保持编码、熵编码。

    指的是具体数据所含的平均信息量,定义为在不丢失信息的前提下描述该信息内容所需的最小比特数。

    熵编码事纯粹基于信号统计特性的一种编码方法,他利用信源概率分布的不均匀性,通过变长编码来减少信源数据冗余,解码后还原的数据与压缩编码前的原始数据完全相同而不引入任何失真。

    但无失真编码的压缩比较低,可达到的最高压缩比受到信源熵的理论限制:一般是2:1到5:1。最常用的无失真编码方法有哈夫曼(Huffman)编码、算术编码和游程编码(Run-Length Encoding,RLE)等。

    2)限失真编码:

    限失真编码也称有损编码、非信息保持编码、熵压缩编码。也就是说,解码后还原的数据与压缩编码前的原始数据有差别的,编码会一定程度的失真。

    限失真编码方法利用了人类视觉的感知特性,允许压缩过程中损失一部分信息,虽然在解码时不能完全恢复原始数据,但是如果把失真控制在视觉阈值一下或者控制在可容忍的限度你,则不影响人们对图像的理解,却换来了高压缩比。在限失真编码中,允许的是真愈大,则可达到的压缩比愈高。

    常见的限失真编码方法:预测编码、变化编码、矢量量化、基于模型编码等。

    3. 熵编码

    3.1 熵(Entropy):信源的平均信息量,更精确的描述为表示信源所有符号包含信息的平均比特数。

    • 信源编码要尽可能的减少信源的冗余,使之接近熵
    • 用更少的比特传递更多的信源信息

    3.2 熵编码:数据压缩中根据信源消息的概率模型使消息的熵最小化

    • 无损压缩
    • 变长压缩
    3.3 熵:

    设信源X可发出的消息符号集合为A= { ai | i = 1,2,…m }并设X发出符号ai的概率为p(ai),则定义符号ai出现的自信息量为:


    通常,式中的对数取2位底,这是定义的信息量单位为比特(bit)。

    对信源X的各符号的自信息量去统计平均,可得每个符号的平均信息量:



    称H(X)为信源X的熵 (Entropy) ,单位为bit/符号,通常也称为X的一阶熵,它的含义是信源X发出任意一个符号的平均信息量。

    例:二进制编码中,符号“1”发生的概率是p,符号“0”的发生概率是1 - p,计算二进制编码的熵。

    3.4 定长编码:

    3.5 变长编码

    3.5.1 变长编码:用不同的比特数表示每一个符号

    • 为频繁发生的符号分配短码字
    • 为很少发生的符号分配长码字
    • 比定长编码有更高的效率

    3.5.2 常用的变长编码:

    • Huffman编码
    • 算术编码
    3.6 Huffman编码:
    3.6.1 前缀码:任何码字不是其他码字的前缀
    • 如果011为一个有效码字,则0,1,01,11必不是有效码字
    • 不会引起解码歧义
    3.6.2 Huffman:
    • 二叉树
    • 树节点:表示符号或符号组合
    • 分支:两个分支一个表示“0”,另一个表示“1”


    3.6.3 Huffman的不唯一性:
    • 每次分支有两种选择:0,1

    • 相同的概率产生不同的组合
    3.6.4 缺点:
    • 数据的概率变化难于实时统计
    • Huffman树需要编码传输给解码器(对信源进行哈夫曼编码后,形成一个哈夫曼编码表,解码时,必须参照这一哈夫曼编码表才能正确解码)
    • 只有在p(xi)=1/2ki时是最优编码(由于哈夫曼编码的依据是信源符号的概率分布,故其编码效率取决于信源的统计特性。当信源符号的概率相等时,其编码效率最低;只有在概率分布很不均匀时,哈夫曼编码才会收到显著效果;当符号出现概率分布为1/2ki 型时,哈夫曼编码能使平均码长降奥信源熵值H(x),编码效率为100%)
    • 最小码字长度为1比特/符号

    3.6.5 如果有二值信源,其两个符号的概率相差很大
    • 例如:p(1)=0.0625,p(0)=0.9375则H=0.3373比特/符号,Huffman编码平均码长=1比特/符号
    • 两个符号联合编码有更高效率 
    3.6.6 编码效率:


    展开全文
  • 几种常用编码及其用法介绍

    千次阅读 2009-06-03 17:36:00
     在计算机硬件中,编码(coding)是在一个主题或单元上为数据存储,管理和分析的目的为转换信息为编码值(典型地如数字)的过程。 在软件中,编码意味着逻辑地使用一个特定的语言如C或C++来执行一个程序 ASCII与...
  • 学习数字电路必须知道的几种编码

    千次阅读 2020-05-04 16:12:55
    2-10进制编码(BCD编码) BCD码:使用一个四位二进制代码表示一位十进制数字编码方法。 一、8421码
  • 常用字符集编码详解:ASCII 、GB23…

    千次阅读 2014-12-16 20:33:14
    标题:常用字符集编码详解:ASCII 、GB2312、GBK、GB18030、unicode、UTF-8   ASCII ASCII码是7位编码编码范围是0x00-0x7F。ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。其中0x00-0x20和0x7...
  • 1. 编码编码:为了区分一系列不同的事物,将其中的每个事物用二值代码表示 编码器:由于在二值逻辑电路中,信号是以高低电平给出的,故编码器就是把输入的每一个高低电平信号变成一个对应的二进制代码 编码器...
  • 卷积编码与译码 信号在信道间传输主要会受到三个方面的影响: 信道本身对信号产生衰落,这是由于信道本身的频率响应特性就不理想,对信号造成破坏; 信道中的各种噪声,叠加在信号上改变了信号的幅度、相位、频率,...
  • H265/HEVC 常用缩写词及其含义

    千次阅读 2018-07-24 17:20:55
    B Bi-predictive:双向预测,即B帧或B条带,B条带中的CU可以采用帧内或帧间预测编码,每个预测块采用双向预测方式进行预测,B条带编码时同时使用参考图像列表0和参考图像列表1。 BLA Broken Link Access:断点...
  • 常用字符集编码详解:ASCII 、GB2312、GBK、GB18030、unicode、UTF-8 ASCII  ASCII码是7位编码编码范围是0x00-0x7F。ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。其中0x00-0x20和0x7F共33个...
  • 常用字符集编码详解:ASCII+、GB2312、GBK、GB18030、unicode、UTF-8 2011-05-09 12:45:15 标签:编码 ASCII+ GB2312 GBK GB18030  ASCII  ASCII码是7位编码编码范围是0x00-0x7F。ASCII字符集...
  • 字符串转GB2312编码后,若码值小于0XA1,则表示这不是一个汉字。 字符串转GB2321编码后,若码值小于0X80,则表示此字符串是有两个部分拼接而成。 网上得到字符串对应的编码都是直接转unsigned char,若是使用UNICODE...
  • ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。其中0x00-0x20和0x7F共33个控制字符。 只支持ASCII码的系统会忽略每个字节的最高位,只认为低7位是有效位。HZ字符编码就是早期为了在只支持7位ASCII系统中...
  • 字符编码那些事--彻底理解掌握编码知识

    万次阅读 多人点赞 2020-05-04 16:42:33
    每一个程序员都不可避免的遇到字符编码的问题,很多人在字符编码方面同样遇到不少问题,而且一直对各种编码懵懵懂懂、不清不楚。这篇文章就是针对字符编码中的一些问题进行了详细的阐述,能从根本上理解字符编码
  • OID编码规则

    2012-08-27 18:58:35
    OID(Object Identifier)的十进制数字表达方式与16进制表达方式的相互转换规则 常用OID表达的含义
  • Android开发编码规范

    千次阅读 2016-06-14 11:42:02
    编码规范对于程序员而言尤为重要,有以下几个原因: 【原因1】一个软件的生命周期中,80%的花费在于维护。 【原因2】几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护。 【原因3】编码...
  • 字符编码小记

    千次阅读 2016-02-03 14:19:54
    “字符编码”分为 字符集 和 编码方案 两个含义
  • 脉冲编码调制

    千次阅读 2019-07-23 15:12:56
    PCM:将模拟信号变为二进制信号 比如你的抽样值是2.43,4.32,经过量化后为2,4,然后又经过编码就成了010,100,这就是PCM的一般过程。...常用的二进制码有自然二进制和折叠二进制码和格雷二进制码 ...
  • 特征编码

    千次阅读 2018-11-02 16:30:02
    机器学习模型需要的数据是数字型的,因为只有数字类型才能进行计算,而我么你平时处理到的一些数据是很多是符号的,或者是中文的。所以编码是必要的,对于各种各样的特征值去编码实际上就是一个量化的过程 one-hot ...
  • 当 '^' 作为第一个字符出现在一个字符集合模式时,它将会有不同的含义。补充字符集合 一节有详细介绍和示例。 $ 匹配输入的结束。如果多行标示被设置为 true,那么也匹配换行符前的位置。 例如,/t$/ 并不会匹配 ...
  • 块截断编码图像压缩技术

    千次阅读 2020-10-04 03:20:19
    论文先介绍了当前流行的图像压缩技术,重点介绍块截断编码技术,先从理论上介绍块截断编码原理,块截断编码是一种有效、快速的数字图像压缩技术,作为一种经典的图像压缩编码,块截断编码技术的实时性很强。...
  • 编码

    千次阅读 2013-03-22 21:30:08
    本章先介绍熵的基本概念,然后介绍香农-范诺(Shannon-Fano)编码、哈夫曼(Huffman)编码、算术编码(arithmetic coding)、行程编码(RLE)和LZW编码常用的熵编码方法。 1 熵 熵(entropy)本来是热力学中用来度量热力...
  • ASCII:由来: 在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)、以及0、1等数字还有一些常用的符号(例如*...
  • js对url编码与解码

    千次阅读 2018-09-28 15:05:05
    那么,有哪些编码解码方式呢,常用的是哪些呢? 1.为什么要URL编码 在因特网上传送URL,只能采用ASCII字符集 也就是说URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号,即只有字母和数字...
  • 9种常用接口介绍

    2020-11-18 05:18:22
    有线电视和卫星电视接收设备也常用RF连接,但这种情况下,它们传输的是数字信号。  2 复合视频  不像射频接口那样包含了音频信号,复合视频(Composite)通常采用黄色的RCA(莲花插座)接头。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,440
精华内容 22,976
关键字:

常用数字编码的含义