HEVC帧内预测原理

一、HEVC 角度预测模式的基本概念

H.265/HEVC亮度分量帧内预测支持5种大小的PU: 4x4, 8x8, 16x16, 32x32, 64x64

每一种大小的PU都有35种预测模式:

1. Planar模式

2. DC 模式

3. 33种角度模式

 

通过角度18 将 角度 的模式进一步 分为 垂直 和 水平

所谓的水平 和 垂直 是指  通过 26 和  10 这两个角度来定义的。

超过18 的就是垂直的,指的是 这些范围内角度 可以通过 26 向左 或者 向右偏移一定的角度 得到的。

小于18 就是 水平的,指的是 这个范围内的角度可以通过10 向上或者向下 偏移一定的角度 得到的。

其中角度的偏移的计算 

                                                            

 

x表示的是某种模式对应的偏移值。可以通过下面的表格进行查询。 如 模式23 对应的 x是 9。通过上面的公式计算得到角度是 -15.7表示 向右偏移这么大的角度。

 

                                                       

 

 

 

上图 是 4 个方向的展示 1是垂直向左 角度大于0 , 2 是垂直向右角度小于0  3上水平向下,角度小于 0 , 4 是水平向上 角度 大于0。

 

 

二、投影像素法

    处于 11- 25 的像素 有可能 参考 左边 也有可能参考 上面的。 对于处于垂直类的模式 需要将参考的左边的映射到上面,形成一个水平的参考边。 对于处于水平类的模式 需要将上面的映射到左边,形成一个垂直的 参考边。

投影的计算: 

 

这边就是映射的函数,表示 x 可以通过下面的式子计算得到在y上面的坐标。

实际在计算过程中是先把这样的一个 参考的数组给构造出来。

构造的过程是  x 大于等于0 的,取 x下坐标的值。

 x小于0的,将 x 坐标 映射为y坐标 公式如下解释。 然后取y坐标上面的值 

y(x)的计算怎么理解?

    如下图角度 1 和 角度 2 是相等的。 也就是 32/offset[m] = y/x;     可得  y = 32*x/offset[m]。其中 offset[m] 表示角度的偏移, 这个偏移可以通过上面 查表得到。  从之前的计算 知道 实际上 通过两个值 来决定角度 offset[m] 和 32.   所以说 y方向上的 映射 实际上是 按照角度映射 到 x 的。 这边 x 每次加n。实际上y方向的变化是32/offset[m]*n 取整的结果。 offset <= 32 说明  映射的时候 y方向是不可能映射到同一个点的。

 

通过  这个式子计算 对应的位置

三、 水平和垂直方向 如何计算pos。

分为水平和垂直的方向来考虑, 水平和垂直 的划分 是上面的 那种方式 。

如果是垂直的方式。 那么  参考点在x方向的坐标   加 1 就是 直接 加1。 而 在y 方向的 要先映射。

同样他们的坐标计算 :

垂直方向的: pos  = (y* offset[M])/32。 pos 可以理解是x。

计算:

 y/x = 32/offset[m]。x = (y* offset[M])/32。

这种情况 对于一个 4*4 而言。 y确定了 x就确定了。 就是说同一行两个列的 pos 都只相差1。

两行的pos就是 offset[M]/32的倍数取整了。 这个肯定是不会超过1的。所以4个加起来也不会超过 4。

水平方向的: pos  = (x* offset[M])/32。 pos 可以理解是y。

计算:

 x/y = 32/offset[m]。y = (x* offset[M])/32。

这种情况 对于一个 4*4 而言。 x确定了 y就确定了。 就是说同一列的两行 pos 都只相差1。

两列的pos就是 offset[M]/32的倍数取整了。 这个肯定是不会超过1的。所以4个加起来也不会超过 4。

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的MATLAB代码示例,用于实现HEVC的帧内预测: ```matlab function [predBlock] = intra_predict(image, blockSize, row, col, mode) % image: 输入图像 % blockSize: 块大小 % row, col: 当前块的起始行和列 % mode: 帧内预测模式 % 获取参考像素 switch(mode) case 0 % 模式0:DC预测 refBlock = image(row:blockSize + row - 1, col:blockSize + col - 1); p = mean2(refBlock); predBlock = ones(blockSize, blockSize) * p; case 1 % 模式1:水平预测 refBlock = image(row:blockSize + row - 1, col - 1); predBlock = repmat(refBlock, [1, blockSize]); case 2 % 模式2:垂直预测 refBlock = image(row - 1, col:blockSize + col - 1); predBlock = repmat(refBlock, [blockSize, 1]); case 3 % 模式3:左上角预测 refBlock = image(row - 1, col - 1); predBlock = ones(blockSize, blockSize) * refBlock; case 4 % 模式4:右上角预测 refBlock = image(row - 1, col + blockSize); predBlock = ones(blockSize, blockSize) * refBlock; case 5 % 模式5:左下角预测 refBlock = image(row + blockSize, col - 1); predBlock = ones(blockSize, blockSize) * refBlock; case 6 % 模式6:垂直右下预测 refBlock1 = image(row - 1, col + blockSize); refBlock2 = image(row - 2, col + blockSize); refBlock3 = image(row - 3, col + blockSize); refBlock4 = image(row - 4, col + blockSize); refBlock5 = image(row - 5, col + blockSize); refBlock6 = image(row - 6, col + blockSize); refBlock7 = image(row - 7, col + blockSize); refBlock = (refBlock1 + 2 * refBlock2 + 3 * refBlock3 + 4 * refBlock4 + 5 * refBlock5 + 6 * refBlock6 + 7 * refBlock7 + 8) / 16; predBlock = ones(blockSize, blockSize) * refBlock; case 7 % 模式7:水平右下预测 refBlock1 = image(row + blockSize, col - 1); refBlock2 = image(row + blockSize, col - 2); refBlock3 = image(row + blockSize, col - 3); refBlock4 = image(row + blockSize, col - 4); refBlock5 = image(row + blockSize, col - 5); refBlock6 = image(row + blockSize, col - 6); refBlock7 = image(row + blockSize, col - 7); refBlock = (refBlock1 + 2 * refBlock2 + 3 * refBlock3 + 4 * refBlock4 + 5 * refBlock5 + 6 * refBlock6 + 7 * refBlock7 + 8) / 16; predBlock = ones(blockSize, blockSize) * refBlock; end end ``` 请注意,此代码仅实现了HEVC的帧内预测的一些基本模式,可能需要根据您的特定需求进行更改和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值