H264(AVC)/H265(HEVC)/H266(VVC):块划分的区别

本文将对比分析H264/H265/H266中关于块划分的区别。

注:

1、本文参考了下列文章:

2、本文若有错的地方,请读者指正,谢谢!


宏块(H264)、编码树单元(H265/H266)的划分

H264/H265/H266 三种视频编码都是基于块进行的划分为更小单元的:将一帧视频(即一张图片)划分成不同的块,然后对每个块再分别进行编码处理。从H264到H265,再从H265到H266,块的划分精度越来越高。

  • H264中:块名为MB。
    • 视频的每帧图像由若干块(Block)组成,它们被排列成Slice的形式。
  • H265中:块名为CTU。
    • 视频的每帧图像由若干块(Block)组成,它们被排列成Slice和Tile的形式。
  • H266中:块名为CTU。
    • 视频的每帧图像由若干块(Block)组成,它们被排列成Slice、Tile和Brick的形式。
  • 一些基本理论:
    • I Slice只包含 I 块, P Slice可包含 P 和 I 块,而 B Slice可包含 B 和 I 块(Tile和Brick同理)。
    • 一个CTU由一个亮度CTB和两个色度CTB组成(CU、TU和PU同理)。
    • CTU和亮度CTB都是同大小的,而色度CTB一般为色度CTB大小的一半,只有当亮度CTB为最小尺寸时,色度CTB与亮度CTB同大小(CU、TU和PU同理)。

H264/AVC

  • 在H.264中,一帧图像首先被划分为大小相同的16x16的块,称为宏块(Marco Block, MB),每帧图像的宏块大小固定为16x16的方形。
  • 帧间预测中,宏块还可以进一步划分为子宏块,一共有4中划分方式:可以不划分、水平划分为2个16x8的块、垂直划分为2个8x16的块、划分为4个8x8的块(只有帧间预测的slice可以进行这一步划分)。
  • 8x8的子宏块,同样可以进行这四种划分,最小可以划分为4x4的块(只有8x8的子宏块可以进行这一步划分)。


H265/HEVC

CTU划分为CU:

  • 在H265中,首先将每帧图像划分为编码树单元(Coding Tree Unit, CTU),CTU大小可以为64x64,32x32或16x16,CTU均为方形(每帧图像的CTU大小固定,不同帧图像的CTU大小可变)。
  • CTU可以通过四叉树划分进一步划分为方型的编码单元CU(Coding Unit, CU),每个方形CU也可以通过四叉树划分进一步划分为4个方形CU,最小可以划分为8x8的CU,如下图。
  • 图(a)是一个64x64的CTU,可见1个64x64的CTU可以划分为4个32x32的CU,每个32x32的CTU又可以划分为4个16x16的CU,每个16x16的CTU可划分为4个8x8的CU,到此,就不能再划分为CU了。

  • CTB的划分在有的图像上还有问题,例如对于高清视频,每帧图像分辨率为1920x1080,若划分为64x64的块,则每行有1920/64=30块,而1080/64=16.875不是整数,所以最下边1行必须进行进一步划分,使整帧图像划分为30x17个CTBs,如下图所示。

CU划分为PU:

  • 编码器进行块划分的目的主要是便于预测和变换。在进行预测和变换时,一个8x8的CU可以进行下一步划分为预测单元(Predict Unit, PU)或TU(变换单元)。
  • PU是进行预测的基本单元,即一个CU内的所有PU的预测方式相同都为帧内预测或都为帧间预测。
  • CU到PU仅允许划分一次,一共8种划分方式,4种对称划分,2Nx2N(即不划分,整个CU就是一个PU),2NxN, Nx2N, NxN;4种不对称划分,2NxnU, 2NxnD, nLx2N, nRx2N。不对称划分都是在1/4处进行划分,例如32x32的块进行2NxnU划分会分成一个32x8的块和一个32x24的块,H.265规定只有在亮度CU尺寸大于等于16x16时才允许不对称划分(HEVC中只有PU可能为矩形,其他CTU、CU和TU均为方形)。
  • 帧间预测的CU划分成PU可以按上面8种任意模式划分。而帧内预测的CU若尺寸大于8x8则只能按2Nx2N模式划分,若帧内预测CU尺寸等于8x8可以按NxN划分成4个4x4的PU,此时对应的两个色度PU也为4x4而不是2x2因为H.265里最小的块为4x4。

CU划分为TU:

  • 当CU完成预测后,就要进行变换,TU是进行变换和量化的基本单元,和PU类似,TU也是在CU基础上划分,但是PU和TU的划分互不影响,最大TU的尺寸为64x64,最小TU的尺寸为4x4。
  • TU的划分方式和CTU一样,也是四叉树划分,因为CU完成预测后CU内的值不再是像素值而是残差值,所以CU按四叉树方式划分成TU后会形成一个残差四叉树(Residual Quad Tree, RQT),CU是树根,TU是树叶,由于CU和TU都是按四叉树划分形成的,所以CU和TU都是方形的。
  • 下面左图为一个尺寸为64x64的CTU,图中蓝色线条代表CTU划分为CU,红色线条代表CU划分为TU。
  • 注意:由于DCT变换运算的最大尺寸为32x32,所以64x64的TU隐含着必须进一步划分成4个32x32的TU。同样若亮度TU为4x4其对应的2个色度TU也是4x4而不进一步划分。


H266/VVC

CTU划分为CU:

  • 在HEVC中CTU会按四叉树划分方式被划分为CU,每个CU又可以划分为PU和TU,而在VVC中将不再区分CU、PU和TU的概念(这里只是不区分CU、TU和PU的概念,实际上它们还是存在,也就是说,CU可以再划分,但划分后仍为CU),只有CU超过变换块大小限制时才会进一步划分,否则不再进行划分,对当前的分割进行预测和变换操作。这就意味着,在大多数情况下,CU、PU、TU在多类型的四叉树编码结构中拥有相同的尺寸。
  • 在VVC中,支持的最大的亮度TB大小是64×64,支持的最大的色度TB大小是32×32。当CB的宽或高大于支持的变换大小,CB将在水平和垂直方向就进行进一步划分,以达到TB尺寸的限制。
  • 在VVC中为了适应4k、8k等视频编码的需要将CTU的最大尺寸提高到128x128,最小尺寸还是4x4,要进行变换操作时。
  • 相比于H265,H266的CU允许四叉树划分、三叉树划分(ternary tree, TT)、二叉树划分(binary tree, BT),其中,三叉树和二叉树划分称为多类型树(multi-type tree, MTT)。
  • 一个CTU首先按四叉树方式进行一次划分,四叉树的每个叶子节点可以进一步按照多类型树方式进行划分。有4种多类型树划分方式:水平二叉树划分(SPLIT_BT_HOR),垂直二叉树划分(SPLIT_BT_VER),水平三叉树划分(SPLIT_TT_HOR),垂直三叉树划分(SPLIT_TT_VER)。下图是多类型树的几种划分模式。其中三叉树是按1:2:1的方式划分的。

  • 下图是一个CTU划分实例,粗实线是四叉树划分边界,细实线是多类型树边界。
  • 注意:在VTM5(VTM是VVC的参考软件)中支持亮度和色度块使用不同的划分结构。目前,对于P和Bslice,同一个CTU的亮度和色度CTB划分结构相同,对于I slice同一个CTU的亮度和色度CTB可以按不同的结构进行划分。

图像边界处CU的划分:

  • 当一个块超过图像的右边界或下边界时,该块会被强制进行进一步划分直到所有CU都在图像内部,下面是VTM5内的划分规则:
    • 如果一个块既超出了下边界也超出了右边界
      • 如果该块是一个四叉树节点且尺寸大于最小四叉树节点尺寸,则该块被强制进行四叉树划分
      • 否则该块被强制进行SPLIT_BT_HOR模式划分
    • 如果一个块只超出了下边界
      • 如果该块是一个四叉树节点且尺寸大于最小四叉树节点尺寸,且该块尺寸大于最大的二叉树节点尺寸,该块被强制进行四叉树划分
      • 如果该块是一个四叉树节点且尺寸大于最小四叉树节点尺寸,且该块尺寸小于等于最大的二叉树节点尺寸,该块被强制进行四叉树划分或SPLIT_BT_HOR模式划分
      • 否则(该块是一个二叉树节点或尺寸小于等于最小四叉树节点尺寸),该块被强制进行SPLIT_BT_HOR模式划分
    • 如果一个块只超出了右边界
      • 如果该块是一个四叉树节点且尺寸大于最小四叉树节点尺寸,且该块尺寸大于最大的二叉树节点尺寸,该块被强制进行四叉树划分
      • 如果该块是一个四叉树节点且尺寸大于最小四叉树节点尺寸,且该块尺寸小于等于最大的二叉树节点尺寸,该块被强制进行四叉树划分或SPLIT_BT_VER模式划分
      • 否则(该块是一个二叉树节点或尺寸小于等于最小四叉树节点尺寸),该块被强制进行SPLIT_BT_VER模式划分

CU冗余划分的限制:

  • 四叉树和多类型树相结合的划分方式使得VVC块划分更加灵活,但也可能造成不同划分方式相结合导致相同的划分结果,这种冗余的划分应该被禁止。
  • 如下图,进行一次四叉树划分,和进行两级连续二叉树划分的结果相同。所以VVC在允许使用四叉树划分CU时,通过语法阻止针对第二分区的二叉树划分(第一分区的二叉树划分可以进行)。
    • 一般,只有以下两种情况,允许两级连续二叉树分割:
      • 如果四叉树叶子节点的块大小和MinQTSize(允许的最小的四叉树叶子节点的尺寸相等,那么四叉树的划分将停止,并允许做进一步的多类型树划分。
      • 如果多类型树的节点深度mmtDepth(多类型树的非根节点)大于0,那么四叉树划分将不被允许,并允许做进一步的多类型树划分。

è¿éåå¾çæè¿°

  • 如下图,在同一个方向进行两次连续的二叉树划分,和先进行一次三叉树划分再在中间进行二叉树划分的结果相同。所以VVC禁止在三叉树中间部分进行同方向的二叉树划分,此限制适用于所有图片中的CU。

 

  • 如下图,先进行二叉树划分再进行三叉树划分,和先进行三叉树划分再进行二叉树划分的结果相同。在这种情况下,VVC会禁止”先进行二叉树划分再进行三叉树划分“这种顺序对第二分区的三叉树划分。 此限制适用于P帧和B帧的CU。

è¿éåå¾çæè¿°

 

 

  • 8
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Video Decoder丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值