AV1 编码标准中帧内预测技术概述

AV1 编码标准帧内预测

AV1(AOMedia Video 1)是一种开源的视频编码格式,旨在提供比现有标准更高的压缩效率和更好的视频质量。在帧内预测方面,AV1相较于其前身VP9和其他编解码标准,如H.264/AVC和H.265/HEVC,进行了显著的增强和扩展。

  1. 帧内预测模式的扩展:AV1支持更多细化的角度模式,从VP9的10种模式扩展到了56种模式。这些模式包括8个基础角度模式,每个基础角度模式两侧以3°为步长分布有6个扩展角度。

  2. 非角度模式的新增:除了角度模式,AV1还新增了多种非角度模式,如Smooth模式(垂直、水平和垂直+水平)、DC模式、Paeth模式、CFL(Chroma from Luma)模式、调色板模式以及基于递归滤波的预测模式 。

  3. 帧内预测的实现:在AV1的参考软件libaom-av1中,帧内预测从函数av1_predict_intra_block_facade()开始,并涉及到构建intra predictor,处理调色板模式,以及在非调色板模式下,准备周边块的参考信息 。

  4. 帧内预测的性能:AV1的帧内预测技术通过利用空间和时间上邻近像素的相关性,减少了数据的冗余,提高了压缩效率 。通过对比实验,使用帧内预测技术在某些编码模式中可以实现2%的性能提升 。

  5. 帧内预测的优化方法:AV1采用了自适应环路滤波算法来减少预测残差的边缘伪影,并采用了可变大小的预测块和扩展的预测模式集合来增强预测的适应性和灵活性。此外,还利用了深度学习技术来优化帧内预测的模式选择和残差计算过程。

  6. 帧内预测的局限性与改进空间:尽管AV1的帧内预测技术在提高编码效率方面取得了显著成果,但在处理快速运动和复杂纹理的场景下可能效果不佳,需要进一步优化
    。未来的研究可以关注新型帧内预测算法的开发,如深度学习在帧内预测中的应用,以及帧内预测技术与其他视频编码技术的融合与优化 。

  7. 帧内预测的未来发展趋势:帧内预测技术将朝着更加智能化、自适应化的方向发展,深度学习的应用将使帧内预测更加精准,同时新技术如人工智能、云计算、物联网的发展也将为帧内预测技术带来新的挑战和机遇。

方向帧内预测

  • 方向性内预测用于模拟局部纹理,它使用一组边缘方向。存在八个名义上的方向性内预测模式,每个模式都有一个与之关联的角度偏移量集合,这些偏移量以介于-3到+3之间的整数值进行索引,其中名义角度位于0度。预测方向是通过将角度偏移量加到名义内角度上来得到的。总共有56个方向性内预测模式。
  • 八个名义方向预测模式对应的角度分别为:45°、67°、90°、113°、135°、157°、180°、203°。
  • 名义方向预测模式和相关的角度偏移索引都会被信号化,名义模式索引会在相关的角度偏移索引之前进行信号化。对于较小的块尺寸,即4×4、4×8和8×4,扩展内预测角度精度带来的额外编码增益通常是边缘的;因此,在这些情况下,通常只使用名义模式,不应用或信号化任何角度偏移。
    在这里插入图片描述

非方向帧内预测

除了方向性内预测模式外,还有五种非方向性内预测模式:DC_PRED、SMOOTH、SMOOTH_H、SMOOTH_V和Paeth,这些模式通常用于平滑区域的预测。

  • DC_PRED 模式:通过平均顶部和左侧邻近块的重建样本来生成当前块的预测样本。
  • SMOOTH_V 和 SMOOTH_H 模式:分别沿垂直和水平方向使用二次插值生成预测值,而SMOOTH 模式则使用沿两个方向的二次插值结果的平均值来生成预测值。用于二次插值的样本包括来自顶部和左侧邻近重建块的重建样本,以及通过顶部和左侧重建样本估计的右侧和底部边界的样本。
  • Paeth 预测模式:如第5图所示,根据其顶部(T)、左侧(L)和左上角(TL)的参考样本预测每个样本。在这些参考样本中,与(T + L – TL)的值最接近的那个值被选为预测样本。
    • Paeth模式是以人名命名的模式, 有个人在开发 PNG 图像编码时发明了Paeth预测。
      在这里插入图片描述

这些非方向性内预测模式适用于预测那些在图像中没有明显方向性纹理的区域,例如天空或肤色等平滑渐变的区域。通过使用不同的预测模式,编码器能够更灵活地适应图像内容的变化,从而提高编码效率和压缩性能。

递归帧内预测

在AV1中定义了五种递归内预测模式。每种模式指定了一组八个7-tap(7个系数的)滤波器。给定所选的递归内预测模式索引(0到4),当前块被划分为4×2子块的倍数。对于每个4×2子块,每个样本通过使用来自顶部和左侧块的七个相邻样本作为输入进行7-tap插值来预测,如图6所示。在每个4×2子块内不同坐标的样本应用不同的滤波器。这个预测过程在一个编码块内对4×2子块逐个执行,并且为每个4×2子块生成的预测样本可以用来预测下一个4×2子块。递归内预测的一个例子如图所示。

  1. 模式选择:编码器从五种递归内预测模式中选择一种,每种模式对应一组特定的7-tap滤波器系数。

  2. 块划分:当前编码块根据所选模式被划分为多个4×2像素的子块。

  3. 样本预测:对于每个4×2子块,根据所在位置,使用来自顶部和左侧的七个样本进行7-tap插值来预测子块内的每个样本。

  4. 滤波器应用:每个子块内的样本根据其在子块中的位置使用不同的滤波器。这意味着在子块的不同位置,预测使用的权重组合会有所不同。

  5. 递归预测:一旦一个4×2子块的预测样本生成,这些样本可以作为预测下一个子块的参考,从而实现递归效果。

  6. 过程重复:这个过程在编码块内对每个4×2子块重复进行,直到整个块的预测完成。
    在这里插入图片描述

递归内预测模式特别适合于预测具有明显方向性纹理的区域,例如边缘或斜线。通过递归地利用已预测的样本来预测新的样本,这种方法可以有效地捕捉和延续图像中的方向性特征。

依赖亮度的色度预测

色度从亮度(Chroma from Luma,简称CfL)是一种仅应用于色度编码块的内预测模式。CfL预测模式通过一个线性模型,使用相应的重建亮度样本来推导色度预测样本。当相应的亮度和色度分辨率不同时,例如在4:2:0和4:2:2色度子采样格式中,需要在将重建的亮度样本输入CfL模式之前进行子采样。预测块是色度直流(DC)分量和缩放的亮度交流(AC)分量之和。一个块的DC分量由块的平均值组成,而AC分量是通过从块中移除DC分量来得到的。在CfL模式中,模型参数,例如应用于亮度AC分量的缩放因子,在编码过程中计算并信号化到比特流中。CfL预测模式的流程图在图中展示。

CfL模式的工作原理:

  1. 适用性:CfL模式专门用于色度编码块,不适用于亮度块。

  2. 分辨率差异处理:如果亮度和色度的分辨率不同,需要先对亮度样本进行子采样,以匹配色度分辨率。

  3. 线性模型:CfL使用一个线性模型来预测色度样本,该模型基于对应位置的亮度样本。

  4. DC和AC分量

    • DC分量:是预测块内所有样本的平均值,代表块的直流或平均亮度水平。
    • AC分量:是亮度样本与DC分量的差值,代表块内的交流或细节信息。
  5. 预测块的计算:预测块是通过将色度的DC分量与缩放后的亮度AC分量相加得到的。

  6. 模型参数:编码过程中会计算模型参数,如亮度AC分量的缩放因子,并将其编码到比特流中,以便解码器可以正确重建色度样本。

  7. 比特流信号化:编码器在编码过程中计算出的模型参数需要通过比特流传输给解码器。

  8. 流程图:图中提供了CfL预测模式的工作流程,展示了从亮度样本到色度预测样本的转换过程。
    在这里插入图片描述
    CfL模式利用了亮度和色度之间的相关性,通过亮度信息来辅助色度的预测,从而提高编码效率,特别是在色度分辨率低于亮度分辨率的情况下。

帧内预测模式信号

对于亮度(luma)分量,内预测模式包括56个方向性内预测模式、5个非方向性预测模式和5个递归滤波模式。以下是用于信号化编码块内预测模式的过程:

  • 首先信号化语法元素y_mode,以指示应用的是八个名义上的方向性内预测模式之一还是五个非方向性内预测模式之一。
  • 如果块大小大于8×8,并且y_mode指示的是方向性内预测模式,即1到8,则进一步信号化语法元素angle_delta_y,以指示角度偏移量索引,范围在-3到+3之间。
  • 否则,如果亮度预测模式是DC_PRED,并且编码块的最大宽度和高度小于或等于32,信号化标志use_filter_intra,以指示是否应用递归内预测模式。
  • 如果use_filter_intra信号化为1,则进一步信号化filter_intra_mode,以指示应用的是五个递归内预测模式中的哪一个。

对于色度(chroma)分量,内预测模式包括56个方向性内预测模式、5个非方向性预测模式和CfL(色度从亮度)预测模式。以下是用于信号化编码块内预测模式的过程:

  • 信号化语法元素uv_mode,以指示应用的是八个名义上的方向性内预测模式之一、五个非方向性预测模式之一,还是CfL预测模式。
  • 如果块大小大于8×8,并且uv_mode指示的是方向性内预测模式,则进一步信号化语法元素angle_delta_uv,以指示角度偏移量索引,范围在-3到+3之间。
  • 否则,如果uv_mode指示CfL模式作为内预测模式,则使用缩放参数α,该参数进一步为Cb和Cr色度分量信号化。对于信号化y_mode,对于内帧和间帧的编码块应用不同的上下文。
    • 在内帧中,信号化y_mode的上下文从邻近的亮度内预测模式中派生。
    • 在间帧中,信号化y_mode的上下文从当前编码块大小中派生。
    • 对于信号化uv_mode,上下文是使用同位亮度内预测模式派生的。
      在这里插入图片描述

这个信号化过程确保了编码器能够准确地传达所需的内预测模式,以便解码器可以正确地重建编码块。通过这种方式,编码器可以根据块的内容和大小选择最合适的预测模式,从而提高编码效率和视频质量。

libaom中关于帧内预测相关代码介绍

  • av1/common/enums.h 中有关于帧内预测模式类型的相关枚举:
enum { CFL_PRED_U, CFL_PRED_V, CFL_PRED_PLANES } UENUM1BYTE(CFL_PRED_TYPE);// Note: All directional predictors must be between V_PRED and D67_PRED (both
// inclusive).
enum {DC_PRED,        // Average of above and left pixelsV_PRED,         // VerticalH_PRED,         // HorizontalD45_PRED,       // Directional 45  degreeD135_PRED,      // Directional 135 degreeD113_PRED,      // Directional 113 degreeD157_PRED,      // Directional 157 degreeD203_PRED,      // Directional 203 degreeD67_PRED,       // Directional 67  degreeSMOOTH_PRED,    // Combination of horizontal and vertical interpolationSMOOTH_V_PRED,  // Vertical interpolationSMOOTH_H_PRED,  // Horizontal interpolationPAETH_PRED,     // Predict from the direction of smallest gradientNEARESTMV,NEARMV,GLOBALMV,NEWMV,// Compound ref compound modesNEAREST_NEARESTMV,NEAR_NEARMV,NEAREST_NEWMV,NEW_NEARESTMV,NEAR_NEWMV,NEW_NEARMV,GLOBAL_GLOBALMV,NEW_NEWMV,MB_MODE_COUNT,PRED_MODE_INVALID = MB_MODE_COUNT,INTRA_MODE_START = DC_PRED,INTRA_MODE_END = NEARESTMV,DIR_MODE_START = V_PRED,DIR_MODE_END = D67_PRED + 1,INTRA_MODE_NUM = INTRA_MODE_END - INTRA_MODE_START,SINGLE_INTER_MODE_START = NEARESTMV,SINGLE_INTER_MODE_END = NEAREST_NEARESTMV,SINGLE_INTER_MODE_NUM = SINGLE_INTER_MODE_END - SINGLE_INTER_MODE_START,COMP_INTER_MODE_START = NEAREST_NEARESTMV,COMP_INTER_MODE_END = MB_MODE_COUNT,COMP_INTER_MODE_NUM = COMP_INTER_MODE_END - COMP_INTER_MODE_START,INTER_MODE_START = NEARESTMV,INTER_MODE_END = MB_MODE_COUNT,INTRA_MODES = PAETH_PRED + 1,  // PAETH_PRED has to be the last intra mode.INTRA_INVALID = MB_MODE_COUNT  // For uv_mode in inter blocks
} UENUM1BYTE(PREDICTION_MODE);// TODO(ltrudeau) Do we really want to pack this?
// TODO(ltrudeau) Do we match with PREDICTION_MODE?
enum {UV_DC_PRED,        // Average of above and left pixelsUV_V_PRED,         // VerticalUV_H_PRED,         // HorizontalUV_D45_PRED,       // Directional 45  degreeUV_D135_PRED,      // Directional 135 degreeUV_D113_PRED,      // Directional 113 degreeUV_D157_PRED,      // Directional 157 degreeUV_D203_PRED,      // Directional 203 degreeUV_D67_PRED,       // Directional 67  degreeUV_SMOOTH_PRED,    // Combination of horizontal and vertical interpolationUV_SMOOTH_V_PRED,  // Vertical interpolationUV_SMOOTH_H_PRED,  // Horizontal interpolationUV_PAETH_PRED,     // Predict from the direction of smallest gradientUV_CFL_PRED,       // Chroma-from-LumaUV_INTRA_MODES,UV_MODE_INVALID,  // For uv_mode in inter blocks
} UENUM1BYTE(UV_PREDICTION_MODE);enum {II_DC_PRED,II_V_PRED,II_H_PRED,II_SMOOTH_PRED,INTERINTRA_MODES
} UENUM1BYTE(INTERINTRA_MODE);

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

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

相关文章

EMR 集群时钟同步问题及解决方案An error occurred (InvalidSignatureException)

目录 1. 问题描述2. 问题原因3. 解决过程4. 时钟同步的重要性5. Linux 系统中的时钟同步方式6. 检查 Linux 系统时钟同步状态7. EMR 集群中的时钟同步配置8. 时钟同步对大数据组件的影响9. 监控和告警策略10. 故障排除和最佳实践11. 自动化时钟同步管理12. 时钟同步与数据一致性…

【设计模式之美】【建造型】工厂模式实战:如何设计一个DI框架;梳理流程,通过面向接口解耦对象创建

文章目录 一. 工厂模式和 DI 容器有何区别?二. DI 容器的核心功能有哪些?1. 配置解析:解耦对象创建2. 对象创建3. 对象的生命周期管理 三. 如何实现一个简单的 DI 容器?1. 最小原型设计:流程梳理2. 提供执行入口&#…

GESP C++ 三级真题(2023年9月)T1 ⼩ 杨储蓄

1、 ⼩ 杨储蓄 问题描述 ⼩ 杨共有 N个储蓄罐,编号从0到N-1。从第1天开始, ⼩杨每天都会往存钱罐里 存钱。具体来说,第i天他会挑选一个存钱罐 ɑ i ,并存 ⼊i元钱。过了D天后,他 已经忘记每个储蓄罐里都存了多少钱了&a…

git列出提交记录的文件路径

一、如何列出某次提交记录中修改过/新增的文件&#xff1f; 方法1&#xff1a;使用 git diff-tree 命令来查看某个提交记录中修改过/新增的文件。具体来说&#xff0c;你可以使用以下命令&#xff1a; git diff-tree --no-commit-id --name-only -r <commit-hash>命令解…

C++20中的constinit说明符

constinit说明符断言(assert)变量具有静态初始化&#xff0c;即零初始化和常量初始化(zero initialization and constant initialization)&#xff0c;否则程序格式不正确(program is ill-formed)。 constinit说明符声明具有静态或线程存储持续时间(thread storage duration)的…

机器人及其相关工科专业课程体系

机器人及其相关工科专业课程体系 前言传统工科专业机械工程自动化/控制工程计算机科学与技术 新兴工科专业智能制造人工智能机器人工程 总结Reference: 前言 机器人工程专业是一个多领域交叉的前沿学科&#xff0c;涉及自然科学、工程技术、社会科学、人文科学等相关学科的理论…

ozon俄罗斯ceo丨ozon平台数据分析选品神器

ozon俄罗斯ceo是玛依妮加文特。‌作为俄罗斯最大的电子商务公司Ozon Holdings的女首席执行官&#xff0c;‌玛依妮加文特被称为俄罗斯的杰夫贝索斯&#xff08;‌亚马逊CEO&#xff09;‌。‌她在公司中发挥着重要作用&#xff0c;‌不仅负责公司的日常运营和管理&#xff0c;‌…

修改表格颜色

el-table修改表头、列的背景颜色、字体样式_el-table-column背景颜色-CSDN博客 设置表头背景颜色&#xff0c;字体 <el-table :header-cell-style"rowClass" border :data"tableDataTwo" style"width: 100%"><el-table-column width&q…

数据结构初阶(C语言)-顺序表

一&#xff0c;线性表 在进行顺序表的介绍之前&#xff0c;我们先来了解下什么是线性表&#xff1a; 线性表是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串...线性表在…

2. 白盒测试

白盒测试 1. 白盒测试定义 测试软件的内部编码和基础设施&#xff0c;重点是根据预期和期望的输出检查预定义的输入。它基于应用程序的内部工作方式&#xff0c;并围绕内部结构测试。在这种类型的测试中&#xff0c;编程测试用例需要编程技巧。白盒测试的主要目标是通过软件关…

秒懂设计模式--学习笔记(9)【结构型-装饰器模式】

目录 8、装饰器模式8.1 装饰器模式&#xff08;Decorator&#xff09;8.2 装修&#xff08;举例&#xff09;8.3 化妆&#xff08;示例&#xff09;8.4 化妆品的多样化8.5 装饰器8.6 自由嵌套8.7 装饰器模式的各角色定义8.8 装饰器模式 8、装饰器模式 8.1 装饰器模式&#xff…

MySQL运维实战之ProxySQL(9.6)SQL黑名单

作者&#xff1a;俊达 利用mysql_query_rules表中的error_msg字段&#xff0c;可以实现SQL黑名单的功能。如果规则设置了error_msg&#xff0c;当SQL语句匹配这条规则时&#xff0c;proxysql会直接将error_msg的内容返回给客户端。 当遇到一些大查询严重影响数据库性能时&…

【开源项目】Rust开发复制文件夹目录结构工具

说明 由于我经常需要在多个大容量的移动硬盘中查找和新增文件&#xff0c;我希望把硬盘的目录结构放到服务器的自建网盘中&#xff0c;因此开发了这个工具&#xff0c;使得在不同硬盘之间的文件管理变得更加便捷 项目地址&#xff1a;https://github.com/VinciYan/folder_clon…

红色文化3D虚拟数字展馆搭建意义深远

在房地产与土地市场的浪潮中&#xff0c;无论是新城规划、乡村振兴&#xff0c;还是商圈建设&#xff0c;借助VR全景制作、虚拟现实和web3d开发技术打造的全链条无缝VR看房新体验。不仅极大提升了带看与成交的转化率&#xff0c;更让购房者足不出户&#xff0c;即可享受身临其境…

Linux Cgroups

Linux CGroup全称Linux Control Group&#xff0c; 是Linux内核的一个功能&#xff0c;用来限制&#xff0c;控制与分离一个进程组群的资源&#xff08;如CPU、内存、磁盘输入输出等&#xff09;。这个项目最早是由Google的工程师在2006年发起&#xff08;主要是Paul Menage和R…

能把进程和线程讲的这么透彻的,没有20年功夫还真不行【0基础也能看懂】

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

【verilog】Verilog 中的 ifdef 语法指南:Verilog-2001 与 SystemVerilog

目录 简介 Verilog-2001 中的 ifdef 基本语法 示例 1&#xff1a;Verilog-2001 风格 SystemVerilog 中的 ifdef 基本语法 示例 2&#xff1a;SystemVerilog 风格 示例 3&#xff1a;调试与发布配置 注意事项 简介 在 Verilog 硬件描述语言中&#xff0c;ifdef 是一种…

SQL Server 创建用户并授权

创建用户前需要有一个数据库&#xff0c;创建数据库命令如下&#xff1a; CREATE DATABASE [数据库名称]; CREATE DATABASE database1; 一、创建登录用户 方式1&#xff1a;SQL命令 命令格式&#xff1a;CREATE LOGIN [用户名] WITH PASSWORD 密码; 例如&#xff0c;创建…

Vue项目中禁用ESLint的几种常见方法

1. 通过 vue.config.js 禁用 这是最直接且推荐的方式&#xff0c;因为它直接在Vue CLI的配置中禁用ESLint。通过在项目根目录下创建或修改 vue.config.js 文件&#xff0c;并设置 lintOnSave 为 false&#xff0c;可以彻底禁用保存时的ESLint检查。 // vue.config.js module…

FlinkErr:org/apache/hadoop/hive/ql/parse/SemanticException

在flink项目中跑 上面这段代码出现如下这个异常&#xff0c; java.lang.NoClassDefFoundError: org/apache/thrift/TException 加上下面这个依赖后不报错 <dependency> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId…