wordpress搭建下载站点,建筑工程完工证明格式,手机网站分享,seo技术交流论坛说明#xff1a;我们参考黄金圈学习法#xff08;什么是黄金圈法则?-模型 黄金圈法则#xff0c;本文使用#xff1a;why-what#xff09;来学习音H264视频编码。本系列文章侧重于理解视频编码的知识体系和实践方法#xff0c;理论方面会更多地讲清楚 音视频中概念的…说明我们参考黄金圈学习法什么是黄金圈法则?-模型 黄金圈法则本文使用why-what来学习音H264视频编码。本系列文章侧重于理解视频编码的知识体系和实践方法理论方面会更多地讲清楚 音视频中概念的起源以及各个概念的联系。知其然知其所以然。同时更强调知识系统的建立。
针对本文我们主要研究上一篇文章系统化学习 H264视频编码05码流数据及相关概念解读中提到的 H.264码流中的数据编码也就是哥伦布编码。解读为什么要使用哥伦布编码以及哥伦布编码到底是怎么计算的。
1 为什么H264编码中使用哥伦布编码来编码来压缩数据
我们将其拆分成2个问题为什么H264编码中使用熵编码来压缩数据以及为什么使用熵编码中的哥伦布编码来编码。
1.1 为什么H264编码中使用熵编码来压缩数据
在视频编码中熵编码方法被广泛使用主要是因为它能够有效地减少数据的冗余从而提高压缩效率。以下是使用熵编码方法的几个关键原因 信息熵的概念 信息熵是度量信息的不确定性的量。熵编码方法的核心思想是为更可能发生的事件分配更短的编码从而最小化总体编码长度接近信息熵的理论极限。 利用数据的统计特性 视频数据具有明显的统计规律性例如在自然场景中相邻像素之间存在很强的相关性。熵编码利用这些统计特性通过为高频事件分配短码字为低频事件分配长码字实现数据的有效压缩。 无损压缩 熵编码是一种无损压缩方法这意味着原始视频数据可以从压缩后的数据完全恢复不损失任何信息。 适应性 熵编码可以适应各种不同的数据源和不同的编码场景。它可以动态地根据数据的实际分布调整编码策略。 减少存储和传输成本 通过减少视频数据的大小熵编码可以显著降低存储成本和网络带宽需求这对于视频的存储和传输尤为重要。 提高编码效率 熵编码通常作为视频编码流程的最后一步对已经通过变换和量化处理过的数据进行进一步压缩从而提高整体编码效率。 兼容性和标准化 熵编码方法如哈夫曼编码、算术编码等已经被广泛地集成到视频编码标准中如H.264、H.265、VP9等这些标准确保了不同编码器和解码器之间的兼容性。 优化编码性能 熵编码可以与其他视频编码技术如帧内预测、帧间预测、变换和量化相结合共同优化编码性能。 灵活性和扩展性 熵编码方法可以根据新的压缩需求和技术进步进行调整和扩展以实现更高的压缩效率。 减少计算复杂度 相比其他一些压缩技术熵编码方法通常具有较低的计算复杂度这使得它适合于实时视频编码和解码应用。
综上所述熵编码方法在视频编码中的应用可以显著提高压缩效率降低存储和传输成本同时保持数据的无损性这些优势使其成为视频编码中不可或缺的一部分。
1.2 那么多熵编码算法为什么选择哥伦布编码
哥伦布编码Golomb coding是一种熵编码方法它与一些其他类型的编码方法有相似之处尤其是在它们都是变长编码Variable-Length Coding, VLC这一点上。但是同类型的编码算法那么多为什么视频编码中选择使用哥伦布编码而不是其他编码算法呢
主要是因为哥伦布编码具有以下几个关键优势
与信源无关哥伦布编码的编码规则与信源的概率分布无关这意味着它适用于各种类型的数据流而不需要针对特定信源调整编码规则。无需额外信息使用哥伦布编码时不需要携带额外的码表信息这简化了编码过程并减少了必要的数据传输量。压缩效率尽管哥伦布编码的压缩率可能不如霍夫曼编码等算法但在实际的视频编码应用中它提供了足够的压缩效率同时保持了较低的计算复杂度。编码复杂度低与霍夫曼编码相比哥伦布编码的运算复杂度较低这使得它更适合于需要处理大量数据的视频编码场景。适应性哥伦布编码能够适应视频数据中的不同统计特性尤其是在编码变换系数时可以有效地处理视频数据中的稀疏性。容错性哥伦布编码的结构有助于在不完美或有噪声的传输环境中保持较好的容错性这对于视频流的稳定性至关重要。广泛应用于视频编码标准哥伦布编码被广泛应用于多个视频编码标准中如H.264这表明它在实际应用中已被证明是有效的。易于实现哥伦布编码的实现相对简单易于在硬件和软件中部署这对于降低编解码器的开发和维护成本非常重要。
综上所述哥伦布编码因其简单性、适应性、以及在视频编码中的高效性成为视频编码领域中一个受欢迎的选择。
2 什么是哥伦布编码
视频编码中的哥伦布编码是一种用于压缩数据的熵编码技术它特别适合于编码那些具有几何分布特性的数值比如在视频编码中常见的变换系数。哥伦布编码能够有效地表示这种类型的数据因为它可以为频繁出现的较小数值分配较短的编码而不常见的较大数值则分配较长的编码。
哥伦布编码的基本思想是将每个待编码的非负整数转换为一个较短的二进制表示形式。这种转换基于一个简单的观察在许多自然信号中较小的数值出现的频率远高于较大的数值。
2.1 形象解读哥伦布编码
想象一下你管理着一个巨大的图书馆这个图书馆的书籍数量非常庞大而且种类繁多。每本书都有一个唯一的编码用于标识和检索。在这个图书馆中有些书籍非常受欢迎借阅的频率很高相当于小数值而有些书籍则很少被人问津相当于大数值。为了简化编码系统并节省空间你决定使用一种特殊的编码规则这就是类似于哥伦布编码的系统
编号调整首先你决定对每本书的编号进行加1处理因为图书馆中没有编号为0的书。二进制转换接着你将每本书的编号转换为二进制形式。寻找最长的0前缀在二进制编号中你从最高位开始寻找第一个1的位置1前面的所有0构成了一个序列。编码生成在找到的1前面你添加相同数量的0然后紧跟着是1后面所有的二进制位这样就形成了这本书的哥伦布编码。编码优势这种编码方式的好处在于那些编号较小即受欢迎的书籍的编码会很短因为它们的二进制表示中1出现得很快不需要太多0前缀。而不那么受欢迎的书籍虽然编号较大但它们的编码也不会太长因为它们本来就不常被借阅。解码过程当需要找到一本书时你从编码的第一个位开始向左数直到遇到第一个1然后根据1前面的0的数量确定书籍的编号从而快速检索到书籍。
通过这个比喻我们可以看到哥伦布编码如何为不同频率出现的数值提供一种高效的编码方式这与图书馆中根据书籍的受欢迎程度来优化编码和检索系统非常相似。
2.2 0阶无符号指数哥伦布编码
正常来说哥伦布编码可以拓展位k阶但是在H264中使用的是0阶指数哥伦布编码在H.264中使用ue(v)表示0阶无符号指数哥伦布编码的解码过程用se(v)表示0阶有符号指数哥伦布编码过程。0阶无符号指数哥伦布编码最后生成的比特串格式为前缀1后缀前缀和后缀的长度是相同的。假如待编码数字codeNum 50阶无符号指数哥伦布编码的步骤如下
将数字5以二进制写出5的二进制为101因为0阶指数哥伦布编码所以不用去掉低位。将上面的二进制1101加1为110留下的比特数为33-12所有需要增加前导0的个数为2因为第一步没有去掉所有这一步不进行任何操作最终生成的比特串为00110
通过这种方式哥伦布编码能够为视频编码中的变换系数提供一种高效的编码方式从而减少视频数据的总体大小实现高效视频压缩。下面是对其他不同codeNum进行编码的结果如下所示 最后总结下哥伦布编码的具体步骤 加1操作首先将待编码的数值加1。这是因为哥伦布编码需要处理非负整数而0作为一个特殊值通过加1操作可以避免在编码中单独处理。 二进制表示将加1后的数值转换为二进制形式。 寻找最长的0前缀在二进制表示中从最高位最左边开始数找到第一个1的位置1前面所有的0就构成了最长的0前缀。 编码生成在1的前面添加与0前缀长度相等的0然后在1后面放置原始二进制表示中1后面的所有位这样就形成了哥伦布编码。 解码过程解码时从编码的第一位开始向左数直到遇到第一个11前面的0的数量就是编码的长度。然后根据这个长度从1后面读取相应数量的位还原为原始数值。
2.3 扩展知识k阶无符号指数哥伦布编码
k阶无符号指数哥伦布编码步骤如下所示
1将codeNum加上2^kk-0时是1k1时是2k2时是4
2将codeNum加上2^k的数字用二进制表示
3计算二进制长度len然后在其前面加上前缀 len-1-k个0
比特串的格式位前缀1后缀。前缀 后缀 - k下面是对其他不同codeNum进行k阶无符号指数哥伦布编码的结果如下所示