SbTMVP

SBT-MVPSub-block Transform Motion Vector Prediction

子块变换模式下的运动矢量预测

它是为配合 SBT(Sub-block Transform,子块变换) 模式而设计的一种优化版 AMVP(Advanced Motion Vector Prediction)机制,旨在提升小尺寸、稀疏残差块的运动预测效率。


✅ 一、背景:为什么需要 SbtMVP?

🔹 问题来源:

  • SBT 模式 中,一个编码单元(CU)被划分为多个子块(如 4×4 或 8×8),但只有部分子块包含显著残差 → 只对这些"非零"子块进行变换和量化。
  • 传统 AMVP 是基于整个 PU 的运动信息预测,无法很好适应这种局部化、非均匀运动场景。
  • 如果每个子块都独立运行标准 AMVP,开销太大。

👉 因此,SbtMVP 应运而生:它是一种轻量级、高效、专用于 SBT 场景的 MV 预测方法。


✅ 二、SbtMVP 是什么?

🔹 定义:

SbtMVP(SBT-based Motion Vector Prediction) 是一种针对使用 SBT 模式 的编码块所设计的运动矢量预测机制。它通过复用邻近已编码子块的运动信息,并结合当前块的划分结构,生成更精确且低复杂度的 MV 预测值。

🎯 目标:

  • 减少 MVD 编码比特
  • 提高率失真性能(RD performance)
  • 降低计算复杂度(相比 full AMVP)

✅ 三、核心原理与工作机制

1. 基本假设:

"如果一个子块有显著残差,它的运动行为很可能与空间邻近子块相似。"

因此,SbtMVP 利用以下信息进行预测:

来源 说明
左侧子块 同一行中已编码的左边子块的 MV
上方子块 同一列中已编码的上边子块的 MV
时间候选 参考帧中对应位置子块的 MV(collocated)

2. 工作流程

步骤 1:确定当前 TU(Transform Unit)的位置和大小
  • 当前块启用 SBT → 使用 4 分之一块划分(如水平/垂直四分)

  • 例如:16×16 CU 分成 4 个 8×8 子块,仅左上角激活变换

    +--------+--------+
    | TU A | 0 |
    +--------+--------+
    | 0 | 0 |
    +--------+--------+

→ 只需为 TU A 做 MVP

步骤 2:构建 SbtMVP 候选列表

对 TU A 执行:

候选类型 获取方式
A1(左侧) 查找左侧最近的非零 TU 的 MV
B1(上方) 查找上方最近的非零 TU 的 MV
C(时间) 参考图像中同位置子块的 MV
Zero(零向量) 默认候选,用于静态区域

去重 + 排序后形成最多 3~4 个候选

步骤 3:选择最优预测器(RDO 决策)
  • 对每个候选计算预测残差
  • 选择 RD 成本最低的作为最终预测 MV
  • 发送索引 sbt_mvp_idx 到码流
步骤 4:解码端重建
  • 解码器根据相同规则重建候选列表
  • 根据 sbt_mvp_idx 选取预测 MV
  • 还原 MVD → 得到真实 MV → 进行运动补偿

✅ 四、关键技术细节

特性 说明
启用条件 当前 CU 使用 SBT 模式且 TU 尺寸 ≤ 8×8
候选数量 通常为 3 个(A1, B1, C)
是否共享 AMVP 列表 否,独立维护 SbtMVP 列表
信令开销 仅需 1~2 bit 表示 sbt_mvp_idx
复杂度 远低于 full AMVP(因候选少、范围小)

示例语法片段(伪代码):

text 复制代码
if( cu_use_sbt && tu_size <= 8x8 ) {
    sbt_mvp_flag = read_flag();  // 是否启用 SbtMVP
    if( sbt_mvp_flag )
        sbt_mvp_idx = read_bits(2);  // 2 bits for index (0~3)
}

✅ 五、举例说明:具体如何工作?

场景设定:

  • 当前 CU:16×16,采用垂直四分 SBT
  • 仅右半部分(TR 和 BR)有残差 → 激活两个 8×8 TU
  • 我们关注右上 TU(TR)
已知:
  • 左侧无 TU(同一行)
  • 上方有一个 8×8 TU(来自上一个 CU),其 MV = (12, -1)
  • 时间候选 MV = (13, 0)
  • 零向量候选 = (0, 0)
构建 SbtMVP 候选列表:
Index MV 来源
0 (12, -1) 上方(B1)
1 (13, 0) 时间(C)
2 (0, 0) Zero
编码器 RDO 结果:
  • 使用候选 0 预测时残差最小 → 选择 sbt_mvp_idx = 0
  • 发送 sbt_mvp_flag=1, sbt_mvp_idx=0
解码器行为:
  • 检测到 SBT + TU 激活
  • 构建相同候选列表
  • 读取 sbt_mvp_idx=0 → 选用 (12, -1) 作为预测 MV
  • 继续解码 MVD → 恢复真实 MV

✅ 成功实现高效预测!


✅ 六、性能收益(来自 JVET 测试)

测试配置 BD-rate 节省
Random Access (RA) ~0.5%
Low Delay (LD) ~0.3%
Screen Content (SCC) 0.8%1.2% ✅ 显著增益

特别适合文本滑动、图标移动等屏幕内容场景


✅ 七、与其他 MVP 技术对比

技术 粒度 是否专用 主要用途
AMVP PU/TU 级 通用预测
Merge PU 级 快速复用
subTMVP 子块级 局部模板匹配
SbtMVP TU 级(SBT 下) 专用于 SBT 稀疏残差块高效预测

📌 关键优势:轻量 + 精准 + 低信令开销


✅ 八、是否被 VVC 正式采用?

虽然 VVC(H.266) 没有直接命名 "SbtMVP",但它通过以下机制实现了类似思想:

  • Affine MVP:支持子块级预测
  • LMCS + Local MVP
  • SBT with simplified AMVP pruning

但在 ECM 实验模型 中,SbtMVP 作为一个显式的优化工具被评估,用于探索如何进一步压缩运动信息。


✅ 总结

项目 内容
名称 SbtMVP(Sub-block Transform Motion Vector Prediction)
所属 ECM 实验模型(如 ECM19)
核心机制 为 SBT 模式下的 TU 提供轻量级 MVP
关键优势 低复杂度、高精度、节省比特
应用场景 屏幕内容、稀疏纹理、UI 动画
性能增益 SCC 场景下可达 1%+ BD-rate 节省
相关推荐
屿行屿行2 小时前
【Linux】音视频处理(gstreamer和ffmpeg的实际应用)
linux·ffmpeg·音视频·视频编解码
watersink4 小时前
基于英伟达PyNvVideoCodec视频编解码
视频编解码
泰勒朗斯4 天前
hdr10plus_tool的使用
视频编解码
Industio_触觉智能11 天前
瑞芯微RK3562平台FFmpeg硬件编解码移植及性能测试实战攻略
ffmpeg·视频编解码·瑞芯微·rk3562·触觉智能
ivy1598683771520 天前
JM20329是一款高性能、低功耗的USB桥接芯片,实现串行接口(如SATA、IDE)与USB接口之间的数据转换。
c语言·开发语言·ide·嵌入式硬件·eureka·音视频·视频编解码
盲盒Q25 天前
《解码者:暗流》
视频编解码
骄傲的心别枯萎25 天前
RV1126 NO.48:RV1126+OPENCV在视频中添加时间戳
人工智能·opencv·计算机视觉·音视频·视频编解码·rv1126
他们叫我一代大侠1 个月前
ARMV9.7 FEAT_SME2p3 视频编解码器新增指令扩展
视频编解码
骄傲的心别枯萎1 个月前
RV1126 NO.37:OPENCV的图像叠加功能
人工智能·opencv·计算机视觉·音视频·视频编解码·rv1126