首页 > 其他分享 >【HEVC简介】CTU、CU、PU、TU结构

【HEVC简介】CTU、CU、PU、TU结构

时间:2024-05-06 14:25:34浏览次数:13  
标签:CTU HEVC 预测 PU TU 划分 CU

 参考文献:见《High Efficiency Video Coding (HEVC)》Block Structures and Parallelism Features in HEVC章节  CTU:coding tree unit,编码树单元,LCU         对于YUV=420格式的彩色视频:一个CTU由一个CTB of the luma samples 、2个CTBs of the chroma samples和相关的语法元素组成。Luma CTB是一个2^N  x 2^N的像素区域,而相应的Chroma CTB是2^(N-1) x 2^(N-1)的像素区域,N的值在编码器中确定,并在SPS(sequence parameter set)中传输。N可选4,5,6;表示CTU的大小可取16X16、32X32、64X64。         CTU相当于H.264中的MarcoBlock划分图片的概念,是在编码过程中的独立编码单位,然后可以递归划分成CU。   CU:coding unit,编码单元         每一个CTU,可以进一步均匀划分成4个square CUs,一个CU又可以递归按四叉树结构划分成4个小的CUs。对于YUV=420的彩色视频:一个CU由一个CB of the luma samples、2个CBs of the choma samples和相关的语法元素。一个Luma CB是2^N x 2^N(此处的N与CTU中的N大小不同)的像素区域,而相应的choma CB是2^(N-1) x 2^(N-1)的像素区域,N的值同样在编码器中确定,并在SPS中传输。         编码时,在CTU level,通过传输split_cu_flags标志指明CTU是否进一步划分成四个CU。类似地,对于一个CU,也通过一个split_cu_flags标志指明是否进一步划分成子CU。CU通过split_cu_flags标志指示进行递归的划分,直到split_cu_flags==0或者达到最小的CU尺寸(mininum CU size),对于达到最小尺寸的CU,不需要传输split_cu_flags标志,CU的最小尺寸参数(通过CTU深度确定)在编码器中确定,并在SPS中进行传输。         所以CU的大小范围是:minunum size CU ~CTU,一般情况设置CTU为64,最小CU为8(通过CTU深度确定),所以此时CU大小可取8、16、32、64。一个CTU进行编码时,是按照深度优先的顺序进行CU编码,类似于z-scan,如下图:右边表示CTU的递归四叉树划分,左边表示CTU中CU的编码顺序。 图3.4将64×64编码树单元(CTU)划分为8×8至32×32亮度样本的编码单元(CU)的示例。分割可以用四叉树来描述,也称为编码树,如右图所示。数字表示CU单元的编码顺序        

视频序列的分辨率(长和宽参数)也会在SPS中传输,要求长宽必须是mininum CU size的整数倍,但是可以不是 CTU size的整数倍。对于长宽不是CTU size整数倍的情况,图像边界处的CTU被认为已经分割成和图像边界重合(the  CTUs at the borders are inferred to be split until the boundaries of the resulting blocks coincide with the picture boundary),对于这种边界处默认的分割,不需要传输split_cu_flags标志。  

        CU块是进行决策帧间、帧内、Skip/Merge模式的基本单元。

  PU:prediction unit,预测单元         在CU level决定prediction mode,并将一个CU的prediction mode传输在bitstream中。而PU是是进行预测的基本单元,有一个PB of the luma、2个PB of the choma和相应的语法元素组成。   如果一个CU的prediction mode是intra prediction(帧内预测):         对于luma CU:有35个可选的帧内预测方向(Plannar(0)、DC(1)和方向预测(2~34)),对于mininum size的luma CB,可以平均划分成4个方形的subblocks,对于每个subblock进行独立的帧内预测,有独立的intra prediction mode。也就是说对于帧内预测的CU,可以进行2Nx2N和NxN两种PU划分模式,且NxN模式只有对mininum size CB可以使用。         一个帧内luma PU块,预测模式确定之后,需要对预测模式进行编码。HEVC中在进行帧内预测模式编码时,先为每个intra PU确定3个最可能模式(确定策略后面介绍),假设为S={M1,M2,M3}。然后通过判断luma PU的帧内预测模式是否在S中,如果在S中,则需要2bit编码预测模式在S中的索引,否则需要5bit编码预测模式在另外32种模式中的索引。         对于luma PU,确定最可能3个预测模式是根据当前PU左边和上边的预测模式,假设左边和上边的预测模式分别是A和B,如果左边或上边PU不是帧内预测模式或是PCM模式,则A或B为DC;另外,如果上边PU块不在当前CTU内,那么B也为DC。确定好A和B之后:         当A=B时,如果A,B都大于2,即A和B都不是Planar或DC,那么:             M1=A;             M2=2+((A-2-1+32)%32)             M3=2+((A-2+1)%32)        当A=B时,如果A,B至少有一个小于2,即A或B是Planar或DC,那么:             M1=Planar,M2=DC,M3=26(竖直方向预测)        当A!=B时,M1=A,M2=B,对于M3按照下面规则决定:             如果A和B都不是Planar,那么M3=Planar;             如果A和B都不是DC,那么M3=DC;             否则,说明{A,B}={Planar,DC},那么M3=26。        对于choma luma:有5个可选的帧内预测方向(Planar/0、DC/1、Vertical/26、Horizontal/10和luma PU的预测方向)。对于预测模式的编码,通过0表示luma PU的预测方向,100、111、101和110分别表示Planar/0、DC/1、Vertical/26和Horizontal/10。        另外,在进行帧内预测时,如果CU是mininum size CU,且将CU划分成4个PU时,那么要保证TU小于等于PU,如下图:表示一个8x8的CU块分成4个PU,那么必须分成四个4x4的TU块,至于每个TU是否进一步划分成更小的TU不作限定,只根据正常TU划分的条件判断。这是为了提高intra预测的精确度。图a表示如果CU不化成4个TU,那么intra预测的距离就会较远。图b则表示了将CU划分成4个TU,这时候预测右边的小PU时,左边的PU已经预测完成,并进行了变换和重建,可以保证预测距离更近。 如果一个CU的prediction mode是inter prediction(帧间预测):         对于inter PU,luma PB和choma PBs拥有相同的PU划分模式和motion parameters(包括运动估计方向数目(1/2),参考帧索引,和对每个运动估计方向的运动矢量MV)。HEVC中有8中PU划分模式(2Nx2N、NxN、2个SMP和4个AMP),如下图所示:         对于NxN模式,只有mininum size CU可以使用,且8x8CU不能使用。         对于AMP模式,只有32x32和16x16的CU可以使用,8x8和64x64的CU不能使用,所以inter PU的最小尺寸为8x4和4x8,这是因为TU最小尺寸为4x4,进行变换的最小单元也是4x4。另外,HEVC可以在SPS中通过一个syntax禁用AMP。         从H.262到HEVC过程中,PU的可选大小变化如下图: 如果一个CU的prediction mode是Skip:         那么PU的划分模式只能是2N x 2N。         PS:对于4x8和8x4,HEVC规定只能用单向预测,不能用双向预测。                 在HM1中,实际可以通过inter_4x4_enabled_flag(在SPS中)指示是否使用4x4的PU。   TU:transform unit,变换单元     对于是进行变量的单元,一个CU可以递归按照四叉树结构划分成TUs,CU作为四叉树的root,如下图表示一个CU划分成TUs的结构:         CU划分成TUs中,TU的大小范围取决于max TU size、min TU size和max TU depth三个参数决定,这三个参数在SPS level进行传输。max TU size为5表示最大TU是32x32,min TU size为2表示最小TU是4x4。max depth为3表示CU划分成TU最多划分成3层(如上图10、11、12、13就在第3层)。对于intra predition,要确保PU大于等于TU(即TU不跨多个intra PU),而inter predition没有相应的限制。         另外,对于一个CU,最多有一个trasform tree syntax,所以一个CU的luma CB 和choma CBs拥有相同的TU划分。但是除了对于8x8的luma CB划分成4x4的TB时,4x4的choma CBs不会划分成2x2的TB。  

标签:CTU,HEVC,预测,PU,TU,划分,CU
From: https://www.cnblogs.com/lanlancky/p/18174927

相关文章

  • Razavi - RF Microelectronics的笔记 - Differential Output Current
    Onpage400,example6.26,weareaskedtoanalyzeadouble-balancedcircuitonits\(IP_2\).Idon'tgetwheredoes(6.127)comefrom.Sincethere'snoexplanationon(6.127),Iguessthisequationisobvious.SoIreducetheproblemandtry......
  • Huggingface Transformers实现张量并行的小坑 set/get_output_embeddings
    transformers库里实现的很多模型会有这么两个函数get_output_embeddings和get_output_embeddings。以SwitchTransformer为例classSwitchTransformersForConditionalGeneration(SwitchTransformersPreTrainedModel):defset_output_embeddings(self,new_embeddings):......
  • k8s - ERROR: image can't be pulled
       Testedtheimage:zzh@ZZHPC:/zdata/Github/zgrpc-go-professionals$kubectlrunmytest--image=zgrpc-go-professionals:serverpod/mytestcreatedzzh@ZZHPC:/zdata/Github/zgrpc-go-professionals$kubectlgetpodsNAMEREADYSTATUSRESTART......
  • Oracle 检查当前数据库CPU和PSU补丁信息
     方法一:登录数据库,检查DBA_REGISTRY_HIST视图 select*fromdba_registry_history;ACTION_TIMEACTIONNAMESPACEVERSIONIDBUNDLE_SERIESCOMMENTS-------------------------------------------------------------------......
  • kettle从入门到精通 第五十六课 ETL之kettle Microsoft Excel Output
    1、9.4版本的kettle中有两个Excel输出,Excel输出和MicrosoftExcel输出。前者只支持xls格式,后者支持xls和xlsx两种格式,本节课主要讲解步骤MicrosoftExcel输出,如下图所示: 1)、步骤【生成记录】生成两条测试数据,每条数据里面包含id和name字段。 2)步骤【MicrosoftExcelOutput......
  • Linux(centos7)实现git push到gitee
    1.找到需要提交的文夹目录cd目的目录2.初始化git仓库gitinit看见最下面的InitializedemptyGitrepositoryin就是初始化成功了3.配置提交人信息gitconfig--globaluser.name“你想填的名字”gitconfig--globaluser.email"你的邮箱"最后查看一下是否正确gi......
  • SystemVerilog -- 2.20 Data Types ~ SystemVerilog Structure
    SystemVerilogStructureStructure可以包含不同数据类型的元素,这些元素可以作为一个整体引用,也可以通过其名称单独引用。这些元素具有相同数据类型的数组完全不同。//Normalarrays->acollectionofvariablesofsamedatatypeintarray[10];//allelements......
  • 操作系统与CPU
    我首先了解了CPU的基本结构和功能。CPU作为计算机的核心,负责执行指令、处理数据和控制计算机的各个部件。我深入研究了CPU的内部结构,包括算术逻辑单元、控制单元和寄存器等关键部件,这些部件共同协作,使CPU能够高速、准确地完成各种计算任务。在了解CPU的基本原理后,我开始探究CPU的......
  • 使用GPU
    使用场景物理机上GPU卡被挂载到容器中,容器中安装GPU驱动来管理GPU。约束k8s对GPU设备的管理只能处理设备个数这一种情况。GPU产品有AMD和NVIDIA,在k8s中对应amd.com/gpu和nvidia.com/gpu。GPU数量只能设置在limits,requests默认与limits相同,不支持小数,独占GPU。GPU插件通过gRPC......
  • GPU插件介绍
    对于NVIDIAGPU,存在3种设备插件的实现。官方NVIDIAGPU插件要求1.节点安装了NVIDIA驱动。2.节点安装nvidia-docker2.0。3.Docker的默认运行时必须设置为nvidia-container-runtime,而不是runc。4.NVIDIA驱动版本~=384.81。NVIDIAContainerRuntime把docker的默认运行时......