h264编码算法由浅入深(二)霍夫曼编码
H264压缩中有个重要的算法,熵编码,熵编码分为两种cavlc(哈夫曼编码也叫变长编码)和cabac(算术编码),这些都是无损压缩编码
一 要弄懂哈夫曼编码之前先了解一下哈夫曼树
给定n个权值座位n个叶子节点,构造一颗二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树。
二 哈夫曼树构建方法
1 将整个数据排好序
2 每次取两个最小的数构成两个叶子,计算出根值,存入数据中。
3 删除两个叶子值
4 得到新的数据重复步骤1
三 图示例
四 哈夫曼编码
得到哈夫曼树之后,哈夫曼编码就容易了
做子树记为0,右子树记为1
所以A,B,C,D的哈夫曼编码分别为
111,10,110,0
五 哈夫曼解码
解码先构建一颗哈夫曼树,一般是编码后的数据对应的表也会存起来,供解码时候查询。
Bit为0表示查询左子树,bit为1表示查询又子树,叶子的权值存放的是实际的数据。