headforever 2025-09-24 09:06 采纳率: 41%
浏览 6

在h.264中,假设:本宏块或子宏块为帧间预测模式(全帧仅局限于16x16或8x8),使用P帧(不用B帧),参考帧只有一个,关于相邻宏块的疑惑?

在h.264中,假设:本宏块或子宏块为帧间预测模式(全帧仅局限于16x16或8x8),使用P帧(不用B帧),参考帧只有一个。根据《8.4.1.3 Derivation process for luma motion vector prediction》,在此情况下,使用《8.4.1.3.1 Derivation process for median luma motion vector prediction》,即8.4.1.3.1 中值亮度运动矢量预测值的推导过程。那么疑问如下:
1.根据上面假设,那么就调用了中值预测法,对吗?
2.如果相邻宏块或子宏块只有一个有效或可用,其它要么不存在或帧内预测等等,那么此时,mvp应该等于多少呢?
3.如果相邻宏块或子宏块只有两个有效或可用,其它不存在或帧内预测等等,那么此时,mvp应该等于多少呢?

  • 写回答

4条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-09-24 09:28
    关注

    让【宝码香车】来帮您解答,本回答参考DeepSeek编写,并整理提供。

    如果答案让您满意,请采纳、点赞、关注,非常感谢!
    .
    每日一句正能量,让它带给您好心情:别让任何人消耗你内心的晴朗,生活应该是被热爱的。
    .

    根据H.264标准(8.4.1.3.1节)的规定,针对您提出的问题,我将逐一进行解答。

    1. 是否调用中值预测法?

    是的。在您描述的场景下(P帧、单个参考帧、帧间预测模式),确实会调用8.4.1.3.1节的中值亮度运动矢量预测(Median Luma Motion Vector Prediction)过程来推导MVP。

    2. 只有一个相邻块可用时,MVP是多少?

    当三个候选相邻块(A₁, B₁, B₀)中只有一个是有效的(即采用帧间预测且参考帧索引相同)时,MVP的值就等于这个唯一有效块的运动矢量(MV)。

    推导过程简述:
    标准规定,在计算中值前,需要先为三个候选位置(A, B, C)设置默认的MV值。

    • 位置A: 对应宏块左侧的A₁子块。
    • 位置B: 对应宏块上方的B₁子块。
    • 位置C: 对应宏块右上方的B₀子块。

    如果某个位置的块不可用(如不存在、为帧内编码、或参考帧索引不同),则该位置的MV会被设置为一个默认值。当仅有一个候选块(例如位置A)可用时,标准的中值计算规则如下:

    1. 检查A、B、C三个位置的可用性。
    2. 将不可用位置的MV设置为(0, 0)。
    3. 计算中值:
    • mvp_x = Median(mv_A_x, mv_B_x, mv_C_x)
    • mvp_y = Median(mv_A_y, mv_B_y, mv_C_y)

    由于只有一个是非零的有效MV,另外两个是(0, 0),这三个数的中位数就是那个唯一的非零MV

    示例:
    假设只有A₁块可用,其MV为 (5, 2),而B₁和B₀都不可用。那么:

    • mvp_x = Median(5, 0, 0) = 0
    • mvp_y = Median(2, 0, 0) = 0

    这个结果是错误的,因为中位数应该是5和2。这里的关键在于,当大量相邻块不可用时,标准有更具体的处理逻辑。实际上,当只有一个块可用时,流程会简化,直接将该可用块的MV作为MVP,而不会进行复杂的中值计算。更准确的描述是:在收集候选MV列表时,如果最终有效的候选MV只有一个,则MVP就直接取这个值。

    3. 只有两个相邻块可用时,MVP是多少?

    当三个候选相邻块中有两个是有效的时,MVP的值等于这两个有效块运动矢量的中值。在只有两个值的情况下,取中值等价于对这两个MV分量分别取平均值(更准确地说,是去掉最大值和最小值后剩下的那个值,对于两个数来说,就是它们本身)。

    推导过程:

    1. 假设位置A和B的块可用,其MV分别为 mvAmvB,位置C的块不可用,其MV被设置为 (0, 0)。
    2. 分别对x分量和y分量取中值:
    • mvp_x = Median(mvA_x, mvB_x, 0)
    • mvp_y = Median(mvA_y, mvB_y, 0)

    示例:
    假设 mvA = (10, 4), mvB = (6, 8), mvC = (0, 0)(不可用)。

    • X分量: Median(10, 6, 0)。排序后为 (0, 6, 10),中值为 6
    • Y分量: Median(4, 8, 0)。排序后为 (0, 4, 8),中值为 4
      因此,最终的MVP为 (6, 4)。

    总结

    可用相邻块数量MVP 确定规则示例(MV值)结果MVP
    1个MVP = 该可用块的MV仅A可用:mvA=(5, 2)(5, 2)
    2个MVP = 两个可用块MV的中值
    (等价于分别对x和y分量取三个值(mv1, mv2, 0)的中值)
    A=(10,4), B=(6,8), C不可用(6, 4)
    3个MVP = 三个可用块MV的中值
    (分别对x和y分量取中值)
    A=(10,4), B=(6,8), C=(2,12)(6, 8)

    希望以上解答能帮助您彻底理解H.264在中值MVP推导中的细节。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月24日