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

news2024/12/25 22:13:47

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 pixels
  V_PRED,         // Vertical
  H_PRED,         // Horizontal
  D45_PRED,       // Directional 45  degree
  D135_PRED,      // Directional 135 degree
  D113_PRED,      // Directional 113 degree
  D157_PRED,      // Directional 157 degree
  D203_PRED,      // Directional 203 degree
  D67_PRED,       // Directional 67  degree
  SMOOTH_PRED,    // Combination of horizontal and vertical interpolation
  SMOOTH_V_PRED,  // Vertical interpolation
  SMOOTH_H_PRED,  // Horizontal interpolation
  PAETH_PRED,     // Predict from the direction of smallest gradient
  NEARESTMV,
  NEARMV,
  GLOBALMV,
  NEWMV,
  // Compound ref compound modes
  NEAREST_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 pixels
  UV_V_PRED,         // Vertical
  UV_H_PRED,         // Horizontal
  UV_D45_PRED,       // Directional 45  degree
  UV_D135_PRED,      // Directional 135 degree
  UV_D113_PRED,      // Directional 113 degree
  UV_D157_PRED,      // Directional 157 degree
  UV_D203_PRED,      // Directional 203 degree
  UV_D67_PRED,       // Directional 67  degree
  UV_SMOOTH_PRED,    // Combination of horizontal and vertical interpolation
  UV_SMOOTH_V_PRED,  // Vertical interpolation
  UV_SMOOTH_H_PRED,  // Horizontal interpolation
  UV_PAETH_PRED,     // Predict from the direction of smallest gradient
  UV_CFL_PRED,       // Chroma-from-Luma
  UV_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.coloradmin.cn/o/1927906.html

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

相关文章

自建文件分享平台Pingvin Share系统

Pingvin Share可以用来代替 WeTransfer 等的分享网站,如果你有自己的服务器,可以支持通过 Docker 部署或者 Stand-alone 部署。 功能介绍 完全自建:轻松使用私有服务器搭建文件共享平台 完全隐私:你的文件只属于你!不…

相交链表+判断环型链表+求环型链表的入口节点

链表OJ题 一.相交链表二.判断环型链表三.求环型链表的入口节点 一.相交链表 相交链表 相交:两个链表从头开始遍历,尾节点一定是同一个节点。 情况一:当两个链表长度相同时: 情况二:当两个链表长度不同时&#xff1…

【详解】Spring Cloud概述

🎥 个人主页:Dikz12🔥个人专栏:Spring学习之路📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 1. 认识微服务 1.1 单体架构 1.2 集群和分布式架构 1.3 集群和分布式…

如何利用windows本机调用Linux服务器,以及如何调用jupyter界面远程操控

其实这篇文章没必要存在,教程太多了 参考博客(1 2 3),如侵删 奈何网上的大神总是会漏掉一些凡人遇到的小问题 (1) 建议下载PuTTy for windows,从而建立与远程服务器的SSH连接 需要确认目标服…

nodejs安装部署运行vue前端项目

文章目录 1.安装nodejs2.安装Vue CLI1.配置npm镜像源:2.安装Vue CLI:3.创建Vue项目4.启动Vue项目5.Express 1.安装nodejs Node.js 是一个免费、开源、跨平台的 JavaScript 运行时环境,它让开发人员能够创建服务器、Web 应用、命令行工具和脚…

【C++PythonJava】字符处理详细解读_字符_ASCLL码_字母数字转换_算法竞赛_开发语言

文章目录 Beginning1)ASCLL 码2)大小比较2)判断数字字符3)字符、数字间的相互转换End Beginning 在 C 中,字符和整数有着密不可分的关系。原因就是在计算机中,字符是以一种较 ASCLL 码的整数存储的。自然&…

SpringSecurity框架【认证】

目录 一. 快速入门 二. 认证 2.1 登陆校验流程 2.2 原理初探 2.3 解决问题 2.3.1 思路分析 2.3.2 准备工作 2.3.3 实现 2.3.3.1 数据库校验用户 2.3.3.2 密码加密存储 2.3.3.3 登录接口 2.3.3.4 认证过滤器 2.3.3.5 退出登录 Spring Security是Spring家族中的一个…

C语言之qsort函数

一、qsort 1.库函数qsort qsort是库函数&#xff0c;直接可以用来排序数据&#xff0c;底层使用的是快速排序。 qsort函数可以排序任意类型的数据。 2.头文件 #include<stdlib.h> 3.参数讲解 void*类型的指针是无具体类型的指针&#xff0c;这种类型的指针的不能直接解…

Still-Moving效果惊艳!无需定制视频数据,DeepMind让文生定制视频变得简单!

文章链接&#xff1a; https://arxiv.org/pdf/2407.08674 github链接&#xff1a; https://still-moving.github.io/ Still-Moving 自定义文本生成图像&#xff08;T2I&#xff09;模型最近取得了巨大进展&#xff0c;尤其是在个性化、风格化和条件生成等领域。然而&#xff0c…

星辰计划02-独特视角的spring动态代理

承接上一文 动态代理 &#xff0c;这里探究spring 动态代理 会话1&#xff1a;spring动态代理 quick start &#x1f467;哥哥&#xff0c;哥哥&#xff0c;spring 怎么去搞动态代理的呢&#x1f468; 来来来&#xff0c;听我细细来说 quick start通过Spring的 ProxyFactory…

学习小记-Nacos的服务注册与发现原理

服务注册&#xff1a; 当一个服务实例启动时&#xff0c;它会向 Nacos 服务器注册自己的信息&#xff0c;包括 IP 地址、端口号、元数据&#xff08;如服务版本、区域信息等&#xff09;。服务实例使用 Nacos API 发送注册请求&#xff0c;Nacos 服务器接收请求并存储服务实例信…

浅聊授权-spring security和oauth2

文章目录 前言自定义授权spring security授权oauth2授权概述 前言 通常说到授权&#xff0c;就会想到登录授权、token令牌、JWT等概念&#xff0c;授权。顾名思义就是服务器授予了客户端访问资源的权益&#xff0c;那么要实现授权有几种方案呢&#xff0c;三种授权方式在公司项…

Python个性化电影推荐系统的设计与实现

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

客户端通过服务器进行TCP通信(三)

一. 对TCP的基础讲解 服务端 1. 首先创建一个套接字&#xff0c;TCP是面向字节流的套接字&#xff0c;故需要使用SOCK_STREAM 2. 然后使用bind()函数将套接字与服务器地址关联(如果是在本地测试&#xff0c;直接将地址设置为217.0.0.1或者localhost&#xff0c;端口号为1000…

Mac电脑下运行java命令行出现:错误: 找不到或无法加载主类

mac 电脑 问题复现 随手写了一个main方法&#xff0c;想用命令行操作 进入 BlockDemo.java 所在目录&#xff1a; wnwangnandeMBP wn % cd /Users/wn/IdeaProjects/test/JianZhiOffer/src/main/java/com/io/wn wnwangnandeMBP wn % ls -l total 16 -rw-r--r-- 1 wangnan …

前端框架学习之 搭建vue2的环境 书写案例并分析

目录 搭建vue的环境 Hello小案例 分析案例 搭建vue的环境 官方指南假设你已经了解关于HTML CSS 和JavaScript的中级知识 如果你刚开始学习前端开发 将框架作为你的第一步可能不是最好的主意 掌握好基础知识再来吧 之前有其他框架的使用经验会有帮助 但这不是必需的 最…

【JavaScript 算法】二分查找:快速定位目标元素

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、算法原理二、算法实现三、应用场景四、优化与扩展五、总结 二分查找&#xff08;Binary Search&#xff09;是一种高效的查找算法&#xff0c;适用于在有序数组中快速定位目标元素。相比于线性查找&#xff0c;二分查找…

【java】力扣 买卖股票的最佳时机II

文章目录 题目链接题目描述思路代码 题目链接 122.买卖股票的最佳时机II 题目描述 思路 这道题和121.买卖股票的最佳时机 有所不同&#xff0c;不同点在于&#xff0c;这道题的股票可以多次买卖(但是要在买之前先卖掉) 详细思路请看链接的文章【java】力扣 买卖股票的最佳时…

Milvus核心设计(2)-----TSO机制详解

目录 背景 动机 Timestamp种类及使用场景 Guarantee timestamp Service timestamp Graceful time Timestamp同步机制 主流程 时间戳同步流程 背景 Milvus 在设计上突出了分布式的设计,虽然Chroma 也支持分布式的store 与 query。但是相对Milvus来说,不算非常突出。…

Linux--USB驱动开发(二)插入USB后的内核执行程序

一、USB总线驱动程序的作用 a&#xff09;识别USB设备 1.1 分配地址 1.2 并告诉USB设备(set address) 1.3 发出命令获取描述符 b&#xff09;查找并安装对应的设备驱动程序 c&#xff09;提供USB读写函数 二、USB设备工作流程 由于内核自带了USB驱动,所以我们先插入一个U…