HEVC/H.265面试问题准备(PART 3. 环路滤波+熵编码)

近期因为要准备暑期实习以及后期的秋招环节,再一次温习了《新一代高效视频编码H.265/HEVC原理、标准与实现》经典书籍,现在记录下有关阅读心得以及可能面试的问题(所有的答案都是我自己思考的或者网络/书上摘抄的,因为本人水平有限,如果有错误或者需要补充可以私聊我)。

第七章. 环路后处理

1. 环路滤波主要包含哪两部份?分别针对什么问题?

  • 环路滤波主要包括 去块效应滤波DF 和 样点自适应补偿SAO 两部分。
  • 去块效应滤波针对块效应。样点自适应补偿针对振铃效应。
  • 二者都处于编码环路中,也就是说,经过环路滤波的重构像素才能作为后续编码像素的参考。
    环路滤波
    2. 造成块效应的原因。
  • 各个块变换、量化等步骤相互独立,相当于使用不同参数的滤波器滤波,各个块引入的量化误差大小和分布特性相互独立,导致相邻块边界的不连续。
  • DCT对残差进行变换,忽略了块与块之间的相关性。
  • 运动补偿过程中,使用不同图像,不同位置的参考块,导致预测残差信号在块边界处数值不连续。
  • 恶性循环,作为后续帧的参考帧,块效应会传递到后续帧。

3. HEVC中去块滤波具有较低复杂度的原因。

  • 亮色度都只针对8 * 8的块边界进行滤波。
  • 色度只有当边界两侧至少一个块是intra时,才进行滤波。
  • 滤波时,每行像素边界最多各修正3个像素值,使得各个8 * 8的块边界空间独立,便于并行滤波。
  • 先处理垂直边界,再处理水平边界,不是AVC中的穿插进行,使得CTB的解码顺序更加灵活。

4. HEVC中去块滤波的原理。

  • HEVC的去块滤波针对不同视频内容、不同编码参数具有自适应能力,即不同的块边界自适应选择是否滤波和滤波强度。比如,针对平滑区域处的不连续边界强滤波,纹理丰富区域弱滤波或者不滤波。
  • HEVC中去块滤波针对所有PU和TU边界中的8 * 8的块边界进行处理。实际上将 8 * 8的块分成两部分独立进行去块滤波,垂直边界以 8 * 4为基本单位,水平边界以 4 * 8为基本单位。
  • HEVC的去块滤波主要包括 滤波决策 和 滤波操作 两大部分。

5. HEVC中去块滤波中的滤波决策。
滤波决策根据视频内容和编码参数,确定了滤波强度和滤波参数。
滤波决策主要分为三大步骤,获取边界强度、滤波决策开关 和 滤波强弱选择。
滤波决策
① 获取边界强度

  • 获取边界强度主要是根据边界块的编码参数初步判断块边界是否需要滤波以及滤波参数。
  • 利用了预测模式(intra / inter)、参考图像、运动矢量、变换系数等信息来获取边界强度BS,取值为0、1、2,强度依次增大。
  • 亮度在BS = 1 / 2时进行滤波,色度在BS = 2时进行滤波。
    BS

② 滤波开关决策

  • 图像平坦区域的不连续边界更容易被观察到。如果边界两边像素相对平滑,但是边界处出现较大差异,此时易被人眼识别出这种不连续,需要滤波。如果边界两边像素高度变化,无需滤波。
    滤波开关
  • 滤波决策开关根据边界块内像素值的变化程度判断边界区域的内容特性,在决定是否进行滤波。
  • 计算块边界(4 * 4块首和尾行/列)两侧像素值的变化率,相加得到纹理度。纹理度小于阈值时,说明区域比较平坦,打开滤波开关。该阈值与边界两侧块的QP有关。

③ 滤波强弱选择

  • 在滤波开关打开的条件下,需要对视频内容再做更加细致的判断,进一步确定滤波强度。
  • 如果边界两边各自比较平坦,但是边界处像素差别很大,说明是视频内容所致,如下图的©。

在这里插入图片描述

  • 边界两边各自像素的变大率不大 + 边界两边像素平坦 + 边界处像素的跨度在一定的范围内 ====> 强滤波。

6. HEVC中去块滤波中的滤波操作。

  • 强滤波会对边界两侧的像素进行大范围、大幅度修正。
  • 弱滤波修正的像素范围和幅度较小,需要根据每一行像素的具体情况确定每行的滤波操作。
    如上图的©,判断出是视频自身内容导致的情况,无需对该行滤波操作。

7. HM中去块滤波中的实现。

  • 滤波顺序
    将图像分为大小相同的CTB块,按照光栅扫描对CTB处理。对每个CTB,按照Z order以CU为基本单位进行处理。
    扫描顺序
    亮色度穿插进行滤波。a ===> e ===> g ===> b ===> c ===> f ===> h ===> d
    在这里插入图片描述
  • 具体过程
    先进行水平方向的滤波(垂直边界),再进行垂直方向的滤波(水平边界)。
    具体过程
    8. 视频编码中出现振铃效应的原因。
    视频编码采用了基于块的DCT变换,在频域对变换系数进行量化。
    对于图像的强边缘,高频交流系数的量化失真在解码后会在边缘周围产生波纹现象,就是振铃效应。造成该现象的根本原因是高频信息的丢失。
    在这里插入图片描述
    9. SAO的原理。
  • 减少高频分量的失真,从像素域入手降低振铃效应:对重构曲线中出现的波峰像素添加负值进行补偿,波谷添加正值进行补偿。
  • 根据重构图像的特点,对其进行划分类别,在像素域进行补偿处理。
  • SAO分为边界补偿EO和边带补偿BO。

10. 边界补偿EO

  • 通过比较当前像素值和相邻像素值的大小对当前像素进行归类,对同类像素补偿相同数值。
  • 采用一维3像素分类模式。
    EO
  • 种类1和2补偿正值,种类3和4补偿负值,其他属于种类0,无需补偿值。

EO
11. 边带补偿BO

  • 将像素范围等分为32条边带,对于8bit,每条边带包括8个像素值。
  • 每个边带补偿相同的补偿值。
  • 一个CTB只选择4条连续的边带进行补偿。这样BO补偿值数量与EO相统一,减少对线性存储器的要求。选择哪条边带用率失真优化方法进行确定。

第八章. 熵编码

1. 熵编码的原理,去除了何种冗余?

  • 熵编码把一系列用来表示视频序列的元素符号转变为一个用来传输或存储的压缩码流,输入的符号可能为量化后的量化系数、MV、预测模式等。
  • 熵编码可以去除统计冗余。

2. 霍夫曼编码的不足?或者说为什么没有被使用?

  • 解码器必须知道霍夫曼编码树的结构,所以编码器必须为解码器保存或传输编码树,增加了存储空间的要求。
  • 解码器计算复杂度高,解码方式是从码流中一次读入比特,直到在霍夫曼树种搜索找到相应码字。

3. 指数哥伦布编码

  • 前缀 + 后缀 组成,属于变长码。用短码表示频率出现高的信息,长码表示低的信息。
  • 复杂度低,对于广义高斯信源的压缩效率也较高,零阶指数哥伦布编码常被用于参数集和片头信息的语法元素编码。

4. 算术编码

  • 算术编码是为整个输入序列分配一个码字,而不是为输入流的每个字符分配码字。
  • 基本原理:根据信源可能发生的不同符号序列的概率,把[0,1)区间划为互不重叠的子区间,子区间的宽度恰好是各符号序列的概率,符号序列与各自区间一一对应。所以区间内任意实数都可以对应符号序列,即码字。
  • 算术编码对错误很敏感,一位发生错误,整个消息译错。
  • 动态算术编码:事先知道精确的信源概率是困难和不切实际的,所以可以在编码期间估计和调整信源概率,即建模过程。

5. CABAC,基于上下文的自适应二进制算术编码

  • 将自适应的二进制算术编码与设计精良的上下文模型结合起来。

  • 编码中,每一个符号的编码都与此前编码的结果有关,根据符号流的统计特性自适应地为每一个符号分配码字。

  • 主要包括三大步骤:二进制化,上下文建模,二进制算术编码。
    CABAC
    ① 二进制化

  • 二进制化就是将给定的非二进制语法映射为二元流 Bin String。

  • 一般用码字结构比较简单的二元化方法,比如一元码、定长码、指数哥伦布码等二元化方法。HEVC中常用截断莱斯二元化TR、K阶指数哥伦布二元化和定长二元化FL。

② 上下文建模

  • 根据先验知识设置最大概率符号MPS、最小概率符号LPS和状态索引σ。其中,LPS与σ
    一一对应,会随着LPS自适应更新进行变化。
  • 根据后面逐一送进来的bit,更新LPS/MPS和σ。

③ 二进制算术编码

  • 对当前语法元素二进制化的每一个Bin,根据概率模型参数进行算术编码,得到输出码流。

6. 变换系数熵编码

① 变换系数扫描

  • 变换系数的扫描基于 4 * 4大小的子块进行,大TB分割为多个 4 * 4子块,子块内部系数按照相同方式递归扫描。
  • 扫描起始于最后一个系数,终止于DC系数。
  • 一个4 * 4子块内扫描的16个连续系数称为系数组CG。
  • 使用模式依赖的系数扫描,对于intra 4 * 4和intra 8 * 8TB,垂直预测模式对应水平扫描,水平预测模式对应垂直扫描。其他TB用对角扫描。
    扫描

② 非零系数位置信息编码

  • TB变换系数扫描后得到一维变换系数,该组系数可以根据非零系数位置信息和赋值信息完全表示。
  • 编码最后一个非零系数的位置、其余非零系数的位置、非零系数幅值。
原创文章 17 获赞 4 访问量 3960

猜你喜欢

转载自blog.csdn.net/weixin_37524256/article/details/105576174