基于上下文的自适应二进制算术编码 CABAC 熵编码介绍

介绍

CABAC(Context-Based Adaptive Binary Arithmetic Coding,基于上下文的自适应二进制算术编码)是H.265/HEVC视频编码标准中使用的一种高效的熵编码技术。其核心原理是将自适应二进制算术编码与上下文模型相结合,以实现对视频数据的有效压缩。CABAC主要包括以下几个步骤:二进制化、上下文建模、二进制算术编码以及概率更新 。

  • 二进制化:将输入的语法元素转换为二进制形式。H.265/HEVC中包括截断莱斯二元化(TR)、K阶指数哥伦布二元化(EGK)和定长二元化(FL)等方法 。
  • 上下文建模:利用已编码元素的相关性,通过上下文模型对概率进行条件编码。上下文模型使用两个变量:最大概率符号MPS和概率状态索引pStateIdx。CABAC中预设了64个概率值,用于初始化概率模型 。
  • 二进制算术编码:对每个二元化后的Bin根据概率模型进行编码。CABAC使用区间划分方式,递归地保存编码区间的长度和下限。包括常规编码和旁路编码两种方式。常规编码利用自适应概率模型,旁路编码则以等概率方式进行,不更新概率状态 。
  • 概率更新:编码过程中,根据编码的符号更新概率模型。如果编码的Bin等于MPS,则增加概率索引值,表示MPS的概率增大;如果等于LPS,则减小概率索引值,表示LPS的概率增大 。

CABAC的优势在于其自适应性,能够根据视频内容的统计特性动态调整概率模型,从而提高编码效率。此外,CABAC还采用了多种二值化方案,以适应不同的编码场景。

此外,关于算术编码的原理可以参考:视频编码中算术编码原理详解。

CABAC 原理

  1. 原理框架图
    在这里插入图片描述
  2. 二值化
    • CABAC 中对不同的句法元素一共应用了四种二进制化方法:一元码二元化 U截断莱斯二元化TRK 阶指数哥伦布二元化EGK定长二元化FL
    • 针对不同的语法元素, 根据其不同的概率分布特性来选择不同的二元化方案。
  3. 上下文建模
    • cabac 将 slice 片作为整个 cabac 算法的生命周期;
    • 编码中,语法元素使用的上下文概率模型都被唯一的上下文索引号 r 标识,每一个 r 涉及两个概率模型变量: 最大概率符号MPS 和 概率状态索引;
    • 在CABAC中,根据先验知识为 LPS 的概率设定了64 个代表值。概率状态索引与 LPS 的概率值一一对应,LPS 概率自适应的更新就表现为概率状态索引的变化。
    • 概率状态更新:CABAC在编码每个二进制值后,会根据编码的符号更新概率模型,这是自适应过程的一部分。上下文模型存储与每位是1或0的概率有关的参数,并根据编码的符号进行更新。CABAC 在计算的复杂度和编码效率之间作了折中,建立了一个基于查表的概率模型,将从 0 到 0.5 范围内的概率量化为 64 个值,这些概率对应于 LPS(Least ProbabilitySymbol)字符,则 MPS(Most Probability Symbol)字符的概率为 1- Plps 。字符的概率估计值被限制在表内,概率的刷新也不是去计算 P(binval|z),而是按照某种法则在表中查找。
      在这里插入图片描述
    1. 二进制算术编码
      在这里插入图片描述
  4. 旁路编码
    • 旁路编码无需对概率进行自适应更新,而是采用 0 和 1 各占 1/2 概率进行编码;为了使区间划分操作更加简便,不采用直接对区间长度二等分的方法,而采用保存编码区间长度不变 , 使区间下限 L值加倍的方法来实现区间划分 ,效果是一样的。随后进行重归一化操作;
    • 一般在近似均匀分布的符号、特定的语法元素、特定编码模式等会采用旁路编码;
      在这里插入图片描述
  5. 输出码流
    • 应用 CABAC 编码相比于其他熵编码,如 CAVLC,可以节约码率 9%~14%。
      在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/49250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

630-基于PCIe的高速模拟AD采集卡

一、产品概述 基于PCIe的一款分布式高速数据采集系统,实现多路AD的数据采集,并通过PCIe传输到存储计算服务器,实现信号的分析、存储。 产品固化FPGA逻辑,适配2路1Gsps/2路2Gsps采集,实现PCIe的触发采集&#xf…

vue3前端开发-小兔鲜项目-使用逻辑函数拆分业务模块

vue3前端开发-小兔鲜项目-使用逻辑函数拆分业务模块!其实就是把一些单独的业务代码组成一个js文件。抽离出去后,方便后面的维护。 如图,在一级分类下面新建一个文件夹。composables里面新建2个js文件。 分别封装之前的分类,和ban…

【【深入浅出FPGA内部资源CLB的解析】】

深入浅出FPGA内部资源CLB的解析 FPGA的基本组成单元: CLB资源等 详细介绍一下CLB可分为CLBLL和CLBLM两类, 这是单纯的以Xilinx旗下的FPGA的某一款为例,单纯的只是介绍个概念性的东西。SliceL和SliceM内部都包含4个6输入查找表(L…

[Spring] Spring日志

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

AI在候选人评估中的作用:精准筛选与HR决策的助力

一、引言 随着科技的迅猛发展,人工智能(AI)技术已逐渐渗透到各个行业和领域,人力资源管理(HRM)亦不例外。在候选人评估的环节中,AI技术以其高效、精准的特性,正在逐步改变着传统的招…

深度学习 —— 个人学习笔记6(权重衰减)

声明 本文章为个人学习使用,版面观感若有不适请谅解,文中知识仅代表个人观点,若出现错误,欢迎各位批评指正。 十三、权重衰减 使用以下公式为例做演示: y 0.05 ∑ i 1 d 0.01 x i ε w h e r e ε ~ N…

从PyTorch官方的一篇教程说开去(4 - Q-table来源及解决问题实例)

偷个懒,代码来自比很久之前看的书,当时还在用gym,我做了微调以升级到gymnasium当前版本,确保可以正常演示。如果小伙伴或者原作者看到了麻烦提一下,我好备注一下出处。 您的进步和反馈是我最大的动力,小伙…

外贸客户类型,到底怎么区分?

更多外贸干货及开发客户的方法,尽在微信【千千外贸干货】 在问外贸主要客户是谁?是不是觉得得一个个联系国外的商店啊?别急,今天就让我这个有12年外贸经验的老司机来给你们深度解析一下,外贸最主流的5大客户类型&#…

语音识别 语音识别项目相关笔记内容

语音识别 语音识别项目相关笔记内容 语音识别应用范畴语音识别框架语音基本操作使用scipy.io.wavfile读取wav音频文件获取采样率、长度、通道数使用numpy读取pcm格式音频文件读取wav音频文件,并绘制图像读取双声道的wav音频文件,分别绘制不同声道的波形图读取一个采样率为16k…

【Docker】Docker Desktop - WSL update failed

问题描述 Windows上安装完成docker desktop之后,第一次启动失败,提示:WSL update failed 解决方案 打开Windows PowerShell 手动执行: wsl --set-default-version 2 wsl --update

使用 vue-element-plus-admin 框架遇到的问题记录

项目打包遇到的问题: 打包语句:pnpm run build:pro 报错信息: Error: [vite]: Rollup failed to resolve import "E:/workplace_gitee/xxx/node_modules/.pnpm/element-plus2.5.5_vue3.4.15/node_modules/element-plus/es/components…

Matlab-FPGA 小数转换为定点二进制小数脚本和转coe文件格式脚本

Matlab-FPGA 小数转换为定点二进制小数脚本: % 更新于2023年6月17日,修改旋转因子文件,不修改fpga %首先明确我们的二维FFT的数组维数,此为1024*8的二维矩阵,1024行,8列 column 1024; row 8; nk[]; Ncolumn*row; fo…

【精品资料】数据安全治理解决方案(27页PPT)

引言:数据安全治理解决方案是一个综合性的体系,旨在通过策略、技术、流程和人力的有机结合,全面提升组织的数据安全防护能力,保障数据资产的安全与合规。 方案介绍:数据安全治理解决方案是组织为确保其数据资产的安全性…

Spark内核的设计原理

导读: 本期是DataFun深入浅出Apache Spark第一期的分享,主讲老师耿嘉安开场介绍了自己的从业经历,当前就职的数新网络与Spark相关的两款产品赛博数智引擎CyberEngine和赛博数据智能平台CyberData。 本次分享题目为《Spark内核的设计原理》&…

智能化一体闸门:助力行业发展

随着科技的飞速发展,智能化技术已经渗透到各个行业和领域,其中水利行业也不例外。智能化一体闸门以其高效、智能、便捷的特点,正助力着行业发展。 一、智能化一体闸门的定义与特点 智能化一体闸门,是集成了先进传感技术、自动控制…

Transformer之Swin-Transformer结构解读

写在最前面之如何只用nn.Linear实现nn.Conv2d的功能 很多人说,Swin-Transformer就是另一种Convolution,但是解释得真就是一坨shit,这里我郑重解释一下,这是为什么? 首先,Convolution是什么? Co…

java网络编程TCP和UDP协议

一、TCP 1、服务器端 package udpTest;import javax.management.MBeanRegistrationException; import java.io.*; import java.net.ServerSocket; import java.net.Socket;public class TCPService {public static void main(String[] args) {try {byte[] bufnew byte[512];Se…

什么是离线语音识别芯片?与在线语音识别的区别

离线语音识别芯片是一种不需要联网和其他外部设备支持,‌上电即可使用的语音识别系统。‌它的应用场合相对单一,‌主要适用于智能家电、‌语音遥控器、‌智能玩具等,‌以及车载声控和一部分智能家居。‌离线语音识别芯片的特点包括小词汇量、…

Python文件写入读取,文件复制以及一维,二维,多维数据存储

基础解释 在 Python 中,文件操作的模式除了 w (只写)、 a (追加写)、 r (只读)外,还有以下几种常见模式:- r :可读可写。该文件必须已存在,写操…

生成 HTTPS 证书并配置到 Nginx 的完整步骤

步骤 1: 安装 acme.sh 如果你还没有安装 acme.sh,可以通过以下命令进行安装: curl https://get.acme.sh | sh步骤 2: 生成 HTTPS 证书 使用 acme.sh 生成 forum.selectious.fun 的证书。你可以使用 standalone 模式,这意味着 acme.sh 会在…