HEVC学习之琐事(一):HEVC编码结构分析

在H.264中,编码的基本单元是宏块,对于抽样格式为4:2:0的宏块,它包含一个16x16的亮度样本块和两个相应的8x8色度样本块,如下图所示。

(1)、而在HEVC中,采用了一个新的编码结构——编码树单元(CTU),CTU是HEVC的基本处理单元。一个CTU包括1个亮度CTB、2个色度CTB和相应的语法元素。一个CTU可能只包含一个编码单元(CU),HEVC还能采用树型和类四叉树结构将CTU递归地分成多个大小不一的CU。如下图所示。

在HEVC中,视频帧被分割为若干个互不重叠的CTB,用来表示视频帧中相互独立的区域。亮度CTB的尺寸可以是16x16/32x32/64x64,色度CTB的尺寸可以是8x8/16x16/32x32,尺寸越大,压缩效果越好。

(2)、在HEVC中,CU是最基本的编码单元,每个CU由1个亮度CB、2个色度CB以及相应的语法元素组成。CB是之前已经分割好的CTB根据块中的图像内容而自适应划分的(划分规则:相对比较平坦的区域采用大尺寸的CB,而细节多的区域则采用较小尺寸的CB)。通常情况下,CB的形状是正方形,亮度分量CB的尺寸可以由8x8大小到亮度CTB的大小,色度CB的尺寸可以由4x4大小到色度CTB的大小(也就是说,亮度CTB的尺寸是亮度CB的最大可支持的尺寸;色度CTB的尺寸是色度CB的最大可支持的尺寸)。如下图所示。

CU可以分为两类:跳过型CU(Skipped CU)和普通CU。跳过型CU只能采用帧间预测模式,而且产生的运动向量和图像的残差信息不需要传送给解码器;普通CU则可以采用帧内预测和帧间预测两种方式进行预测,然后对残差数据以及附加的控制信息进行编码。

通常,在图像的右边界和下边界,一些CTU可能会覆盖部分超出图像边界的区域,这时CTU四叉树会自动分割,减小CB尺寸,使整个CB刚好进入图像。

(3)、每个CU还可以进一步分割成一个预测单元(PU)和变换单元(TU)。

PU是包含了预测信息的基本单元。PU包括了亮度PU、色度PU和相应的预测语法。一个CU可以包含一个或多个PU,PU的类型可以是跳过、帧内和帧间。

(4)、TU是变换和量化的基本单元,TU的尺寸可以大于PU,但不能超过CU。HEVC只定义了方形的TU,尺寸为4x4/8x8/16x16/32x32。每个CU可以包含一个或多个TU。

时间: 2024-11-02 00:37:40

HEVC学习之琐事(一):HEVC编码结构分析的相关文章

HEVC学习之琐事(二):HEVC常见名词

HEVC标准的主要目标是提高压缩效率,HEVC特别关注两个关键问题,即视频分辨率的提高和并行处理的实现.HEVC一般采用YCbCr颜色空间,抽样格式为4:2:0. 注意以下细节: 1).帧内预测不会越过条带的边界: 2).P条带编码时只利用参考图像列表0,而B条带编码时同时使用参考图像列表0和列表1:(采用条带的主要目的是在数据丢失之后能实现再同步) 常见名词: WPP(Wavefront Parallel Processing,波前并行处理) AMP(Asymmetric Motion Par

HEVC学习之琐事(四):如何计算PSNR

在HEVC官方参考软件HM中,计算PSNR的代码如下,当然还有很多工具计算PSNR. 现在提供一种很方便的工具,只需给出原始YUV文件和解码或重构后的YUV文件就可以计算出其PSNR.软件下载地址为:点击打开链接 为了验证其正确性,本人测试了一下,结果如下图所示. 下图是HM得出的结果: 下图是该软件测出的结果: 结果一致. Void TEncGOP::xCalculateAddPSNR( TComPic* pcPic, TComPicYuv* pcPicD, const AccessUnit&

HEVC学习之琐事(五):pcPicYuvOrg与getPicYuvOrg()的对应关系

这两天一直纠结于pcPicYuvOrg与getPicYuvOrg()的对应关系,这是因为我自定义了一个pcPicYuvBgf与getPicYuvBgf(),初衷是实现类似于pcPicYuvOrg与getPicYuvOrg()的对应关系,以便于我后面的处理.调试了两天,最后才发现败给了自己的"想太多".其实这个超简单~~~碰到这种自己想扇自己一巴掌的东西,真心想哭!!! 修改后的代码如下: if (pcPicYuvOrg) { // get original YUV TComPic* p

HEVC学习之琐事(三):TEncCu::compressCU

TEncCu::compressCU分析 TEncCu::compressCU对应的代码如下: Void TEncCu::compressCU( TComDataCU*& rpcCU ) { // initialize CU data m_ppcBestCU[0]->initCU( rpcCU->getPic(), rpcCU->getAddr() ); m_ppcTempCU[0]->initCU( rpcCU->getPic(), rpcCU->getAdd

【HEVC学习与研究】38、HEVC编码过程中的块分割结构

[本文主要分为前后两部分,前半部分基本是Vivienne Sze.Madhukar BudagaviGary和J. Sullivan所编著的<High Efficiency Video Coding (HEVC) --Algorithms and Architectures>的第三章前半部分的笔记,后半部分是在HM-10.0中对Intra预测时块分割相应的代码研究.] 0.摘要 在基于块结构的混合编码框架中,每一帧图像被分割成多个像素结构的像素块(block),而一帧图像中多个像素块聚合成为一

HEVC算法和体系结构:HEVC概括性介绍

1.HEVC高级语法:提供了一个稳健.灵活和可扩展的框架,用于携带编码的视频及其相关信息,确保在不同的应用环境中,视频内容都能够以最有效的方式传输. 2.HEVC块结构和并行特性:确保了HEVC编码设计的基本结构. 3.HEVC帧内预测:在之前的编码标准中已经取得实质性的技术进步,即使是静态场景. 4.HEVC帧间预测:视频编码的核心问题,高效的帧间预测对HEVC的强大性和灵活性起着决定性的作用. 5.HEVC变换和量化:HEVC拥有更加灵活和自适应地变换和量化设计. 6.HEVC环内滤波器:包

【HEVC学习与研究】26、HEVC的算数编码实现

关于HEVC的前25篇博文全文发表在新浪博客,地址为:http://blog.sina.com.cn/s/articlelist_1376260467_0_1.html.从第26篇开始博客全文发在CSDN,新浪同步更新摘要和链接地址. 在第13篇博文中贴出了我们在调试代码时所采用的二进制码流的开头一部分数据,并根据这些数据进行了NAL Header解析.参数集合解析和条带头解析等信息的分析.今后的博文中如无特殊情况依然会采用这些数据作为学习材料. 通过对这段码流进行分析,我们可以看出,在对于一个

【HEVC学习与研究】32、编码一个CU(帧内部分)1

在一个compressSlice()中,在compressCU函数中实现对一个CU的编码,其中主要进行了CU的初始化,以及实际的编码操作. Void TEncCu::compressCU( TComDataCU*& rpcCU ) { // initialize CU data m_ppcBestCU[0]->initCU( rpcCU->getPic(), rpcCU->getAddr() ); m_ppcTempCU[0]->initCU( rpcCU->getP

【HEVC学习与研究】40、X265的下载和编译

[因工作需要,开始研究一下X265的基本使用方法.由于对HEVC的算法.概念的完全理解尚需时日,因此暂时只是考虑一下如何对x265进行下载.编译和测试方法,内部代码的实现未来再进行研究.] 1.安装cmake 在官网下载最新版本即可.截至本文的时间的最新版本为3.2.1版. 2.安装yasm和vld 也是在官网下载即可. 2.下载x265的源代码 下载地址:https://bitbucket.org/multicoreware/x265/downloads/ 下载解压后,内容如下所示: 3.生成