近期因为要准备暑期实习以及后期的秋招环节,再一次温习了《新一代高效视频编码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时进行滤波。

② 滤波开关决策

  • 图像平坦区域的不连续边界更容易被观察到。如果边界两边像素相对平滑,但是边界处出现较大差异,此时易被人眼识别出这种不连续,需要滤波。如果边界两边像素高度变化,无需滤波。
  • 滤波决策开关根据边界块内像素值的变化程度判断边界区域的内容特性,在决定是否进行滤波。
  • 计算块边界(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像素分类模式。
  • 种类1和2补偿正值,种类3和4补偿负值,其他属于种类0,无需补偿值。


11. 边带补偿BO

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

第八章. 熵编码

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

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

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

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

3. 指数哥伦布编码

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

4. 算术编码

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

5. 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变换系数扫描后得到一维变换系数,该组系数可以根据非零系数位置信息和赋值信息完全表示。
  • 编码最后一个非零系数的位置、其余非零系数的位置、非零系数幅值。

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

  1. 二、对HEVC/H.265视频编解码器进行隐写的基本思路

    二.对HEVC/H.265视频编解码器进行隐写的基本思路 概述 1.视频隐写的基本思路 2.视频隐写的举例说明 3.结尾 概述 其实对视频隐写.图像隐写或是音频隐写,基本的思路都是一样的:读取原始图像 ...

  2. PotPlayer不支持S/W HEVC(H.265)解码的解决方法

    PotPlayer播放MKV格式的视频时跳出视窗显示:不支持S/W HEVC(H.265)解码,按下寻找编解码器,请安装相应的解码器. 解决方法: 1.开启浏览器,打开「FFMPEG64.DLL」这个 ...

  3. 高效视频编码 (HEVC) -H.265(结构解析)

    版本 HEVC (H.265) 规范的第一个版本于 2013 年 4 月发布.该标准的版本如下: ITU-T H.265 (V1) (04/2013) http://handle.itu.int/11 ...

  4. HEVC/H.265编码HM码率控制

    HEVC/H.265编码标准HM平台码率控制流程 研究生期间了解过HM平台的码率控制过程,现在时隔2年多又回顾了一下HM平台的码控流程,发现相较之前多了CpbSaturationEnabled这么个机 ...

  5. 让CEF支持HEVC(H.265)视频播放

    HEVC(H.265)有高昂的版权费用这个是众所周知的,所以现在绝大多数浏览器默认都不具备HEVC解码能力,这一点可以通过caniuse.com看到: 可以看到,基本上只有Apple是HEVC的主要支 ...

  6. 修改Chromium源码实现HEVC/H.265 4K视频播放

    本文作者:蔡斯杰,字节跳动互娱前端业务负责人 公司内容生产端最近(2019/10)在推广 HEVC/H.265 的使用,这种视频编码格式对比H.264更加先进且节省带宽,虽然先进但是因为专利费的问题, ...

  7. HEVC/H.265(1)——入门初步了解

    一.引子 说到H.265,个人的初始印象就是比H.264高端了那么一些的编码标准,再就是在学校的BT上下的那个好多播放器都播放不了,只有potplayer等一小部分未来播放器能播放的权利的游戏HEVC ...

  8. 【miscellaneous】最新HEVC/H.265 4K视频,显卡解码测试

    转载自:http://bbs.zol.com.cn/diybbs/d34441_76103.html 4K这个概念也在最近几年开始流行了起来,无论是4K显示器.4K电视盒子,还是4K游戏对硬件的要求也 ...

  9. HEVC (H.265)介绍(转)

    [Liupin]: 这是一篇简单介绍H.265文章,我接触和开发H.265二年来,H.265技术在行业内接收速度比H.264快多了,现在国际和国内各大公司都在进行H.265应用,不管是IC设计还是H. ...

最新文章

  1. 新手探索NLP(八)——序列标注
  2. C 一个非递减数组 下标从0到n 元素的取值范围为从0到n的整数 判断其中是否有重复元素
  3. SharpGL学习笔记(一) 平台构建与Opengl的hello World
  4. 关于Oracle回收站的一些操作
  5. java MD5 并发
  6. 微信(QQ)截图时,无法保留鼠标右键菜单选项内容
  7. 进程间通信之消息队列
  8. 4.swift 知识点积累 as 闭包和函数类型
  9. 深挖基于 CSS 的变换与动画技术
  10. WebStorm导入git.exe报错 Empty git --version output:
  11. ROS2安装及使用过程中遇到的问题
  12. linux查看行数命令 set,Linux显示文件行数之nl命令详解
  13. html 字体思源_CSS3嵌入字体@font-face调用字体(思源宋体regula/PingFang SC/ttf/woff)...
  14. 使用Ehome协议将设备接入EasyCVR无法注册成功原因排查
  15. 【ROS】第一篇:ROS安装教程
  16. java的数据类型有哪些_java数据类型有哪些
  17. 软件开发常用英语单词 - 中、英、英文缩写对照
  18. Linux学习(4)-文件颜色,绿色,蓝色,白色,红色等代表的意义
  19. 爆款AR游戏如何打造?网易杨鹏以《悠梦》为例详解前沿技术
  20. sql命令手册(转载)http://www.fanqiang.com

热门文章

  1. 立象(ARGOX) 条码标签打印机通用库 PLLB(BWIN-SCAPI)
  2. leetcode|剑指offter|面试题4:二维数组中的查找
  3. js 触发 change 事件
  4. 路由与交换技术期末上机考核
  5. 03--2017同济大学电信院信息与通信工程系复试总结
  6. 如何用python写傅里叶级数
  7. 自建Alist共享网盘网站
  8. 哆啦a梦简单图画python编程_哆啦a梦怎么画简单画法,哆啦a梦简笔画带颜色,超可爱...
  9. 地理总结(三)--川南川北川东川西划分
  10. C++ 引用作为函数返回值