h.264中,帧间预测,所有相邻宏块都是只用同一个参考帧,只使用P帧,不用B帧。采用中值预测法的疑问?
h.264中,帧间预测,所有相邻宏块都是只用同一个参考帧。采用中值预测法。
1.如果本宏块采用帧间预测:相邻宏块只有一个有效,那么采用中值预测法时,其MVP是多少?
2.下图中打勾红色那个具体怎么理解?因为我们只使用同一个参考帧。

h.264中,帧间预测,所有相邻宏块都是只用同一个参考帧,只使用P帧,不用B帧。采用中值预测法的疑问?
h.264中,帧间预测,所有相邻宏块都是只用同一个参考帧。采用中值预测法。
1.如果本宏块采用帧间预测:相邻宏块只有一个有效,那么采用中值预测法时,其MVP是多少?
2.下图中打勾红色那个具体怎么理解?因为我们只使用同一个参考帧。

关注让【宝码香车】来帮您解答,本回答参考DeepSeek编写,并整理提供。
如果答案让您满意,请采纳、点赞、关注,非常感谢!
.
每日一句正能量,让它带给您好心情:努力不是为了超越别人,而是为了成为更好的自己。
.
根据H.264标准(问题图片中的8.4.1.3.1节)和您描述的具体场景(所有宏块使用同一参考帧,仅使用P帧),我来解答您的疑问。
在您描述的场景下(所有相邻宏块都可用且使用同一个参考帧),中值预测过程会直接进入最后一步,即取三个相邻块运动向量(mvLXA, mvLXB, mvLXC)各分量的中值作为当前块的MVP。
根据标准流程的第一步:
mbAddrA 可用,mbAddrB 和 mbAddrC 都不可用。mvLXA 和 refIdxLXA 分别复制给不可用的 mvLXB, mvLXC 和 refIdxLXB, refIdxLXC。 mvLXB = mvLXA
mvLXC = mvLXA
refIdxLXB = refIdxLXA
refIdxLXC = refIdxLXA
```
- **后续流程**:由于现在三个参考帧索引 (`refIdxLXA`, `refIdxLXB`, `refIdxLXC`) 都变得相同,并且它们必然等于当前块的参考帧索引 (`refIdxLX`)(因为您指定了所有宏块使用同一参考帧),流程将进入第二步的“Otherwise”情况。
- **最终MVP**:计算三个**完全相同**的运动向量的中值。一个集合的中位数就是它本身。
```clike
mvpLX[0] = Median(mvLXA[0], mvLXA[0], mvLXA[0]) = mvLXA[0]
mvpLX[1] = Median(mvLXA[1], mvLXA[1], mvLXA[1]) = mvLXA[1]
```
- **答案**:**MVP 就是那个唯一有效的相邻宏块的运动向量 `mvLXA`**。
#### 2. 下图中打勾红色那个具体怎么理解?(因为我们只使用同一个参考帧)
您图片中第二步的流程可以简化为一个决策树。在您设定的条件下(所有参考帧相同),这个决策树的路径是确定的:
1. **判断条件**:“if one and only one of the reference indices ... is equal to the reference index of the current partition”(如果三个相邻块中**有且仅有一个**的参考帧索引与当前块相同)。
2. **在您的场景下**:由于所有宏块(当前块和三个相邻块)都使用**同一个参考帧**,所以三个相邻块的参考帧索引 (`refIdxLXA`, `refIdxLXB`, `refIdxLXC`) **全都等于**当前块的参考帧索引 (`refIdxLX`)。
3. **路径选择**:上述条件(“有且仅有一个相等”)**不成立**。因此,流程会跳过这个 `if` 分支,直接进入 `Otherwise` 分支。
4. **`Otherwise` 分支的处理**:这就是您图中打勾的红色部分。它规定直接取三个运动向量各分量的中值。
```clike
mvpLX[0] = Median(mvLXA[0], mvLXB[0], mvLXC[0])
mvpLX[1] = Median(mvLXA[1], mvLXB[1], mvLXC[1])
```
**总结理解**:那个打勾的红色部分是一个“保底”或“通用”策略。当三个相邻块的参考帧情况比较复杂(比如不全是当前参考帧,或者全是但不符合“有且仅有一个”的特殊条件时),就采用这种稳健的**中值滤波**方法来得到一个预测值,这通常能有效平滑掉个别运动向量的异常,得到一个相对合理的预测。在您“全同参考帧”的简单场景下,这个策略同样适用且结果正确。