前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[强基固本-视频压缩] 第九章:上下文自适应二进制算术编码 第4部分

[强基固本-视频压缩] 第九章:上下文自适应二进制算术编码 第4部分

作者头像
用户1324186
发布2024-03-07 17:58:44
1160
发布2024-03-07 17:58:44
举报
文章被收录于专栏:媒矿工厂媒矿工厂

章节名:Context-adaptive binary arithmetic coding. Part 4 作者:Oleg Ponomarev 来源:https://www.elecard.com/page/article_context_adaptive_binary_arithmetic_coding_4 内容整理:李江川 主要内容:本文是对 ELECARD Video Compression Book 第九章的翻译,本章节主要介绍当仅使用帧内预测来执行编码时,对不同编码对象的二进制化过程。

简介

在继续探讨标题中提到的上下文自适应这个概念之前,我们需要对熵编码器中的二进制这个概念有一定的了解。第六章给出的编码算法的流程图告诉我们,在熵编码之前,每个块在编码期间做出的所有决策的信息会作为输入传输到熵编码器。这些信息中的大多数的数值是整数,而不是表示为0和1的二进制数。当然了,任何整数都可以用二进制数表示,这些信息会在熵编码前二值化为相应的二进制流。如果直接按照整数对应的二进制数值将其转换为码流,则意味着在二进制消息中遇到0和1的概率将几乎相等,因此算术编码器中的数据压缩比将接近零。换言之,算术编码后编码消息中的比特数将不小于编码器输入处的比特数。正因为如此,HEVC中有一个称为二进制化的特殊过程,它适用于发送到熵编码器输入端的所有数字信息。此过程将把某个图像块进行编码的过程中的所有数值转换为一组二进制比特流。接下来仅针对使用帧内预测编码的特殊情况来详细考虑这种二进制化过程。

先让我们回顾一下基本知识,视频帧在HEVC中是逐块编码的。编码顺序是从左到右,从上到下。被称为LCU的编码块是均匀覆盖整个图像的非重叠的正方形区域。在编码过程中,每个LCU可以被划分为4个称为CU的正方形子块,每个子块又可以继续被划分成4个较小的CU。作为这种划分方式的结果,初始大小的LCU可以表示为一个称为CTU的四叉树。最大四叉树深度是编码系统的一个参数,此外,标准中规定了最小CU大小为

8\times8

在帧内预测的下一个步骤中,对作为四叉树叶子节点的所有CU执行空间预测编码。对进行预测的区域称为预测单元(PU)。这里可能有两种情况。一个CU可以包含一个与CU相同大小的PU或四个大小为CU一半的正方形PU。只有当CU位于允许的最大四叉树深度时,后一种情况才可能发生。每个PU区域的预测可以使用标准中指定的35种方法之一来执行。所考虑的区域中的每个图像像素的亮度和色度分量会分别进行预测。用于预测色度分量的方法可以不同于用于预测亮度分量的方法。最后,从被编码的图像样本中减去预测值,形成二维(2D)残差信号。

在接下来的编码过程中,对CU的空间预测步骤中获得的残差信号逐块应用2D频谱变换。需要进行频谱变换的残差信号块被称为TU,TU的大小与包含它的CU的大小相同。在编码过程中,TU可以进一步划分为大小为其一半的4个方形子块。这些子块可以依次划分为更小的子块,得到的结果是一个四叉树,其叶子节点是要应用频谱变换的残差信号块。最小TU大小在标准中指定为4,最大TU大小指定为32。作为频谱变换的结果而获得的频谱样本被量化,量化步长

\triangle

由量化参数Qp的值确定。

在编码期间将LCU精确划分为CU、PU和TU的所有参数值、为每个PU选择的预测模式、通过量化残差信号获得的量化样本值等都被称为语法元素。与当前CU相关的语法元素集合完全描述了在对该块中的图像进行编码的过程中所做出的选择。这是在熵编码之前需要进行二值化的集合,二进制化是将每个语法元素的值映射到一组二进制字符或二进制元(bin)中的过程。接下来将介绍在HEVC中使用空间(帧内)预测用于描述编码图像的语法元素,以及它们相关的二值化过程。

语法元素和二值化过程

语法元素split_cu_flag用来指示是否将CU划分为更小的CU,即生成下一级四叉树的结构。它可以取两个值:如果当前CU未划分为较小的块,则取0,否则取1。split_cu_flag的值被直接发送到熵编码器作为输入,不需要额外的二进制化过程。

如果在构造四叉树时达到了允许的最大分区深度,那么下一个语法元素part_mode将出现在对CU的描述中。part_mode元素只能取两个值。如果part_mode=1,则PU的大小与CU相同。如果part_mode=0,则CU包含4个大小为其一半的正方形PU。这个语法元素的二值化过程是将其实际值反转。

接下来的三个语法元素用于描述PU的亮度分量的空间预测模式(35种可能的模式之一):prev_intra_luma_pred_flag、mpm_idx和rem_intra_luma_pred_mode。如果要根据相邻PU的模式号来计算当前PU块的预测模式号(相邻PU是位于给定PU左侧和顶部的两个PU),则语法元素prev_intra_luma_pred_flag的值为1。有三个可能的计算结果值,这三个结果的选择由语法元素mpm_idx决定,该语法元素可以取0、1和2的值。如果prev_intra_luma_pred_flag=0,则空间预测模式编号不是三个计算结果中的任何一个。在这种情况下,使用称为rem_intra_luma_pred_mode的语法元素来选择32个剩余预测模式中的一个,这个语法元素是一个五位的二进制数。语法元素prev_intra_luma_pred_flag不需要进行二值化。而mpm_idx=0被二值化为单个零、mpm_idx=1被二值化成序列10、mpm_idx=2被二值化为序列11。

PU的色度分量的预测模式号由语法元素intra_chroma_pred_mode指示,该语法元素可能的取值为0到4。如果intra_chroma_pred_mode=4,则色度分量的预测模式与亮度分量的预测模式相同。对于剩余的四个可能值,在HEVC标准中列出了相对应的预测模式编号。语法元素intra_chroma_pred_mode=4被二值化为单个零。intra_chroma_pred_mode的所有其他值通过二值化过程被映射到长度为3的二进制序列中,其中第一位总是1,其余两位是intra_chroma_pred_mode对应的二进制表示。

语法元素split_transform_flag用来表示是否将CU划分为更小的正方形TU,即TU的四叉树结构。如果该元素的值为0,则进行频谱变换的残差信号块在大小上与CU相同。否则,TU被划分为大小是CU一半的4个正方形块。语法元素split_transform_flag不需要进行二进制化。

三个语法元素cbf_cb、cbf_cr和cbf_luma用来指示当前TU所包含的色度分量和亮度分量的残差信号是否含有非零样本值,这些语法元素不需要二值化。如果元素cbf_cb、cbf_cr或cbf_luma中的任何一个是非零的,则需要对当前TU块进行更进一步的描述。该描述是使用八个不同的语法元素来实现的:last_sig_coeff_x、last_sig_coeff_y、coded_sub_block_flag、sig_coeff_flag、coeff_abs_level_greater1_flag、coeff_abs_level_greater2_flag、coeff_sign_flag和coeff_abs_level_remaining。对TU的描述从两个语法元素last_sig_coeff_x和last_sig_coeff_y开始。它们的值由给定样本遍历顺序的TU中最后一个非零谱样本的坐标(x,y)决定。当被遍历时,TU被划分为大小为原来一半的子块。TU内的子块的遍历顺序和每个子块内的系数的遍历顺序是相对应的。一共有三种不同的遍历模式:对角线、水平和垂直模式。遍历模式的选择由预测模式决定。对于较大尺寸的TU,只有对角线遍历是可行的。TU的三种遍历模式如图1所示。

图1 TU子块和块内系数的不同遍历顺序,分别对应对角线、水平和垂直模式

对TU的进一步描述是按遍历顺序访问每一个子块。首先描述包含位置(last_sig_coeff_x,last_sig_coeff_y)的子块,最后描述包含坐标(0,0)的子块。每个子块的描述从语法元素coded_sub_block_flag开始。如果子块包含非零频谱系数,则该元素的值为1,否则coded_sub_block_flag被定义为零,并且结束对当前子块的描述。

对于包含非零值的每个子块,继续使用一组语法元素sig_coeff_flag进行描述,这个语法元素在每个位置都会生成。对于子块内部的非零频谱系数,该元素的值为1,否则为0。访问子块内部的频谱系数的顺序由遍历顺序决定,仅对sig_coeff_flag=1的位置进行进一步的描述。对于这些位置,使用一组语法元素coeff_abs_level_greater1_flag,如果对应的频谱分量的绝对值大于1,则这些语法元素的值为1,否则为0。这个语法元素只有在频谱分量的绝对值小于等于8时才有效。下一个语法元素coeff_abs_level_greater2_flag指示绝对值超过2的第一个频谱分量的位置。接下来使用语法元素coeff_sign_flag继续描述每个频谱分量,该语法元素用来指示每个非零频谱分量的符号(正或负),即仅指示sig_coeff_flag=1的那些样本。对于正样本,coeff_sign_flag设置为0,而对于负样本,它被设置为1。TU块的描述以一组语法元素coeff_abs_level_remaining的生成而结束。coeff_abs_level_remaining的生成值由以下公式计算得到:

\mathrm{coeff\_abs\_level\_remaining}=|W|-1-\mathrm{coeff\_abs\_level\_greater1\_flag}-\mathrm{coeff\_abs\_level\_greater2\_flag} \quad (1)

其中,

W

代表了当前位置的频谱分量的数值,生成的coeff_abs_level_remaining不能为0。接下来给出一个详细的生成例子,需要编码的TU块如图2所示,对应的语法元素的生成结果如表2所示。遍历顺序为对角线模式。

图2 需要编码的示例TU块

表1 示例TU块生成的对应语法元素

对坐标位置last_sig_coeff_x和last_sig_coeff_y的二进制化结果由前缀和后缀组成,具体结果可见表2。

表2 坐标位置的二值化过程

语法元素coeff_abs_level_remaining的二进制化过程和坐标位置类似,但有一个额外参数k进行控制。这个参数k由前一个位置的coeff_abs_level_remaining决定,这里给出几个示例,可见表3。

表3 语法元素coeff_abs_level_remaining的二值化过程

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 媒矿工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 语法元素和二值化过程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档