3

在调试 HM 16.2 的解码时,我看到 CU 看起来像是被细分为 PU。每个 PU 具有相同的 MV。在 CU 中允许不同的 MV 是我(目前)知道将 CU 拆分为 PU 的唯一原因。

我想知道我是否误解了 CTU 数据结构 ( TComDataCU)*。谁能帮我这个?您知道将 CU 拆分为 PU 是否还有其他原因?

相关问题:

  1. 为什么TComDataCU拆分 64x64 CTU 会拆分为 256 个部分?(我最初预计会看到 64 个部分,每个最小可能的 8x8 CU 一个部分。现在我假设附加部分允许更小的 PU/TU。)
  2. TComMv::getHor()将其直接解释为 MV 是否正确TCovMv::getVer(),还是必须合并一些附加信息(例如合并/跳过信息、增量等)才能获得“真实”的 MV?

* 对于TComDataCU*被叫ctu,我看到

ctu->getTotalNumPart() == 256
ctu->getDepth(48) == 3
ctu->getPredictionMode(48) == INTER_MODE
ctu->getPartitionSize(48) == Nx2N

其中mvf = ctu->getCUMvField(REF_PIC_LIST_0)(仅使用单预测,使用简单的 GOP:I <- P <- P <- P ...),

mvf->getMv(48).getHor() == mvf->getMv(50).getHor() &&
mvf->getMv(49).getHor() == mvf->getMv(51).getHor() &&
mvf->getMv(48).getVer() == mvf->getMv(50).getVer() &&
mvf->getMv(49).getVer() == mvf->getMv(51).getVer() &&
mvf->getMv(48).getHor() == mvf->getMv(49).getHor() &&
mvf->getMv(48).getVer() == mvf->getMv(49).getVer()

将这些观察结果与我的问题联系起来,对于这个 CU,我了解 CU 有两个 PU,包括索引 48,50 和 49,51,例如

+--+--+
|48|49|
+--+--+
|50|51|
+--+--+

所以我期待

mvf->getMv(48).getHor() == mvf->getMv(50).getHor() &&
mvf->getMv(49).getHor() == mvf->getMv(51).getHor() &&
mvf->getMv(48).getVer() == mvf->getMv(50).getVer() &&
mvf->getMv(49).getVer() == mvf->getMv(51).getVer() && (
mvf->getMv(48).getHor() != mvf->getMv(49).getHor() ||
mvf->getMv(48).getVer() != mvf->getMv(49).getVer()
)

为什么两个 PU(看起来)具有相同的 MV?

4

1 回答 1

1

首先,正如您所注意到的,HEVC 中的最小块大小是 4x4。CU 只能采用 64x64 和 8x8 之间的尺寸,但 PU 或 TU 可以降至 4x4。除了你提到的原因,在帧内编码的情况下,一个 CU 也可以分成 4 个 PU,这 4 个 PU 可以有不同的帧内预测方向。

由于最小的块大小是 4x4,一个 64x64 的 CTU 由 256 个部分组成。

在 HM 参考软件中,CTU 的数据结构TComDataCU将始终包含所有可能的最小块,而与实际块结构无关。这就是为什么 CU 数据可能(并且经常是这种情况)冗余存储的原因。

例如,一个 64x64 CTU 被调用ctu,它包含一个 CU(因此 CU 大小为 64x64)将存储 256 个深度 0。如果您检查 (z-scan) 索引 0 处的深度ctu->getDepth(0),您将得到 0。这足以描述 CU 的大小,但如果您检查另一个索引处的深度ctu->getDepth(48),您也会得到 0,即多余的。

这是你在你的情况下观察到的。你的 CU 被分成 2 个垂直的 PU (Nx2N),所以 (48,50) 是一个单一的 PU,用一个运动向量来描述。但是,HM 中的数据结构将 MV 存储在 48 和 50 两个位置。

为了解决您的第二个相关问题,是的,MV 的水平和垂直部分“真实”地描述了它。但是,您可能还需要引用框架的索引。这可以在TComMvField其中找到另外TComMv还有一个Int用于索引的。

于 2015-04-02T11:13:56.653 回答