视频编码中常用熵编码介绍
2017-10-21 15:13
309 查看
###Date: 2017/10/21
###Content:视频编码中常用熵编码方法介绍
熵编码是无损压缩的编码方法。
常见的熵编码方法:香农编码(shannon)、哈夫曼编码(huffman)、算术编码(arithmetic coding)、哥伦布编码(Golomb Codes)等。
编码举例:
考虑某条信息中可能出现的字符仅有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) 完成消息长度的解码,不再继续划分。
编码器和解码器都知道信息的长度,因此解码器的解码过程不会无限制的运行下去。实际上在解码器中需要添加一个专门的终止符,当解码器看到终止符时就停止解码。
Wikipedia:https://en.wikipedia.org/wiki/Shannon%E2%80%93Fano_coding
###Content:视频编码中常用熵编码方法介绍
1、熵编码
编码过程中按照熵原理不丢失任何信息的编码,即编码过程中不丢失信息量,保存信息熵。熵编码是无损压缩的编码方法。
常见的熵编码方法:香农编码(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/80206955、Shannon-Fano编码
参考:http://blog.csdn.net/abcjennifer/article/details/8022445Wikipedia:https://en.wikipedia.org/wiki/Shannon%E2%80%93Fano_coding
6、指数哥伦布编码
参见我的blog: http://blog.csdn.net/soaringlee_fighting/article/details/781784057、CABAC编码
参见我的blog:http://blog.csdn.net/soaringlee_fighting/article/details/782175258、CAVLC编码
参见我的blog:http://blog.csdn.net/soaringlee_fighting/article/details/78240878相关文章推荐
- [视频编码] 常用液晶屏幕的介绍
- [转]视频音频常用编码解码介绍
- [转]视频音频常用编码解码介绍
- 视频音频常用编码解码介绍
- 视频音频常用编码解码介绍
- 视频音频常用编码解码介绍
- 视频,音频编码技术概念介绍
- 各种主流音频/视频编码格式介绍(转载)
- 图像视频编码和FFmpeg(2)-----YUV格式介绍和应用
- 很好的视频基础介绍资料,264/265编码格式与mp4/mkv封装格式容器的差别
- 常用音视频编码和文件格式
- 常用接口介绍06——视频篇08——DVI接口
- 几个常用编码介绍
- 图像视频编码和FFmpeg(4)-----h264格式简单介绍
- 常用音频视频编解码介绍
- 即时通讯中视频编码技术介绍
- 音视频编码中的几种常见容器介绍
- web 开发的常用编码介绍
- 各种主流音视频编码格式介绍
- MPEG4视频编码技术介绍