【视频编解码-08】详说熵编码--哈夫曼编码

信息熵

信息论中,Shannon 他老人家发明了信息熵。
公式如下,它代表了信源S的熵:
在这里插入图片描述

单位:Bit/字符
那信息熵到底是什么呢?它是信息量的度量单位。不要再去想什么不确定性了,抽象的让人想去抽它,就认为它是信息的多样性吧,它的实际意义有两个:

  1. 信源S的平均信息量
  2. 编码所有符号S平均所需要的位数
    那什么是熵编码?在信息熵的极限范围内进行编码就是熵编码。例如信息熵算出来是3bit/字符,你用4bit/字符来编码,就是熵编码,你用2bit/字符来编码,就不叫熵编码,因为这种情况下,就失真了嘛。
    从这里也看以看出,信源熵是编码这个信源平均所需要的最小位数。
    所以,熵编码是无损压缩。

一段视频序列,原始信号总是有冗余的,这种冗余成为表示冗余,如果能找到最短的一段数据来表示整段视频所表示的数据量,那么折断最短的数据就是熵。
熵编码的基本思想就是大概率的符号分配短的码字,小概率的符号分配长的码字。最终使得信源平军码长最短。
哈夫曼编码可以唯一正确解码,因为任何一个哈夫曼码字都不是其他码字的前缀。

熵编码有很多种:
哈夫曼编码 (Huffman)
算术编码
行程编码 (RLE)
基于上下文的自适应变长编码(CAVLC)
基于上下文的自适应二进制算术编码(CABAC)

哈夫曼编码

哈夫曼编码是变长编码的一种,依赖于码字的概率来构造平均长度最短的编码方法;
关键步骤:建立符合哈夫曼编码规则的二叉树,即哈夫曼树;
哈夫曼树:

  • 一种特殊的二叉树,叶结点个数等于码元数,且每个终端节点带有各自的权值;
  • 加权路径长度,即根结点到叶结点的路径长度乘以权值的总和最小
    注意:在保存编码过后,huffman编码的码表也要保存。不同的信源,每个符号的编号是不同的!没有码表就无法进行解码。

有关哈夫曼编码在数据结构预算法专栏中的文章【【DSA】树-哈弗曼树详解(3)】已经说了详细的过程。

哈夫曼的缺点

  • 解码器需要知道哈夫曼树的结构,因而编码器必须为解码器保存或者传输哈夫曼编码树,增加存储空间的要求;
  • 传统的哈夫曼码字解码方式是从码流中依次读入比特,直到哈夫曼树中搜索到相应码字,这种方法增加了解码器计算的复杂度;

视频压缩系统的总体效率的提高依赖于系统中各项技术模块的性能增益。尽管预测编码和变换编码都能都有效的去除视频数据的冗余,但是真正实现压缩效果的是熵编码技术。在视频压缩系统中,熵编码总是位于系统的末端,负责对编码过程中产生的变换系数、运动矢量等信息进行信息编码,并完成最终压缩码流的组织。

除了DCT系数的熵编码外,在现代的基于块运动补偿的视频压缩系统中,熵编码还负责对运动矢量等辅助信息进行编码,但是在多数应用情况下,变换系数的编码比特栈总体码流的大部分,因此大部分视频熵编码技术的研究集中在变换系数的编码上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值