Digital_Video_Concepts
  • 前言
    • 前言
  • 数字视频简介
    • 数字视频简介
    • 相关概念
    • 视频压缩
    • 权衡分析
    • 新型视频应用
    • 总结
  • 视频压缩技术
    • 数字视频压缩技术
    • 网络限制和压缩
    • 人类视觉系统
      • HVS模型
      • HVS的应用
    • 压缩技术概述
      • 数据结构和概念
      • 色度亚采样
      • 降低冗余
      • 熵编码
    • 压缩技术: 成本-收益分析
      • 变换编码技术
      • 预测编码技术
      • 其他编码技术
      • 率失真理论
    • 总结
  • 视频编码标准
    • 视频编码标准
    • 视频编码的国际标准概述
      • JPEG
      • H.261
      • MPEG-1
      • MPEG-2
      • H.263
      • MPEG-4 (Part 2)
      • AVC
      • HEVC
      • 视频质量的国际标准
    • 其他工业标准概述
      • VC-1
      • VP8
      • VP9
    • 总结
  • 视频质量度量
    • 视频质量指标
    • 压缩损失,伪像,视觉质量
      • 压缩损失:量化噪声
      • 常见的伪影
      • 影响视觉质量的因素
    • 视频质量的评估方法和指标
      • 主观视频质量评估
      • 客观视频质量评估和指标
        • 基于误差灵敏度的方法
        • 峰值信噪比
        • 基于结构相似性的方法
        • 基于信息保真度的方法
        • 时空方法
        • 基于显著性的方法
        • 网络感知方法
        • 基于噪声的质量指标
        • 客观编码效率指标
        • 基于ITU-T标准的客观的质量度量方法
    • 视频质量测量
      • 主观测量
      • 客观测量及其应用
    • 调参
      • 影响视频质量的参数
      • 参数之间的权衡
    • 总结
  • 视频编码性能
    • 视频编码性能
    • CPU速度和限制
    • 提升性能的动机
    • 对性能的考虑
      • 资源利用率最大化
      • 专用资源
      • 调整视频参数
        • 决定编码速度的因素
          • 系统配置
          • 工作负载的性质
          • 编码工具和参数
            • 独立数据单元
            • GOP结构
            • 码率控制
            • 多帧参考
            • 率失真的拉格朗日优化
            • 隔行扫描的帧/场模式
            • 自适应去块滤波器
          • 视频复杂度和格式
          • 基于GPU加速的优化
    • 性能优化方法
      • 算法优化
        • 快速算法
          • 快速变换算法
          • 快速帧内预测算法
          • 快速运动估计算法
          • 快速模式决策算法
          • 快速熵编码算法
        • 并行化方法
          • 数据分区
          • 任务并行化
          • 流水线技术
          • 数据并行化
          • 指令并行化
          • 多线程技术
          • 向量化技术
      • 编译器和代码优化
        • 编译器优化
        • 代码优化
      • 超频
      • 性能瓶颈
    • 性能度量和调整
      • 性能思考
      • 性能指标
      • 性能分析工具
    • 总结
  • 视频应用的耗电量
    • 视频应用的耗电量
    • 功耗及其限制
    • 媒体应用的工作负载
      • 媒体应用用途
    • 面向电量设计
    • 电源管理的思考
      • ACPI和电源管理
      • 操作系统电源管理
        • Linux电源管理
        • Windows电源管理
      • 处理器电源管理
      • Voltage-Frequency曲线
    • 电源优化
      • 架构级别优化
      • 算法级别优化
      • 系统整体级别优化
      • 应用级别优化
    • 电源度量
      • 度量方法论
      • 电源度量的思考
    • 测量电源的工具
      • DC电源测量系统
      • 电源测量的软件工具
    • 总结
  • 低功耗平台上的视频应用的功耗
    • 低功耗平台上的视频应用的功耗
    • 低功耗设备的重要事项
    • 低功耗平台上典型的媒体应用
      • 视频播放
      • 视频录制
      • 视频分发
      • 视频电话(会议)
    • 低功耗系统的状态
      • 简单ACPI模型的缺点
      • 待机状态
      • 低功耗状态的组合
    • 低功耗平台的电源管理
      • 电源管理的专用硬件
      • 显示器电源管理
    • 低功耗平台的思考
      • 软件设计
      • 体系结构的思考
    • 低功耗平台的电量优化
      • 快速执行然后关闭
      • Activity调度
      • 减少唤醒次数
      • 突发模式
      • 完善CPU和GPU的并行化
      • 显存带宽优化
      • 显示功耗优化
      • 存储功耗优化
    • 低功耗的度量
      • 电源的处理器信号
      • 媒体应用的功耗指标
    • 总结
  • 性能,电量以及质量的权衡
    • 性能,电量以及质量的权衡
    • 权衡分析的思考
      • 权衡分析的类型
      • 参数调整的效果
      • 优化策略
    • 权衡性能和功耗
      • Case Study
    • 权衡性能和质量
      • Case Study I
      • Case Study II
    • 权衡功耗和质量
      • Case Study
    • 总结
  • 结语
    • 结语
    • 重点和结论
    • 对未来的思考
Powered by GitBook
On this page
  • 霍夫曼编码
  • 算术编码

Was this helpful?

  1. 视频压缩技术
  2. 压缩技术概述

熵编码

Previous降低冗余Next压缩技术: 成本-收益分析

Last updated 5 years ago

Was this helpful?

考虑使用B bit来表示每个像素的一组量化系数。如果量化系数不是均匀分布的,则它们的熵将小于B bit/像素。对于一个M像素的图像块,假设每个bit可以是两个值之一,则总共有L=2MBL = 2^{MB}L=2MB个不同的像素块。

对于给定的数据集,特定的块iii出现的概率为pip_{i}pi​,其中i=0,1,2,...,L−1i = 0, 1, 2, ..., L-1i=0,1,2,...,L−1。熵编码是一种无损编码方案,其目标是使用−log2pi-log_{2}p_{i}−log2​pi​ bits编码该像素块,从而使的其平均码率为该M个像素块的熵:H=∑i=0L−1pi(−log2pi)H=\sum_{i=0}^{L-1}{p_{i}(-log_{2}{p_{i}})}H=∑i=0L−1​pi​(−log2​pi​)。熵编码为M个像素的每个块提供了一个可变长度的代码,将较小的代码长度分配给了最可能出现的像素块。在大多数视频编码算法中,量化系数通常是行程编码的,而所得的数据则会再经过一次熵编码以进一步减少统计冗余。

对于给定的块大小,霍夫曼编码是最有效和最受欢迎的可变长度编码方法,可以接近可实现的最大压缩的香农极限。其他著名的熵编码技术是算术编码和Golomb-Rice编码。

当已知近似熵特征时(例如,在输入流中,小值比大值更频繁出现时)Golomb-Rice编码特别有用。通过使用样本到样本的预测,Golomb-Rice编码算法可为每个像素产生0.25 bit的一维差分熵(每个像素的熵值范围为0~8 bits),而无需存储任何码字(code words)。Golomb-Rice编码本质上是最佳游程编码。为了比较,我们主要讨论霍夫曼编码和算术编码。

霍夫曼编码

David Huffman在1952年开发的霍夫曼编码已经成为最流行的无损熵编码算法。霍夫曼编码使用可变长度码表(code table)对源符号进行编码,而该码表是基于源符号中每个可能值的出现概率计算得出。霍夫曼编码以这样的方式表示每个源符号:对出现频率最高的源符号给以最短的编码,频率最低的源符号给以最长的编码。赫夫曼码的码字(各符号的代码)是异前置码字,即任一码字不会是另一码字的前缀,从而使其可唯一解码。

为了了解霍夫曼编码的工作原理,考虑一组分别具有概率{0.47,0.29,0.23,0.01}\{0.47, 0.29, 0.23, 0.01\}{0.47,0.29,0.23,0.01}的源符号{a0,a1,a2,a3}\{a_0, a_1, a_2, a_3\}{a0​,a1​,a2​,a3​}。首先,从左到右生成一个二叉树,将两个最不可能的符号合并到一个新的等效符号中,其概率等于两个符号的概率之和。因此,在我们的示例中,我们采用a2a_2a2​和a3a_3a3​合并形成概率为0.23+0.01=0.240.23+0.01=0.240.23+0.01=0.24的新符号b2b_2b2​。重复该过程,直到只剩下一个符号。

然后从右到左向后遍历二叉树,并将码字分配给不同的分支。在此示例中,将码字0(1 bit)分配给符号a0a_0a0​,因为这是源字母中最可能出现的符号,而码字1留给了c1c_1c1​。c1c_1c1​是其所有分支码字的前缀,从而确保独特的可解码性。在下一个分支级别,将码字10(2 bits)分配给下一个可能的符号a1a_1a1​,而将11分配给b2b_2b2​并作为其分支的前缀。因此,a2a_2a2​和a3a_3a3​分别接收码字110和111(3 bits)。图2-13显示了该过程以及最终的霍夫曼代码。

图2-13. 霍夫曼编码的例子

尽管可以使用两位码字来编码这四个符号(00,01,10,11),但由于这4个符号的概率分布并不均匀,并且每个符号的熵仅为1.584 bits,因此还有可提升的空间。如果使用霍夫曼码字,则每个符号需要1.77 bits。尽管使用霍夫曼码字,每个符号的码字长度仍然比理论的最小值(1.584 bits)还多0.186 bits,但与固定长度码字相比,霍夫曼编码已经提供了约12%的压缩率。通常,最大概率符号和最小概率符号之间的概率差异越大,霍夫曼编码提供的编码增益越大。当每个输入符号的概率是2的幂的倒数时,霍夫曼编码是最佳的。

算术编码

算术编码是无损熵编码技术。算术编码与霍夫曼编码的不同之处在于,算术编码将整个输入消息编码为0.0~1.0之间的小数,而不是将输入分成单个符号并用码字单独编码每个符号。当带编码的符号的概率分布未知,不是独立且分布不均等时,算术编码可以提供更好的压缩能力。虽然算术编码提供了最佳的压缩效果,但是却非常复杂,实际中需要专用的硬件引擎来加速执行速度。

图2-14. 算术编码的例子

为了描述算术编码的工作方式,让我们考虑三个事件(例如,文本中的三个单词)的示例:第一个事件是a1a_1a1​或b1b_1b1​,第二个事件是a2a_2a2​或b2b_2b2​,第三个事件是a3a_3a3​或b3b_3b3​。为简单起见,尽管该算法也适用于多事件,但每个步骤仅在两个事件之间进行选择。假设输入文本为b1a2b3b_1a_2b_3b1​a2​b3​,并且每个符号的概率如图2-14所示。