H.265 PU的划分细节
PU 的划分规则是HEVC 能够精细地描述物体运动,从而提升帧间预测效率的关键所在。
与 CU 和 TU 的四叉树划分不同,PU 的划分方式更加多样,但规则也更固定,其划分方式完全取决于 CU 的预测模式(Intra/Inter)和尺寸。
PU 划分的核心思想
- 目的:为预测(特别是帧间运动预测)提供灵活的形状和大小,以最小的代价(码率)最精确地匹配图像内容的运动或纹理。
- 基本原则:
    - 一个PU只能划分一次,不能递归划分。
- 在一个确定的叶子 CU 内部,所有 PU 共享同一种预测模式(要么全是 Intra, 要么全是 Inter)。根据这个模式,CU 会被划分为一个或多个 PU。
 
2N与N
在 HEVC 的标准和文档中,当讨论一个具体 CU 的划分时,用 2N 来指代这个 CU 的边长。
- 2N= 当前 CU 的边长
- N= 当前 CU 边长的一半
2N代表对这个CU不进行划分,N代表对CU进行一次划分。
帧间预测的PU划分
帧间预测是 PU 划分最复杂、最灵活的部分,因为它需要精确地描述现实世界中各种物体的运动。编码器会通过率失真优化(RDO)来尝试所有允许的划分方式,选择最优的一种。
对于一个尺寸为 2Nx2N 的 CU,帧间预测模式下有 8 种可能的划分方式:
对称划分
- 2Nx2N- 整个 CU 作为一个 PU。适用于运动平缓或静止的大区域。
 
- 2NxN- 水平划分为两个大小为 2NxN 的 PU。适用于物体水平运动边界或上下两部分有不同运动的情况。
 
- Nx2N- 垂直划分为两个大小为 Nx2N 的 PU。适用于物体垂直运动边界或左右两部分有不同运动的情况。
 
- NxN- 划分为四个大小为 NxN 的 PU。适用于包含多个小物体的复杂运动区域。
- 约束:这种划分方式仅当 CU 尺寸为 2Nx2N 时才允许,并且 2N 不能小于 16(即 CU 尺寸最小为 16x16)。换言之,NxN划分后的 PU 尺寸最小为 8x8。对于 8x8 的 CU,不允许再进行NxN划分(因为那会产生 4x4 的 PU,这在帧间预测中是不允许的)。
 
非对称运动划分
AMP 模式是为了更精细地拟合物体边界的运动而设计的,可以节省大量码率。
约束:AMP 模式仅在 CU 尺寸大于等于 16x16 时才允许,且 8x8 的 CU 不支持 AMP。
- 2NxnU&- 2NxnD(Up & Down)- 水平非对称划分,一个 PU 是 2N x N/2,另一个是2N x 3N/2。U表示小的部分在上,D表示小的部分在下。
 
- 水平非对称划分,一个 PU 是 
- nLx2N&- nRx2N(Left & Right)- 垂直非对称划分,一个 PU 是 N/2 x 2N,另一个是3N/2 x 2N。L表示小的部分在左,R表示小的部分在右。
 
- 垂直非对称划分,一个 PU 是 
帧内预测的PU划分
帧内预测的目的是利用当前帧内已重建的邻近像素来预测当前块,它不涉及运动,因此 PU 的划分规则非常简单。
对于一个尺寸为 2Nx2N 的 CU,帧内预测模式下只有 2 种可能的划分方式:
- 2Nx2N- 整个 CU 作为一个 PU。这是最常见的情况。对于 64x64, 32x32, 16x16 的 CU,这是唯一的划分方式。
 
- NxN- 划分为四个大小为 NxN 的 PU,每个 PU 都有自己的帧内预测模式。这允许在一个小区域内对不同的纹理方向进行更精确的预测。
- 约束:这种划分方式仅当 CU 为最小 CU 尺寸时才允许。例如,如果 SPS 中设置的最小 CU 尺寸是 8x8,那么只有 8x8 的 CU 在使用帧内预测时,才可以选择是作为一个 8x8 的 PU,还是分裂成 4 个 4x4 的 PU。