
VVC/H.266
文章平均质量分 84
VVC/H.266相关技术及代码学习
涵小呆
这个作者很懒,什么都没留下…
展开
-
H.266/VVC帧间预测总结
一、帧间预测基本原理帧间预测是利用视频帧与帧之间的相关性,去除视频帧间的时间冗余信息。统计表明,帧间差绝对值超过3的像素平均不到一帧像素的4%,因此,采用高效的帧间编码方式,可以很大程度上提高视频压缩效率。目前,主流视频编码标准中采用的基于块的帧间编码方式,基本原理是通过运动估计(Motion Estimate)从相邻参考重建帧中寻找和当前块差别最小的参考块,将其重建值作为当前块的预测块。其中参考块到当前块的位移称为运动矢量(Motion Vector),将重建值作为预测值的过程称为运动补偿(Mot原创 2021-08-24 21:12:59 · 11193 阅读 · 1 评论 -
H.266/VVC帧内预测总结
最近大致看完了帧内预测相关的技术及相关代码,做个总结。1、初始化帧内预测参数通过initPredIntraParams函数进行初始化帧内预测参数,代码参考如下:https://blog.csdn.net/BigDream123/article/details/1045208212、获取参考像素及对参考像素进行滤波在初始化帧内预测参数后,需要获取进行帧内预测时使用的参考像素,并根据预测模式决定是否对参考像素进行滤波。initIntraPatternChType函数是获取参考像素和对参考像素原创 2020-09-04 12:32:47 · 6460 阅读 · 5 评论 -
H.266/VVC的编码结构和块划分
一、将一帧图像划分成CTUsVVC中一帧图像分成许多编码树单元(CTU)。CTU的概念与HEVC的相同。对于一帧具有三通道的图像,CTU由一个N×N的亮度样本块和两个相应的色度样本块组成。图1显示了一个图片被划分为CTU的示例。在VVC中为了适应4k、8k等视频编码的需要,CTU中的亮度块的最大允许尺寸被指定为128×128(HEVC是64×64),注意亮度变换块的最大尺寸为64×64。...原创 2020-02-15 21:13:24 · 7218 阅读 · 8 评论 -
H.266/VVC变换量化部分内容总结
最近大致看完了VTM6.0的帧内编码端的和变换部分相关的代码,这里进行一下简单的总结。帧内编码端的变换涉及到变换最佳模式的选择,和变换部分相关的代码又比较杂,这里仅仅总结其中一部分代码。帧内模式选择的入口函数是xCheckRDCostIntra,函数调用框图如图所示:xCheckRDCostIntra函数主要是进行了相应变换块可选变换模式集的遍历,通过并计算RD Cost选出最佳变......原创 2019-11-17 19:43:46 · 4822 阅读 · 2 评论 -
H.266/VVC SCC技术学习:块差分脉冲编码调整(block differential pulse coded modulation, BDPCM)
近年来,屏幕内容视频广泛用于多媒体应用。由于屏幕内容视频的特性与自然视频有较大区别,VVC中使用了帧内块复制(intra block copy), 调色板(Palette), 变换跳过(transform skip), 块差分脉冲编码调制(block differential pulse coded modulation,BDPCM)等技术来提高其编码效率。本文将阐述BDPCM技术的实现原理。原创 2025-04-04 18:32:03 · 1082 阅读 · 0 评论 -
H.266/VVC SCC技术学习:帧内块拷贝(Intra block copy, IBC)
帧内块拷贝 (Intra block copy, IBC) 是 HEVC 针对屏幕内容编码(Screen content coding)序列的扩展工具,它显着提高了屏幕内容序列的编码效率。IBC 是一种块级编码模式, IBC 编码的 CU 被视为除帧内或帧间预测模式之外的第三预测模式。和帧间技术类似,编码端执行运动搜索(块匹配,Block Maching, BM )为每个 CU 找到其最佳的块向量(Block Vector,也可以称为运动向量 Motion Vector)。......原创 2022-06-08 17:01:35 · 3444 阅读 · 0 评论 -
H.266/VVC代码学习:reduceHadCandList函数
reduceHadCandList函数由estIntraPredLumaQT函数调用,主要是用来缩减后续进行全RD Cost细选的模式列表。基本过程:缩减传统候选模式数,仅加入Cost较小的前三种传统的模式 缩减MIP候选模式数,删除Cost较大的最后一种MIP模式 对于尺寸大于8x8的PU,判断前三种MIP模式矩阵是否在临时的候选模式列表中,如果不在,则将其加入进去代码如下:// candModeList 候选模式数// candCostList 候选模式代价列表// numMod原创 2022-03-28 10:20:12 · 715 阅读 · 0 评论 -
H.266/VVC技术学习:运动补偿时域滤波器(motion compensated temporal filter )
运动补偿时域滤波器(Motion compensated temporal filter,MCTF)VTM 支持运动补偿时域滤波器(Motion compensated temporal filter,MCTF)。MCTF是一种编码前处理工具,即当视频帧进行编码前,对该帧进行时域滤波。该工具由CTC中的TemporalFilter选项控制是否开启。滤波过程Step1:通过使用一个或多个TemporalFilterStrengthFrame#配置选项,可以针对每个GOP中的不同图片调整时域滤波原创 2022-03-19 15:19:26 · 5579 阅读 · 0 评论 -
H.266/VVC代码学习:读取和写入YUV
一、VTM中的YUV文件的IO接口VTM中是通过VideoIOYuv类控制YUV文件的读取和写入的,VideoIOYuv类是在VideoIOYuv.h文件中定义的。VideoIOYuv的成员变量包括以下几种,其中m_cHandle是fstream类型的变量,主要是用来打开/创建输入/输出的YUV文件,m_fileBitdepth表示输入/输出文件的比特深度;m_bitdepthShift在写入/读取之前/之后需要增加或减少的比特深度。private: fstream m_cHandl.原创 2021-10-11 22:00:42 · 1997 阅读 · 0 评论 -
H.266/VVC技术学习之帧内模式编码
在HEVC中,支持33种角度模式、DC模式和Planar模式,为了减少编码比特,使用长度为3的最可能模式列表。在VVC中,引入了ISP模式、MRL模式、MIP模式等,帧内模式编码时需要先对这些模式的flag进行编码。VVC将角度模式扩展到了65种角度模式,因此,将MPM列表相应地扩展到了长度6。这里,Planar模式总是在MPM列表中,且有单独的flag表示。1. 帧内亮度模式编码帧内亮度模式编码流程如上图所示,其中包括MIP模式、MRL模式、ISP模式以及MPM相关的语法元素。首先编码mi原创 2021-09-16 22:24:09 · 2808 阅读 · 0 评论 -
H.266/VVC技术学习:算术编码
算术编码是一种常用的变长编码方法,和Huffman编码类似,也是对出现概率大的符号赋予短码,出现概率小的符号赋予长码,但算术编码不是简单的将每个信源符号映射成一个码字,而是对整个输入序列分配一个码字,所以平均意义上可以为每个信源符号分配长度小于1的码字。算术编码的原理参考:熵编码:算术编码H.266/VVC中采用的是基于上下文的自适应二进制算术编码(Context-based Adaptive Binary Arithmetic Coding,CABAC)。CABAC将二进制算术编码和上下文模型结合原创 2021-08-15 17:25:40 · 2398 阅读 · 1 评论 -
H.266/VVC熵编码之二进制化
在对语法元素进行编码前,需要对语法元素进行二进制化(使用二进制符号0或1表示)。VVC中常用的二进制化方法包括截断莱码(truncated Rice (TR))、截断二进制码(truncated binary (TB))、k阶指数哥伦布码(the k-thorder Exp-Golomb (EGk) binarization)和定长码(fixed-length (FL))。1、定长码给定一个参数cMax,使用定长码编码得到的码长为Length = Ceil( Log2( cMax +...原创 2021-08-15 11:18:56 · 1555 阅读 · 0 评论 -
H.266/VVC代码学习:xCompressCU函数
xCompressCU函数是用来进行CU划分(递归调用自身)以及模式选择。首先调用m_modeCtrl->initCULevel函数初始化模式选择列表,由堆栈控制,将当前CU可以划分的模式(四叉划分、二叉划分和三叉划分)、编码模式(帧内、帧间Merge、帧间inter等)之后,遍历模式列表,将待测试的模式出栈,根据模式调用不同的函数,所有待测试的模式如下所示:enum EncTestModeType{ ETM_HASH_INTER, ETM_MERGE_SKIP, ETM_原创 2021-08-02 22:03:39 · 3167 阅读 · 6 评论 -
H.266/VVC代码学习:xCheckModeSplit函数
xCheckModeSplit函数主要是根据划分类型对当前CU进行划分,然后调用xCompressCU函数对划分后的子CU进一步划分和模式选择。这里,传入到xCheckModeSplit函数的tempCS和bestCS是待划分CU对应的CS结构,在xCheckModeSplit函数中调用的xCompressCU函数传递的tempCS和bestCS参数是根据划分后子CU的尺寸从m_pTempCS和m_pBestCS得到的Coding Structure结构,要注意区分tempCS和bestCS。xCh原创 2021-08-02 21:51:20 · 1875 阅读 · 0 评论 -
H.266/VVC代码学习:compressCtu函数
compressCtu函数是由encodeCtus函数调用,在encodeCtus函数中遍历当前Slice中的全部CTU,然后对于每个CTU,调用compressCtu函数进行编码。compressCtu函数比较简单,首先是初始话一些变量,然后调用xCompressCU函数进行CTU划分和模式选择。对于Intra slice,在双树情况下,亮度和色度是单独划分,因此在该情况下,需要单独调用xCompressCU函数进行划分。这里有几个关键变量:QTBTPartitionerpartitione.原创 2021-08-02 22:16:29 · 1254 阅读 · 3 评论 -
H.266/VVC技术学习:熵编码
在VVC中,与HEVC中的设计相比,CABAC包含以下主要变化:Core CABAC engine 分离变换块和变换跳过块的残差编码结构。 变换系数的上下文建模一、Core CABAC engineHEVC中的CABAC engine 在64个不同的代表性概率状态之间使用基于表的概率转换过程。在HEVC中,表示编码engine状态的范围ivlCurrRange在计算新的间隔范围之前被量化为一组4个值,将表示小概率符号(LPS)的概率pLPS量化为64个值,可以使用包含所有64x4的8位预计原创 2021-07-25 18:55:49 · 2893 阅读 · 0 评论 -
VVC参考软件VTM数据结构
VTM的数据模型图如下所示:数据结构分三种类型:1. 导航信息Size、Position、Area(Position+Size):基本二维信息(位置、尺寸) CompArea:继承自Area,表示特定分量的二维信息 UnitArea:包含了多个分量的Area,表示多个分量的二维信息,描述同一位置处的一组块2. 存储区域AreaBuf:包含了一个二维信号在内存中的存储(buf 和 Stride),可以根据位置访问到相应的信号值,包含内存的操作方法(fill、copy等) Unit.原创 2021-07-07 11:07:56 · 2500 阅读 · 0 评论 -
H.266/VVC代码学习:xCheckRDCostInter函数
xCheckRDCostInter函数主要是用来检查inter模式的,包括常规AMVP模式和Affine AMVP模式。该函数主要是通过调用predInterSearch实现对常规AMVP模式和Affine AMVP模式检查的,其调用关系如下所示:在xCheckRDCostInter函数,遍历所有的BCW权重,对于每个BCW权重,调用predInterSearch找到最优的运动信息,并通过xEncodeInterResidual对预测残差进行变换量化。最后,通过xCalDebCost函数计算最终的C原创 2021-07-01 17:41:23 · 1864 阅读 · 0 评论 -
H.266/VVC代码学习:motionCompensation函数
motionCompensation函数是根据之前得到的MV,进行运动补偿,得到当前块的预测值。在运动估计中,得到的MV是亚像素精度的,而参考图像是整像素的,亚像素位置上是没有值的。如果通过MV找到的参考块是非整像素位置的,那么在参考图像上是没有这个参考块的。首先需要对参考图像进行插值,构造亚像素参考块。得到的这个参考块作为最终的预测块。motionCompensation函数调用的函数如下图所示,所调用的各函数的作用如下:xPredInterUni 单向预测 xPredInterBlk:非A原创 2021-06-30 16:56:43 · 1722 阅读 · 0 评论 -
H.266/VVC代码学习:xPatternSearchFracDIF函数
xPatternSearchFracDIF函数是用于由xMotionEstimation函数调用,进行亚像素运动估计。主要是进行1/2像素插值,搜索,得到1/2像素精度MV;再进行1/4像素插值,搜索得到1/4像素精度MV。代码及注释如下:void InterSearch::xPatternSearchFracDIF( const PredictionUnit& pu, RefPicList eRefPicList, int原创 2021-06-29 21:24:36 · 1289 阅读 · 1 评论 -
H.266/VVC代码学习:predInterSearch函数
predInterSearch函数主要是由xCheckRDCostInter调用来获取帧间常规AMVP模式和Affine AMVP模式的最优运动信息。首先判断是否检查Affine AMVP模式和常规AMVP模式,如下代码所述,其中checkAffine为真表示检查Affine AMVP模式,checkNonAffine为真表示检查常规AMVP模式。其中 pu.cu->imv表示MVD精度,在VVC中,采用采用自适应运动矢量精度方法AMVR编码MVD bool checkAffine原创 2021-06-26 21:43:26 · 2367 阅读 · 1 评论 -
H.266/VVC代码学习:xTZSearch函数
VVC中进行运动估计时使用的快速搜素算法是TZ Search搜索算法TZSearch算法的步骤:①确定搜索起始点:VVC中采用AMVP技术来确定起始搜索点,AMVP会给出若干个候选预测MV,编码器从中选择率失真代价最小的作为预测MV,并用其所指向的位置作为起始搜索点。②以步长1开始,按照上图所示的菱形模板(或正方形模板)在搜索范围内进行搜索,其中步长以2的整数次幂的形式进行递增,选出率失真代价最小的点作为该步骤搜索的结果。③若步骤②中得到的最优点对应的步长为1,则需要在该点的周围进行两点搜.原创 2021-06-19 19:24:40 · 2535 阅读 · 0 评论 -
H.266/VVC代码学习:xMotionEstimation函数
xMotionEstimation函数是VVC帧间预测的运动估计的入口函数。yundongxMotionEstimation函数功能是以AMVP模式的最佳预测MV为起点,进行运动估计,在参考帧中搜索最佳MV。原创 2021-06-17 22:29:51 · 2040 阅读 · 0 评论 -
H.266/VVC代码学习:xCheckRDCostAffineMerge2Nx2N函数
xCheckRDCostAffineMerge2Nx2N函数和xCheckRDCostMerge2Nx2N函数类似,但是过程要比其简单很多。xCheckRDCostAffineMerge2Nx2N函数是用来选出Affine Merge模式中的最佳候选MV。主要过程如下:获取Affine Merge候选列表,Affine Merge候选列表的推导参考:仿射运动补偿预测 若开启快速Merge模式,根据当前CU的编码信息缩减进行细选的Merge模式数目 若当前CU最佳模式是Skip模式,则先遍历可用候原创 2021-06-05 22:02:29 · 968 阅读 · 0 评论 -
H.266/VVC代码学习:xCheckRDCostMerge2Nx2N函数
xCheckRDCostMerge2Nx2N函数是用来选出Merge模式中最佳的候选MV,根据常规Merge模式、带有运动矢量差的Merge模式(MMVD)以及CIIP模式产生的预测值和原始值得SATD Cost,选出最佳的运动信息。主要分为以下过程:① 获取Merge模式候选列表首先通过getInterMergeCandidates函数和getInterMMVDMergeCandidates函数分别获取常规Merge模式和MMVD模式的候选列表,常规Merge的候选列表推导参考:扩展的Merg原创 2021-06-05 10:33:10 · 1761 阅读 · 0 评论 -
H.266/VVC帧间预测技术学习:双向光流技术(Bi-directional optical flow, BDOF)
双向光流技术(Bi-directional optical flow,BDOF )VVC中采用了双向光流技术来修正双向预测的像素值。BDOF以前被称为BIO,包含在JEM参考软件中。与JEM中的版本相比,VVC中的BDOF是一个更简单的版本,计算复杂度更低,特别是在乘法次数和乘法器的大小方面。BDOF仅应用于亮度分量。 顾名思义,BDOF模式基于光流概念,该概念假定对象的运动是平滑的。 BDOF用于修正CU的4×4子块的双向预测信号。对于每个4×4子块,通过最小化L0和L1预测像素之间的差异来计算运原创 2021-05-25 20:17:49 · 3544 阅读 · 0 评论 -
H.266/VVC帧间预测技术学习:高级运动矢量预测(Advanced Motion Vector Prediction, AMVP)
高级运动矢量预测模式(Advanced Motion Vector Prediction,AMVP)AMVP模式是H.265/HEVC中提出的新的MV预测技术,H.266/VVC仍采用了该技术,并在HEVC的基础上进行了改进。AMVP利用空域和时域的运动矢量的相关性,为当前PU建立了候选预测MV列表,编码端从其中选出最优的预测MVP,并对MVP进行差分编码(即通过运动搜索获得真正的MV,将运动矢量差进行编码(MV-MVP));解码端通过建立相同的列表,仅需要预测MVP在列表中的索引和运动向量残差MVD即原创 2021-05-25 09:19:34 · 4136 阅读 · 0 评论 -
H.266/VVC帧间预测技术学习:几何划分模式(Geometric partitioning mode, GPM)
一、几何划分模式 (Geometric partitioning mode ,GPM)原理针对图像中运动物体的边界部分,VVC采用了几何划分模式进行帧间预测。如下图所示,GPM模式在运动物体的边界处进行了更精细的划分。划分类型使用GPM模式时,通过几何定位的直线将CU划分为两部分(下图所示)。 分割线的位置从数学上是根据特定分区的角度参数φ 和偏移参数ρ 得出的,如下图所示。VVC标准中的GPM规定将360°不等间隔的量化出24种角度,如上图b所示,每种角度下最多有4种偏移,如上原创 2021-05-23 16:47:19 · 4470 阅读 · 3 评论 -
H.266/VVC帧间预测技术学习:帧间和帧内联合预测(Combined inter and intra prediction, CIIP)
在HEVC中一个CU在预测时要么使用帧内预测要么使用帧间预测,二者只能取其一。而VVC中提出的CIIP技术,是将帧间预测信号与帧内预测信号相结合。在VVC中,当CU以Merge模式编码时,且CU包含至少64个亮度像素(即CU宽度乘以CU高度等于或大于64),并且CU宽度和CU高度均小于128,会发信号通知一个附加标志,以指示当前CU是否应用帧间/帧内联合预测(CIIP)模式。CIIP计算如下:使用常规Merge模式的得到CIIP模式中的帧间预测信号Pinter ; 用planar模式得到帧内预测信号原创 2021-05-22 21:19:13 · 1307 阅读 · 0 评论 -
H.266/VVC帧间预测技术学习:解码端运动矢量细化(Decoder side motion vector refinement, DMVR)
解码端运动矢量细化(Decoder side motion vector refinement, DMVR)为了提高Merge模式的MV的准确性,在VVC中使用了基于双边匹配(BM)的解码端运动矢量细化技术。 双向预测是在list0和list1中分别找一个运动向量MV0和MV1,然后将MV0和MV1所指向的预测块进行加权得到最终的预测块。而DMVR是在进行双向预测时,以MV0和MV1作为初始MV,分别在MV0和MV1附近搜索更精确的MV0’和MV1’。BM方法计算参考帧列表L0和列表L1中的两个候选原创 2021-05-21 09:07:45 · 1963 阅读 · 0 评论 -
H.266/VVC帧间预测技术学习:CU级双向加权预测(Bi-prediction with CU-level weight)
CU级双向加权预测(Bi-prediction with CU-level weight ,BCW)在HEVC中,通过对从两个不同参考图片获得的两个预测信号求平均和/或使用两个不同运动矢量来生成双向预测信号。 在VVC中,双向预测模式不再是简单的平均,可以对两个预测信号进行加权平均。其中w为权重,总共包含5个权重,w∈{-2,3,4,5,10}。对于每个双向预测的CU,权重w通过以下两种方式之一确定:对于非Merge CU,权重索引在MVD之后由编码端传给解码端 对于Merge .原创 2021-05-19 21:32:04 · 1676 阅读 · 0 评论 -
H.266/VVC帧间预测技术学习:自适应运动矢量精度(Adaptive motion vector resolution)
在HEVC中,当Slice header中的use_integer_mv_flag等于0时,编码快的MVD(CU的运动矢量和预测运动矢量之间的差值)以四分之一亮度像素精度进行编码。 在VVC中,引入了CU级自适应运动矢量精度(AMVR)方案。 AMVR允许以不同的精度对CU的MVD进行编码。根据当前CU的模式(常规AMVP模式或仿射AVMP模式),可以如下自适应地选择当前CU的MVD:常规AMVP模式:1/4亮度像素精度,1/2亮度像素精度,整数亮度像素精度或四倍亮度像素精度。 仿射AMVP模式:原创 2021-05-19 17:40:40 · 1831 阅读 · 0 评论 -
H.266/VVC帧间预测技术学习:基于子块的时间运动矢量预测(Subblock-based temporal motion vector prediction)
基于子块的时间运动矢量预测VVC支持基于子块的时间运动矢量预测(SbTMVP)方法。 类似于HEVC中的时间运动矢量预测(temporal motion vector prediction, TMVP),SbTMVP使用同位图片中的运动场来改善当前图片中CU的运动矢量预测和Merge模式。 SbTVMP和TMVP使用的相同的同位图片。 (同位块:相邻已编码图像中对应位置的块)SbTMVP在以下两个主要方面与TMVP不同:TMVP预测CU级别的运动,但SbTMVP预测子CU级别的运动; TMVP原创 2021-05-19 15:19:01 · 1703 阅读 · 0 评论 -
H.266/VVC帧间预测技术学习:仿射运动补偿预测(Affine motion compensated prediction)
HEVC中在进行运动补偿时只考虑了平移运动,。而在现实世界中,有很多种运动,如放大/缩小、旋转、透视运动和其他不规则运动。在VVC中,采用了基于块的仿射变换运动补偿预测。如下图所示,块的仿射运动场由两个控制点(4参数)或三个控制点运动矢量(6参数)的运动信息来描述。基于块的仿射运动补偿方式如下:1.首先将块划分为4x4的亮度子块。 2.对每个亮度子块按下式由仿射向量计算其中心像素的运动向量,然后四舍五入到1/16精度。对于4参数仿射运动模型,中心像素(x,y)处的运动矢量推导为:对于原创 2021-05-18 22:19:34 · 5191 阅读 · 1 评论 -
H.266/VVC帧间预测技术学习:带有运动矢量差的Merge技术(Merge mode with MVD)
在VVC的扩展Merge模式当中,当前CU生成的Merge list中选择一个率失真代价值最小的候选项直接作为自己的运动信息。除了常规Merge模式,VVC还引入了带运动矢量差(Merge mode with MVD)的Merge模式。MMVD是对常规Merge列表的前两个MV进行细化,使预测的MV更加准确,实际上传输的是细化搜索的步长和搜索方向等信息,并没有MVD信息。(这里所谓的MVD应该指的是通过细化常规Merge的MV近似对MV加上MVD)MMVD技术起源于之前提案中的ultimate moti原创 2021-05-18 09:52:25 · 1620 阅读 · 0 评论 -
H.266/VVC帧间预测技术学习:扩展的Merge模式(Extended merge prediction)
Merge模式是HEVC中提出的新技术,可以看作是一种编码模式,该模式下利用空域和时域相邻块的MV对当前块的MV进行预测直接得到,不存在MVD。编解码端会使用相同的方式构建MV候选列表,在编码端通过率失真准则选出最优的MV索引,只需将该索引传给解码端即可。HEVC中Merge模式利用时域或空域相邻块构建MV候选列表,且列表中只有5个候选MV。VVC在HEVC的基础上进行了扩展,MV候选列表中最多可以有6个候选MV,候选MV有5种类型,顺序如下:一、空域候选列表构建空域候选列表建立..原创 2021-05-17 17:39:49 · 3542 阅读 · 6 评论 -
H.266/VVC代码学习:去块滤波Deblock代码三
去块滤波原理目录xEdgeFilterLuma函数xUseStrongFiltering函数xPelFilterLuma函数xEdgeFilterLuma函数xEdgeFilterLuma函数是对亮度像素的一边界进行去块滤波,基本过程如下:以长度4为单位遍历该边界,对于垂直边界,如下图右所示;对于水平边界,如下图左所示。对于每一个长度为4的边界,进行如下过程:获取滤波开关和滤波强度阈值参数:根据P块和Q块两侧的Qp值计算索引值,根据索引查表获得参数Tc和β 滤波开关原创 2021-04-21 21:01:59 · 1044 阅读 · 0 评论 -
H.266/VVC代码学习:去块滤波Deblock代码二
去块滤波原理xSetMaxFilterLengthPQFromTransformSizes函数是根据边界处相邻块的长度判断需要进行滤波的最大像素数,记边界两侧的块分别为P块和Q块对于垂直边界,需要判断P块和Q块的宽度(width);对于水平边界,需要判断P块和Q块的高度(Height)对于亮度分量,分为以下三种情况:小块(小于等于4),最多滤波1个像素 大块(大于等于32),最多滤波7个像素 否则,最多滤波3个像素对于色度分量,分为以下两种情况:大块(大于等于8),最多滤波3个像素原创 2021-04-21 20:29:18 · 852 阅读 · 0 评论 -
H.266/VVC代码学习:去块滤波Deblock代码一
最近整个人感觉完全不在状态,什么都看不进,所以准备重新开始学习VTM10.0的代码,找找状态,顺带学习一些新技术。去块滤波技术的原理参考:去块滤波VTM中,去块滤波代码的入口函数是loopFilterPic函数,在该函数中遍历全部CU,对每个调用xDeblockCU函数进行去块滤波。首先对垂直边界进行滤波,再对水平边界滤波。对每一个方向的边界,通过pcv中的widthInCtus和heightInCtus参数遍历全部CTU,再通过cs.traverseCUs函数遍历CTU中所有的CU,针对每个C原创 2021-04-21 20:02:02 · 1225 阅读 · 0 评论 -
H.266/VVC技术学习之环路滤波:样点自适应补偿SAO技术
H.266/VVC的样点自适应补偿技术和H.265/HEVC的类似。SAO的主要思想是对对照原始图像, 通过对重建图像块的像素特点进行合适的分类,对不同的分类施加不同的补偿值,使其更接近原始图像,从而可以减少图像失真。根据吉布斯效应, 时域跳变信号在频域进行截断操作后会在时域原始值附近产生起伏, 如下图所示, 虚线为原始信号值, 而实线表示重建信号值, 它存在一些局部峰值、局部谷点等。在编码中,由于变换、量化导致图像的高频信息丢失,解码后会在边缘周围产生波纹现象,即振铃效应。吉布斯现象振铃效原创 2021-03-28 20:46:21 · 1732 阅读 · 0 评论