HEVC编码中的MPM(最可能模式,Most Probable Mode)

简介

最近看到有文章用视频编码时的MPM参数来映射特征并用于数字取证,故做该文章记录。

HEVC(高效视频编码)中的MPM(最可能模式,Most Probable Mode)用于预测帧内块的模式,以提高编码效率并减少比特率。MPM的选择过程涉及多个步骤,下面结合你的图详细说明这些步骤。

MPM选择流程

在这里插入图片描述

图中展示了选择三个MPM的流程图。以下是具体步骤:

  1. 检查PMLPMA是否相等

    • 如果PML(左预测模式)不等于PMA(上预测模式),则选择:
      • MPM1 = PML
      • MPM2 = PMA
    • 如果PMLPMA相等,则进一步检查PMLPMA的值。
  2. 检查PMLPMA的值是否小于2

    • 如果PML < 2PMA < 2,则选择:
      • MPM1 = PLANAR
      • MPM2 = DC
      • MPM3 = ANGULAR[26]
    • 如果PMLPMA都不小于2,则:
      • MPM1 = PML
      • 计算MPM2MPM3的值:
        MPM2 = 2 + ((PML - 2 - 1 + 32) % 32)
        MPM3 = 2 + ((PML - 2 + 1) % 32)
        
  3. 检查PMLPMA是否等于PLANAR

    • 如果PML不等于PLANARPMA不等于PLANAR,则进一步检查PMLPMA的值。
      • 如果PML等于PLANAR或者PMA等于PLANAR,则选择:
        • MPM3 = PLANAR
      • 如果PMLPMA都不等于PLANAR,则选择:
        • MPM3 = DC
    • 如果PMLPMA都不等于PLANAR,则选择:
      • MPM3 = ANGULAR[26]

具体使用哪个MPM:

如果最小残差的模式在MPM1,MPM2,或MPM3中,编码器会标记该模式为最终预测模式。
如果最小残差的模式不在MPM中,编码器会使用该模式,但会以非MPM模式的方式进行编码。

示例代码

以下是实现上述逻辑的C++代码示例:

#include <iostream>

enum PredictionMode {
    PLANAR = 0,
    DC = 1,
    ANGULAR = 2
};

void selectMPMs(int PML, int PMA, int& MPM1, int& MPM2, int& MPM3) {
    if (PML != PMA) {
        MPM1 = PML;
        MPM2 = PMA;

        if (PML != PLANAR && PMA != PLANAR) {
            MPM3 = ANGULAR + 26;
        } else {
            MPM3 = (PML == PLANAR || PMA == PLANAR) ? PLANAR : DC;
        }
    } else {
        if (PML < 2 && PMA < 2) {
            MPM1 = PLANAR;
            MPM2 = DC;
            MPM3 = ANGULAR + 26;
        } else {
            MPM1 = PML;
            MPM2 = 2 + ((PML - 2 - 1 + 32) % 32);
            MPM3 = 2 + ((PML - 2 + 1) % 32);
        }
    }
}

int main() {
    int PML = 0; // example value
    int PMA = 1; // example value
    int MPM1, MPM2, MPM3;

    selectMPMs(PML, PMA, MPM1, MPM2, MPM3);

    std::cout << "MPM1: " << MPM1 << "\n";
    std::cout << "MPM2: " << MPM2 << "\n";
    std::cout << "MPM3: " << MPM3 << "\n";

    return 0;
}

这个代码示例根据输入的PMLPMA值,选择并输出三个MPM。可以根据具体需求调整PMLPMA的值。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值