CN116886913B - 率失真优化量化方法、装置、电子设备及存储介质 - Google Patents

率失真优化量化方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN116886913B
CN116886913B CN202310974524.XA CN202310974524A CN116886913B CN 116886913 B CN116886913 B CN 116886913B CN 202310974524 A CN202310974524 A CN 202310974524A CN 116886913 B CN116886913 B CN 116886913B
Authority
CN
China
Prior art keywords
quantization
coefficient
cidx
quantized
quantized coefficient
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202310974524.XA
Other languages
English (en)
Other versions
CN116886913A (zh
Inventor
徐士麟
张世佳
埃内斯托·安德拉德·内托
楼剑
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Rongming Microelectronics Jinan Co ltd
Original Assignee
Rongming Microelectronics Jinan Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Rongming Microelectronics Jinan Co ltd filed Critical Rongming Microelectronics Jinan Co ltd
Priority to CN202310974524.XA priority Critical patent/CN116886913B/zh
Publication of CN116886913A publication Critical patent/CN116886913A/zh
Application granted granted Critical
Publication of CN116886913B publication Critical patent/CN116886913B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/124Quantisation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/567Motion estimation based on rate distortion criteria

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

本申请涉及一种率失真优化量化方法、装置、电子设备及存储介质。该率失真优化量化方法,应用于编码器,能适应HEVC标准与AV1标准中任意一个;该方法包括:对变换系数矩阵进行量化,得到第一量化系数矩阵;第一量化系数矩阵包括第一量化系数;将第一量化系数矩阵划分为不重叠的第一量化系数子矩阵;对第一量化系数子矩阵进行数据统计,获取量化统计数据;针对每个第一量化系数子矩阵,对非零的第一量化系数进行系数调整,得到第二量化系数子矩阵;第二量化系数子矩阵包括第二量化系数;根据第二量化系数子矩阵以及第一量化系数子矩阵与第一量化系数矩阵的关系,获取第二量化系数矩阵。本申请的技术方案,可以并行处理量化系数,降低硬件的处理延迟。

Description

率失真优化量化方法、装置、电子设备及存储介质
技术领域
本发明涉及视频压缩技术领域,具体涉及一种率失真优化量化方法、装置、电子设备及存储介质。
背景技术
相关技术中,标量量化因为死区固定,因此不能达到性能最优,率失真优化量化(RDOQ)由于在量化的过程中考虑了率失真代价,所以可以最大限度优化压缩性能。RDOQ技术会从多种量化方案中比较率失真代价,最后选取率失真代价最小的那个方案以达到最优性能。量化方案可以由不同的量化参数(QP)确定,也可由不同的量化偏移确定。其中,RDOQ技术始于H.264/AVC视频编码标准。
相关技术中,提出了一个早期的RDOQ方法,此方法为每个编码块选取最优的QP以达到优化的目的。相关技术中,还提出一个进一步改进的方法,通过一些快速算法去掉一些不必要的候选QP从而减少遍历的数量。但是,这些方法不适用于开启码率控制的应用,因为码率控制会进一步改变每个块的QP以达到平衡码率的作用。其中,RDOQ的关键是计算每个量化方案的率失真代价,率失真代价可以定义为:
C=D+λ×R (1)
其中,C是率失真代价,D是原始信号和解码信号之间的失真,R是编码码率,λ是率失真参数。D可以通过计算原始信号和解码信号之间的差值得到。但是,因为熵编码器的顺序执行特点和上下文模型的高复杂度,准确的码率R通常比较难以获得。相关技术中提出了一种将量化系数直接输入熵编码器得到码率R的方法,但是还是需要经过熵编码器的大量运算所以并不适合低延迟的场景。
为了减少RDOQ对熵编码器的依赖,RDOQ采用了许多技术快速估计失真D和码率R。首先,跳过反变换步骤直接计算失真D。然后,通过查询经过大量训练的熵编码表估计码率R从而无需依赖熵编码器。相关技术中,提出了一种简单有效的应用于H.265/HEVC中的RDOQ方法。此方法试图改变非零系数的空间分布和减小非零系数的绝对值达到最小化率失真代价的目的。对量化残差系数而言,非零系数的位置和非零系数的绝对值占据了编码码率的大部分,RDOQ试图对这些位置和绝对值进行微调,从而使熵编码其能够以更高的效率压缩信息。一般来说,RDOQ可以减少编码码率R,但是会增加编码失真D,但是通过最小化率失真代价C达到改善最终编码质量的目的。
相关技术中,还进一步提出了快速算法。通过检查量化系数和QP的乘积判定是否需要RDOQ。如果乘积小于某个阈值,RDOQ激活。否则,RDOQ关闭。
然而,相关技术中,RDOQ方法要求量化系数以预定义的顺序到达并按顺序处理它们,这对于软件实现来说可行,但对于硬件实现来说并不是最优的。具体来说,当RDOQ模块处理一个特定的量化系数时,需要完成对先前量化系数的处理。这种依赖性使得对多个量化系数的并行处理很困难,从而无法充分发挥硬件的并行能力。
而且,H.265/HEVC和AV1是两种不同的视频压缩标准。尽管它们共享大部分顶层设计,但各个模块的具体实现不同。相关技术中,会针对H.265/HEVC编码器设计专用的RDOQ模块以适应H.265/HEVC特有的量化和编码策略。而针对AV1编码器设计另外的RDOQ模块以适应AV1的量化和编码策略。同一编码器集成上述两个不同的RDOQ模块可能会增加电路面积并且不能共享它们之间的资源。
发明内容
本申请的目的在于提供一种率失真优化量化方法、装置、电子设备及存储介质,可以并行处理量化系数,降低硬件的处理延迟,而且,能够同时适应H.265/HEVC和AV1标准,尽可能共享硬件资源,减小率失真优化量化模块的面积。
根据本申请实施例的第一方面,提供一种率失真优化量化方法,应用于编码器,所述编码器适应HEVC标准与AV1标准中任意一个时,在率失真优化量化过程中,对于码率估计和失真估计,均采用通用的变化量化算法;所述方法,包括:
对变换系数矩阵进行量化,得到第一量化系数矩阵;其中,所述变换系数矩阵包括至少一个变换系数,所述第一量化系数矩阵包括至少一个第一量化系数;
将所述第一量化系数矩阵划分为至少两个不重叠的第一量化系数子矩阵;
对至少两个所述第一量化系数子矩阵进行数据统计,获取量化统计数据;所述量化统计数据用于消除至少两个所述第一量化系数子矩阵之间的依赖关系;
针对每个所述第一量化系数子矩阵,对非零的所述第一量化系数进行系数调整,得到第二量化系数子矩阵;所述第二量化系数子矩阵包括至少一个第二量化系数;至少两个所述第一量化系数子矩阵的系数调整并行执行;
根据所述第二量化系数子矩阵以及所述第一量化系数子矩阵与所述第一量化系数矩阵的关系,获取第二量化系数矩阵,所述第二量化系数矩阵包括至少一个所述第二量化系数。
在一种实施方式中,所述对变换系数矩阵进行量化,得到第一量化系数矩阵,包括:
针对所述变换系数矩阵中的每个所述变换系数,采用量化偏移参数对所述变换系数进行量化,得到所述第一量化系数。
在一种实施方式中,所述第一量化系数采用如下计算式计算得到:
QCoeff[cIdx][x][y]=sign[cIdx][x][y]×((|TCoeff[cIdx][x][y]|×quantizationScaler[cIdx][x][y]+(1<<(quantizationShift[cIdx][x][y]-1)))>>quantizationShift[cIdx][x][y]);
其中,QCoeff[cIdx][x][y]为所述第一量化系数,sign[cIdx][x][y]为所述变换系数的符号,TCoeff[cIdx][x][y]为所述变换系数,quantizationScaler[cIdx][x][y]为量化缩放参数,quantizationShift[cIdx][x][y]为所述量化偏移参数,cIdx为Y、U、V分量索引,x、y为所述变换系数在所述变换系数矩阵中的坐标。
在一种实施方式中,当所述编码器适应HEVC标准时,所述量化偏移参数采用如下计算式计算得到:
其中,QP1为所述编码器适应所述HEVC标准时的第一量化参数,transformShift为描述所述变换系数矩阵的内部变换移位的参数;和/或,
当所述编码器适应AV1标准时,所述量化偏移参数采用如下计算式计算得到:
numBitsDcQP为表示低频变换系数的量化索引dcQP所需的比特位数,tuSize为所述变换系数矩阵的大小,bitDepth为视频的比特位深度,numBitsAcQp为表示高频变换系数的量化索引acQP所需的比特位数。
在一种实施方式中,当所述编码器适应HEVC标准时,所述transformShift采用如下计算式计算得到:
transformShift=15-bitDepth-log2(tuSize);
其中,bitDepth为视频的比特位深度,tuSize为所述变换系数矩阵的大小。
在一种实施方式中,当所述编码器适应AV1标准时,所述dcQP采用如下计算式计算得到:
其中,av1DcQLookUp为第一表格,用于存储视频的比特位深度为8时所述第一量化参数与所述低频变换系数的量化索引的对应关系,所述av1DcQLoopUp10为第二表格,用于存储视频的比特位深度为10时所述第一量化参数与所述低频变换系数的量化索引的对应关系。
在一种实施方式中,当所述编码器适应AV1标准时,所述acQP采用如下计算式计算得到:
其中,av1AcQLookUp为第三表格,用于存储视频的比特位深度为8时所述第一量化参数与所述高频变换系数的量化索引的对应关系,所述av1AcQLoopUp10为第四表格,用于存储视频的比特位深度为10时所述第一量化参数与所述高频变换系数的量化索引的对应关系。
在一种实施方式中,当所述编码器适应所述AV1标准时,在计算所述量化偏移参数之前,包括:
将所述编码器适应所述AV1标准时的第二量化参数转换为所述第一量化参数。
在一种实施方式中,当所述编码器适应AV1标准时,所述第一量化参数采用如下计算式计算得到:
其中,QP2为所述第二量化参数,av1ToHevcQp为第五表格,用于存储视频的比特位深度为8时所述第二量化参数与所述第一量化参数的对应关系,av1ToHevcQp10为第六表格,用于存储视频的比特位深度为10时所述第二量化参数与所述第一量化参数的对应关系。
在一种实施方式中,当所述编码器适应HEVC标准时,所述quantizationScaler[cIdx][x][y]采用如下计算式计算得到:
quantizationScaler[cIdx][x][y]=hevcScalingList[QP1%6];
其中,hevcScalingList为第七表格,用于存储所述编码器适应所述HEVC标准时QP1%6与所述量化缩放参数的对应关系;和/或,
当所述编码器适应AV1标准时,所述quantizationScaler[cIdx][x][y]采用如下计算式计算得到:
numBitsDcQP为表示低频变换系数的量化索引dcQP所需的比特位数,numBitsAcQp为表示高频变换系数的量化索引acQP所需的比特位数。
在一种实施方式中,所述对所述第一量化系数矩阵进行统计,获取量化统计数据之前,还包括:
为至少一个上下文模型创建对应的数组,并初始化所述上下文模型为预定义值;所述数组用于存储对应的上下文模型的状态;所述数组的每个元素为8位整数;
其中,所述至少一个上下文模型包括第一上下文模型、第二上下文模型、第三上下文模型与第四上下文模型;至少一个上下文模型对应的数组包括第一数组、第二数组、第三数组与第四数组;
所述第一上下文模型为significantCoeffGroupCtx[2],用于存储第一语法元素的条件概率状态,所述第一语法元素为significantCoeffCroup,用于指出当前的第一量化系数子矩阵是否有非零的所述第一量化系数;所述第一语法元素为所述第一上下文模型;
所述第二上下文模型为sigCoeffCtx[44],用于存储第二语法元素的条件概率状态,所述第二语法元素为sigCoeffFlag,用于指出当前的第一量化系数是否为零;所述第二语法元素为所述第二上下文模型;
所述第三上下文模型为greaterOneCoeffCtx[24],用于存储第三语法元素的条件概率状态,所述第三语法元素为absCoeffGreaterThanOneFlag,用于指出当前的第一量化系数的绝对值是否大于1;所述第三语法元素为所述第三上下文模型;
所述第四上下文模型为levelAbsCoeffCtx[6],用于存储第四语法元素的条件概率状态,所述第四语法元素为levelAbsCoeff,是当前的第一量化系数的绝对值;所述第四语法元素为所述第四上下文模型。
在一种实施方式中,对至少两个所述第一量化系数子矩阵进行数据统计,获取量化统计数据,包括:
对所述第一量化系数矩阵的所述第一量化系数子矩阵,按照指定的第一扫描顺序对至少两个所述第一量化系数子矩阵分别进行扫描;
针对每个所述第一量化系数子矩阵,按照指定的第二扫描顺序对所述第一量化系数进行扫描,获取所述量化统计数据;所述第一扫描顺序与所述第二扫描顺序相同。
在一种实施方式中,所述量化统计数据包括:所述第一量化系数子矩阵中绝对值为1的第一量化系数的数量、所述第一量化系数子矩阵中绝对值大于1的第一量化系数的数量、所述第一量化系数子矩阵中绝对值大于2的第一量化系数的数量、所述第一量化系数矩阵中按照所述第一扫描顺序排列的第一个非零的第一量化系数的位置、所述第一量化系数子矩阵中按照所述第二扫描顺序排列的第一个绝对值为4的第一量化系数的位置、所述第一量化系数子矩阵中按照所述第二扫描顺序排列的第一个绝对值为7的第一量化系数的位置、所述第一量化系数子矩阵中按照所述第二扫描顺序排列的第一个绝对值为13的第一量化系数的位置以及所述第一量化系数子矩阵中按照所述第二扫描顺序排列的第一个绝对值为25的第一量化系数的位置。
在一种实施方式中,所述第一量化系数子矩阵中绝对值为1的第一量化系数的数量存储于名为cgOneCnt[64]的第五数组中,所述第五数组在数据统计前初始化为全零数组,在数据统计过程中,如果当前第一量化系数的绝对值为1,对应的所述第一量化系数子矩阵的cgOneCnt自增1。
在一种实施方式中,所述第一量化系数子矩阵中绝对值为1的第一量化系数的数量采用如下计算式计算得到:
其中,QCoeff[cIdx][x][y]为所述第一量化系数,cIdx为Y、U、V分量索引,x、y为所述第一量化系数在所述第一量化系数矩阵中的坐标,tuSize为所述变换系数矩阵的大小。
在一种实施方式中,所述第一量化系数子矩阵中绝对值大于1的第一量化系数的数量存储于名为cgGreatherThanOneCnt[64]的第六数组中,所述第六数组在数据统计前初始化为全零数组,在数据统计过程中,如果当前第一量化系数的绝对值大于1,对应的所述第一量化系数子矩阵的cgGreaterThanOneCnt自增1。
在一种实施方式中,所述第一量化系数子矩阵中绝对值大于1的第一量化系数的数量采用如下计算式计算得到:
其中,QCoeff[cIdx][x][y]为所述第一量化系数,cIdx为Y、U、V分量索引,x、y为所述第一量化系数在所述第一量化系数矩阵中的坐标,tuSize为所述变换系数矩阵的大小。
在一种实施方式中,所述第一量化系数子矩阵中绝对值大于2的第一量化系数的数量存储于名为cgGreaterThanTwoCnt[64]的第七数组中,所述第七数组在数据统计前初始化为全零数组,在数据统计过程中,如果当前第一量化系数的绝对值大于2,对应的所述第一量化系数子矩阵的cgGreaterThanTwoCnt自增1。
在一种实施方式中,所述第一量化系数子矩阵中绝对值大于2的第一量化系数的数量采用如下计算式计算得到:
其中,QCoeff[cIdx][x][y]为所述第一量化系数,cIdx为Y、U、V分量索引,x、y为所述第一量化系数在所述第一量化系数矩阵中的坐标,tuSize为所述变换系数矩阵的大小。
在一种实施方式中,所述第一个绝对值为4的第一量化系数的位置存储于名为cgFirst4Loc[64][2]的第八数组中,所述第八数组在数据统计前所有元素初始化为-1,所述第一个绝对值为4的第一量化系数的位置的纵坐标存储于cgFirst4Loc[64][0],横坐标存储于cgFirst4Loc[64][1]。
在一种实施方式中,如果Coeff[cIdx][x][y]是所述第一量化系数子矩阵中第一个绝对值为4的系数,则cgFirst4Loc更新为:
其中,cIdx为Y、U、V分量索引,x、y为所述第一个绝对值为4的系数在所述第一量化系数矩阵中的坐标,tuSize为所述变换系数矩阵的大小,y1为所述第一个绝对值为4的第一量化系数在所述第一量化系数子矩阵中的纵坐标,x1为所述第一个绝对值为4的第一量化系数在所述第一量化系数子矩阵中的横坐标。
在一种实施方式中,所述第一个绝对值为7的第一量化系数的位置存储于名为cgFirst7Loc[64][2]的第九数组中,所述第九数组在数据统计前所有元素初始化为-1,所述第一个绝对值为7的第一量化系数的位置的纵坐标存储于cgFirst7Loc[64][0],横坐标存储于cgFirst7Loc[64][1]。
在一种实施方式中,如果Coeff[cIdx][x][y]是所述第一量化系数子矩阵中第一个绝对值为7的系数,则cgFirst7Loc更新为:
其中,cIdx为Y、U、V分量索引,x、y为所述第一个绝对值为7的系数在所述第一量化系数矩阵中的坐标,tuSize为所述变换系数矩阵的大小,y2为所述第一个绝对值为7的第一量化系数在所述第一量化系数子矩阵中的纵坐标,x2为所述第一个绝对值为7的第一量化系数在所述第一量化系数子矩阵中的横坐标。
在一种实施方式中,所述第一个绝对值为13的第一量化系数的位置存储于名为cgFirst13Loc[64][2]的第十数组中,所述第十数组在数据统计前所有元素初始化为-1,所述第一个绝对值为13的第一量化系数的位置的纵坐标存储于cgFirst13Loc[64][0],横坐标存储于cgFirst13Loc[64][1]。
在一种实施方式中,如果Coeff[cIdx][x][y]是所述第一量化系数子矩阵中第一个绝对值为13的系数,则cgFirst13Loc更新为:
其中,cIdx为Y、U、V分量索引,x、y为所述第一个绝对值为13的系数在所述第一量化系数矩阵中的坐标,tuSize为所述变换系数矩阵的大小,y3为所述第一个绝对值为13的第一量化系数在所述第一量化系数子矩阵中的纵坐标,x3为所述第一个绝对值为13的第一量化系数在所述第一量化系数子矩阵中的横坐标。
在一种实施方式中,所述第一个绝对值为25的第一量化系数的位置存储于名为cgFirst25Loc[64][2]的第十一数组中,所述第十一数组在数据统计前所有元素初始化为-1,所述第一个绝对值为25的第一量化系数的位置的纵坐标存储于cgFirst25Loc[64][0],横坐标存储于cgFirst25Loc[64][1]。
在一种实施方式中,如果Coeff[cIdx][x][y]是所述第一量化系数子矩阵中第一个绝对值为25的系数,则cgFirst25Loc更新为:
其中,cIdx为Y、U、V分量索引,x、y为所述第一个绝对值为25的系数在所述第一量化系数矩阵中的坐标,tuSize为所述变换系数矩阵的大小,y4为所述第一个绝对值为25的第一量化系数在所述第一量化系数子矩阵中的纵坐标,x4为所述第一个绝对值为25的第一量化系数在所述第一量化系数子矩阵中的横坐标。
在一种实施方式中,所述针对每个所述第一量化系数子矩阵,对非零的所述第一量化系数进行系数调整,得到第二量化系数子矩阵,包括:
针对每个非零的所述第一量化系数,计算按照至少两个系数调整方案进行系数调整的第一编码代价;
针对每个系数调整方案,根据所有所述第一编码代价的和值,获得第二编码代价;所述第二编码代价为所述第一量化系数子矩阵进行系数调整的编码代价;
从至少两个系数调整方案中确定目标系数调整方案,其中,所述目标系数调整方案的第二编码代价为至少两个系数调整方案的第二编码代价中最小的编码代价;
根据目标系数调整方案对所述第一量化系数子矩阵中的非零的所述第一量化系数进行系数调整,得到所述第二量化系数子矩阵。
在一种实施方式中,所述第一编码代价采用如下计算式计算得到:
cost1[cIdx][x′][y′]=distortion[cIdx][x′][y′]+rate[cIdx][x′][y′];
其中,cost1[cIdx][x'][y']为所述第一编码代价,distortion[cIdx][x'][y']为像素域的误差,rate[cIdx][x'][y']为编码码率,cIdx为Y、U、V分量索引,x'、y'为所述第一量化系数在所述第一量化系数子矩阵中的坐标。
在一种实施方式中,所述像素域的误差采用如下计算式计算得到:
distortion[cIdx][x′][y′]=(mErr[cIdx][x′][y′]>>(2×transformShift+1))×mErr[cIdx][x′][y′];
其中,mErr[cIdx][x'][y']为量化误差的反向还原值,transformShift为描述所述变换系数矩阵的内部变换移位的参数。
在一种实施方式中,当所述编码器适应HEVC标准且视频的比特位深度为8时,所述量化误差的反向还原值采用如下计算式计算得到:
mErr[cIdx][x′][y′]=(err[cIdx][x′][y′]>>12)×hevcScaler[QP1%6];
其中,err[cIdx][x'][y']为量化误差,hevcScaler为第八表格,用于存储QP1%6与放大系数的对应关系,QP1为所述编码器适应所述HEVC标准时的第一量化参数;和/或,
当所述编码器适应AV1标准且视频的比特位深度为8时,所述量化误差的反向还原值采用如下计算式计算得到:
其中,err[cIdx][x'][y']为量化误差,numBitsDcQP为表示低频变换系数的量化索引dcQP所需的比特位数,numBitsAcQp为表示高频变换系数的量化索引acQP所需的比特位数。
在一种实施方式中,视频的比特位深度为10时的量化误差的反向还原值采用如下方法得到:
获取视频的比特位深度为8时的量化误差的反向还原值;
将视频的比特位深度为8时的量化误差的反向还原值右移两位,得到视频的比特位深度为10时的量化误差的反向还原值。
在一种实施方式中,所述量化误差采用如下计算式计算得到:
err[cIdx][x′][y′]=||TCoff[cIdx][x′][y′]|×quantizationScaler[cIdx][x′][y′]-(|QCoeff[cIdx][x′][y′]|<<quantizationShift[cIdx][x′][y′])|;
其中,TCoeff[cIdx][x'][y']为所述变换系数,quantizationScaler[cIdx][x'][y']为量化缩放参数,QCoeff[cIdx][x'][y']为所述第一量化系数,quantizationShift[cIdx][x'][y']为量化偏移参数。
在一种实施方式中,所述编码码率采用如下计算式计算得到:
rate[cIdx][x′][y′]=sigCoeffFlagRate[cIdx][x′][y′]+coeffAbsLevelRate[cIdx][x′][y′];
其中,sigCoeffFlagRate[cIdx][x'][y']为第二语法元素的第一码率估计,所述第二语法元素为sigCoeffFlag,用于指出当前的所述第一量化系数是否为零,coeffAbsLevelRate[cIdx][x'][y']为对非零的第一量化系数的绝对值进行编码的语法元素的第二码率估计。
在一种实施方式中,当所述编码器适应HEVC时,所述第一码率估计采用如下计算式计算得到:
其中,rateEstTab为第九表格,所述第九表格用于存储QP1%3、语法元素的条件概率状态与码率估计的对应关系,QP1为所述编码器适应所述HEVC标准时的第一量化参数,sigCoeffFlagTabIdx为第二语法元素的当前条件概率状态,bitDepth为视频的比特位深度;和/或,
当所述编码器适应AV1标准时,sigCoeffFlagRate[cIdx][x'][y']采用如下计算式计算得到:
其中,rateEstTab为第九表格,所述第九表格用于存储QP1%3、语法元素的条件概率状态与码率估计的对应关系,QP1为所述编码器适应所述HEVC标准时的第一量化参数,由所述编码器适应所述AV1标准时的第二量化参数转换得到,sigCoeffFlagTabIdx为第二语法元素的当前条件概率状态。
在一种实施方式中,sigCoeffFlagTabIdx采用如下计算式计算得到:
其中,sigCoeffCtx为第二上下文模型,用于存储所述第二语法元素的条件概率状态,sigCoeffCtxIdx由当前的所述第一量化系数子矩阵顶部的两个相邻的所述第一量化系数子矩阵和左边的两个相邻的所述第一量化系数子矩阵的第一语法元素的值综合决定。
在一种实施方式中,所述第二码率估计采用如下计算式计算得到:
coeffAbsLevelRat[cIdx][x′][y′]=absCoeffGreaterThanOneFlagRate[cIdx][x′][y′]+absCoeffGreaterThanTwoFlagRate[cIdx][x′][y′]+absCoeffMinusTwoRate[cIdx][x′][y′];
其中,absCoeffGreaterThanOneFlagRate[cIdx][x'][y']为第三语法元素的第三码率估计,所述第三语法元素为absCoeffGreaterThanOneFlag,用于指出当前的第一量化系数的绝对值是否大于1,absCoeffGreaterThanTwoFlagRate[cIdx][x'][y']为第五语法元素的第四码率估计,所述第五语法元素为absCoeffGreaterThanTwo,用于指出当前的第一量化系数的绝对值是否大于2,absCoeffMinusTwoRate[cIdx][x'][y']为第六语法元素的第五码率估计,所述第六语法元素为absCeoffMinusTwo,用于表示当前的第一量化系数的绝对值减2。
在一种实施方式中,当|QCoeff[cIdx][x'][y']|<1时,所述第三码率估计等于0;QCoeff[cIdx][x'][y']为所述第一量化系数;
当|QCoeff[cIdx][x'][y']|≥1且所述编码器适应HEVC标准时,所述第三码率估计采用如下计算式计算得到:
其中,rateEstTab为第九表格,所述第九表格用于存储QP1%3、语法元素的条件概率状态与码率估计的对应关系,QP1为所述编码器适应所述HEVC标准时的第一量化参数,greaterThanOneTabIdx为所述第三语法元素的当前条件概率状态,bitDepth为视频的比特位深度;和/或,
当|QCoeff[cIdx][x'][y']|≥1且所述编码器适应AV1标准时,所述第三码率估计采用如下计算式计算得到:
其中,rateEstTab为第九表格,所述第九表格用于存储QP1%3、语法元素的条件概率状态与码率估计的对应关系,QP1为所述编码器适应所述HEVC标准时的第一量化参数,由所述编码器适应所述AV1标准时的第二量化参数转换得到,greaterThanOneTabIdx为所述第三语法元素的当前条件概率状态。
在一种实施方式中,当|QCoeff[cIdx][x'][y']|<2时,所述第四码率估计等于0;QCoeff[cIdx][x'][y']为所述第一量化系数;
当|QCoeff[cIdx][x'][y']|≥2且所述编码器适应HEVC标准时,所述第四码率估计采用如下计算式计算得到:
其中,rateEstTab为第九表格,所述第九表格用于存储QP1%3、语法元素的条件概率状态与码率估计的对应关系,QP1为所述编码器适应所述HEVC标准时的第一量化参数,greaterThanTwoTabIdx为所述第五语法元素的当前条件概率状态,bitDepth为视频的比特位深度;和/或,
当|QCoeff[cIdx][x'][y']|≥2且所述编码器适应AV1标准时,所述第四码率估计采用如下计算式计算得到:
其中,rateEstTab为第九表格,所述第九表格用于存储QP1%3、语法元素的条件概率状态与码率估计的对应关系,QP1为所述编码器适应所述HEVC标准时的第一量化参数,由所述编码器适应所述AV1标准时的第二量化参数转换得到,greaterThanTwoTabIdx为所述第五语法元素的当前条件概率状态。
在一种实施方式中,当|QCoeff[cIdx][x'][y']|<3时,所述第五码率估计等于0;QCoeff[cIdx][x'][y']为所述第一量化系数;
当|QCoeff[cIdx][x'][y']|≥3且所述编码器适应HEVC标准时,所述第五码率估计采用如下计算式计算得到:
absCoeffMinusTwRate[cIdx][x′][y′]=(GolombCodeLength×eqProbRateEstTab[QP1-6*(bitDepth-8)]);
其中,GolombCodeLength为采用Golomb-Rice码编码第六语法元素所需的码长,eqProbRateEstTab为第十表格,用于存储在第六语法元素的条件概率均匀分布的情况下,索引值和码率估计的对应关系,所述索引值根据第一量化参数与比特位深度确定,所述第一量化参数为所述编码器适应所述HEVC标准时的量化参数;和/或,
当|QCoeff[cIdx][x'][y']|≥3且所述编码器适应AV1标准时,所述第五码率估计采用如下计算式计算得到:
absCoeffMinusTwoRate[cIdx][x′][y′]=GolombCodeLength×(eqProbRateEstTab[QP1]-(eqProbRateEstTab[QP1]>>2));
其中,GolombCodeLength为采用Golomb-Rice码编码第六语法元素所需的码长,eqProbRateEstTab为第十表格,用于存储在第六语法元素的条件概率均匀分布的情况下,第一量化参数与码率估计的对应关系,所述第一量化参数由第二量化参数转换而来,所述第一量化参数为所述编码器适应所述HEVC标准时的量化参数,所述第二量化参数为所述编码器适应所述AV1标准时的量化参数。
在一种实施方式中,所述针对每个所述第一量化系数子矩阵,对非零的所述第一量化系数进行系数调整,得到第二量化系数子矩阵,包括:
针对每个非零的所述第一量化系数,如果所述第一量化系数在所述第一扫描顺序中位于所述第一个非零的第一量化系数之后,计算将所述第一量化系数归零的第三编码代价;
对所述第一量化系数进行微调,得到对应的所述第二量化系数,并计算微调所述第一量化系数的第四编码代价;
获取所有所述第三编码代价的和值,得到第五编码代价;所述第五编码代价为所述第一量化系数子矩阵归零的编码代价;
获取所有所述第四编码代价的和值,得到第六编码代价;所述第六编码代价为所述第一量化系数子矩阵进行系数微调的编码代价;
如果所述第五编码代价小于所述第六编码代价,将所述第一量化系数子矩阵置零,得到所述第二量化系数子矩阵;
如果所述第六编码代价小于所述第五编码代价,根据所述第二量化系数得到所述第二量化系数子矩阵。
在一种实施方式中,所述获取所有所述第三编码代价的和值,得到第五编码代价,采用如下计算式计算得到:
其中,cgCost0为所述第五编码代价,zeroOutCost[cIdx][x'][y']为所述第三编码代价,cIdx为Y、U、V分量索引,x'、y'为所述第一量化系数在所述第一量化系数子矩阵中的坐标,CGSize为所述第一量化系数子矩阵的大小。
在一种实施方式中,所述第三编码代价采用如下计算式计算得到:
zeroOutCost[cIdx][x′][y′]=distortion[cIdx][x′][y′];
其中,distortion[cIdx][x'][y']为像素域的误差。
在一种实施方式中,所述获取所有所述第四编码代价的和值,得到第六编码代价,采用如下计算式计算得到:
其中,cgCost1为所述第六编码代价,tweakedCoeffCost[cIdx][x'][y']为所述第四编码代价,cIdx为Y、U、V分量索引,x'、y'为所述第一量化系数在所述第一量化系数子矩阵中的坐标,CGSize为所述第一量化系数子矩阵的大小。
在一种实施方式中,所述对所述第一量化系数进行微调,得到对应的所述第二量化系数,并计算微调所述第一量化系数的第四编码代价,包括:
将所述第一量化系数调整为第一候选量化系数,并计算调整所述第一量化系数的第一候选编码代价,其中,所述第一候选量化系数为0;
如果所述第一量化系数的绝对值大于1,将所述第一量化系数调整为第二候选量化系数,并计算调整所述第一量化系数的第二候选编码代价,其中,所述第二候选量化系数的符号与所述第一量化系数的符号相同,所述第二候选量化系数的绝对值等于所述第一量化系数的绝对值减去1;
计算所述第一量化系数的第三候选编码代价,其中,不对所述第一量化系数做任何调整;
选取所述第一候选编码代价、所述第二候选编码代价与所述第三候选编码代价中最小的编码代作为所述第四编码代价;
选取所述第一候选编码代价、所述第二候选编码代价与所述第三候选编码代价中最小的编码代价对应的量化系数作为所述第二量化系数。
在一种实施方式中,所述第二量化系数采用如下计算式计算得到:
其中,newQCoeff[cIdx][x'][y']为所述第二量化系数,sign[cIdx][x'][y']为所述第一量化系数的符号,cost0[cIdx][x'][y']为所述第一候选编码代价,cost1[cIdx][x'][y']为所述第二候选编码代价,cost2[cIdx][x'][y']为所述第三候选编码代价。
在一种实施方式中,所述第四编码代价采用如下计算式计算得到:
tweakedCoeffCost[cIdx][x′][y′]=min(cost0[cIdx][x′][y′],cost1[cIdx][x′][y′],cost2[cIdx][x′][y′]));
其中,tweakedCoeffCost[cIdx][x'][y']为所述第四编码代价。
根据本申请实施例的第二方面,提供一种率失真优化量化装置,应用于编码器,所述编码器适应HEVC标准与AV1标准中任意一个时,在率失真优化量化过程中,对于码率估计和失真估计,均采用通用的变化量化算法;所述装置,包括:
量化模块,被配置为对变换系数矩阵进行量化,得到第一量化系数矩阵;其中,所述变换系数矩阵包括至少一个变换系数,所述第一量化系数矩阵包括至少一个第一量化系数;
分解模块,被配置为将所述第一量化系数矩阵划分为至少两个不重叠的第一量化系数子矩阵;
统计模块,被配置为对至少两个所述第一量化系数子矩阵进行数据统计,获取量化统计数据;所述量化统计数据用于消除至少两个所述第一量化系数子矩阵之间的依赖关系;
调整模块,被配置为针对每个所述第一量化系数子矩阵,对非零的所述第一量化系数进行系数调整,得到第二量化系数子矩阵;所述第二量化系数子矩阵包括至少一个第二量化系数;至少两个所述第一量化系数子矩阵的系数调整并行执行;
获取模块,被配置为根据所述第二量化系数子矩阵以及所述第一量化系数子矩阵与所述第一量化系数矩阵的关系,获取第二量化系数矩阵,所述第二量化系数矩阵包括至少一个所述第二量化系数。
根据本申请实施例的第三方面,提供一种电子设备,包括存储器与处理器,所述存储器用于存储所述处理器可执行的计算机程序;所述处理器用于执行所述存储器中的计算机程序,以实现上述的方法。
根据本申请实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,当所述存储介质中的可执行的计算机程序由处理器执行时,能够实现上述的方法。
与现有技术相比,本申请的有益效果在于:由于在对变换系数矩阵进行量化得到第一量化系数矩阵后,将第一量化系数矩阵划分为至少两个不重叠的第一量化系数子矩阵,并对至少两个第一量化系数子矩阵进行数据统计,获取量化统计数据,这样,利用量化统计数据可以用于消除至少两个第一量化系数子矩阵之间的依赖关系,后续可以第一量化系数子矩阵为单位并行处理量化系数。接着,针对每个第一量化系数子矩阵,对非零的第一量化系数进行系数调整,得到第二量化系数子矩阵,第二量化系数子矩阵包括至少一个第二量化系数,其中,至少两个第一量化系数子矩阵的系数调整并行执行。然后,根据第二量化系数子矩阵以及第一量化系数子矩阵与第一量化系数矩阵的关系,获取第二量化系数矩阵,第二量化系数矩阵包括至少一个第二量化系数。而且,编码器适应HEVC标准与AV1标准中任意一个时,在率失真优化量化过程中,对于码率估计和失真估计,均采用通用的变化量化算法,对于HEVC标准和AV1标准,只有部分参数取值不同,主要的硬件模块可以通用,能够同时适应H.265/HEVC和AV1标准,尽可能共享硬件资源,进而,可以减小率失真优化量化模块的面积。综上所述,本申请提供的技术方案,可以并行处理量化系数,提高硬件的处理速度,降低硬件的处理延迟,而且,能够同时适应H.265/HEVC和AV1标准,尽可能共享硬件资源,减小率失真优化量化模块的面积。
附图说明
图1是根据一示例性实施例示出的一种编码器的框图。
图2是根据一示例性实施例示出的一种率失真优化量化方法的流程图。
图3是根据另一示例性实施例示出的一种率失真优化量化方法的流程图。
图4是根据一示例性实施例示出的一种第一量化系数矩阵的扫描示意图。
图5是根据另一示例性实施例示出的一种率失真优化量化方法的流程图。
图6是根据另一示例性实施例示出的一种率失真优化量化方法的流程图。
图7是根据另一示例性实施例示出的一种率失真优化量化方法的流程图。
图8是根据另一示例性实施例示出的一种率失真优化量化方法的流程图。
图9是根据另一示例性实施例示出的一种率失真优化量化方法的流程图。
图10是根据另一示例性实施例示出的一种率失真优化量化方法的流程图。
图11是根据一示例性实施例示出的一种率失真优化量化装置的框图。
图12是根据一示例性实施例示出的一种电子设备的框图。
具体实施方式
除非另作定义,在本说明书和权利要求书中使用的技术术语或者科学术语应当为本发明所属技术领域内具有一般技能的人士所理解的通常意义。以下将结合附图描述本发明的具体实施方式,需要指出的是,在这些实施方式的具体描述过程中,为了进行简明扼要的描述,本说明书不可能对实际的实施方式的所有特征均作详尽的描述。在不偏离本发明的精神和范围的情况下,本领域技术人员可以对本发明的实施方式进行修改和替换,所得实施方式也在本发明的保护范围之内。
在介绍本申请提供的率失真优化量化方法之前,先介绍一下编码器以及率失真优化量化模块在编码器中的位置。如图1所示,编码器包括变换模块11、率失真优化量化模块12以及熵编码模块13。率失真优化量化模块12位于变换模块11与熵编码模块13之间。
本申请中的编码器为视频编码器。当新的一帧视频帧进入编码器后,编码器通常会将视频帧划分为一系列不重叠的正方形或矩形的块。此处的“块”实质上是指矩阵。给定一个目标块,编码器会尝试为其找到最佳预测块,然后从目标块中减去预测块获得残差块。
变换模块11被配置为对残差快进行频域变换(一般是离散余弦变换,但不限于此)。变换模块11的输出是一个变换系数块(变换系数矩阵)。在大多数现代视频压缩标准(如HEVC和AV1)中,变换系数块称为变换单元(TU)。
率失真优化量化模块12用于对变换模块11输出的变换系数矩阵执行率失真优化量化,并输出量化系数矩阵(下文中的第二量化系数矩阵)给熵编码模块13。率失真优化量化模块12可包括量化模块121、分解模块122、统计模块123、调整模块124以及获取模块125。量化模块121被配置为对变换系数矩阵进行量化,得到第一量化系数矩阵;其中,变换系数矩阵包括至少一个变换系数,第一量化系数矩阵包括至少一个第一量化系数。分解模块122被配置为将第一量化系数矩阵划分为至少两个不重叠的第一量化系数子矩阵;统计模块123被配置为对至少两个第一量化系数子矩阵进行数据统计,获取量化统计数据;量化统计数据用于消除至少两个第一量化系数子矩阵之间的依赖关系;调整模块124被配置为针对每个第一量化系数子矩阵,对非零的第一量化系数进行系数调整,得到第二量化系数子矩阵;第二量化系数子矩阵包括至少一个第二量化系数;至少两个第一量化系数子矩阵的系数调整并行执行;获取模块125被配置为根据第二量化系数子矩阵以及第一量化系数子矩阵与第一量化系数矩阵的关系,获取第二量化系数矩阵,第二量化系数矩阵包括至少一个第二量化系数。此处仅对率失真优化量化模块12进行简单介绍,下面会对率失真优化量化模块12进行详细介绍。
熵编码模块13被配置为对率失真优化量化模块12输出的量化系数矩阵进行编码,例如,可采用CABAC(Context-Based Adaptive Binary Arithmetic Coding,基于上下文的二进制算术编码)编码方式进行编码,但不限于此。
以上简要介绍了编码器以及率失真优化量化模块12在编码器中的位置,下面对率失真优化量化模块12及其功能进行详细的介绍。
图2是根据一示例性实施例示出的一种率失真优化量化方法的流程图。该率失真优化量化方法,可以应用于编码器。该编码器适应HEVC标准与AV1标准中任意一个时,在率失真优化量化过程中,对于码率估计和失真估计,均采用通用的变化量化算法。请参见图2,该率失真优化量化方法,可以包括以下步骤:
步骤201,对变换系数矩阵进行量化,得到第一量化系数矩阵;其中,变换系数矩阵包括至少一个变换系数,第一量化系数矩阵包括至少一个第一量化系数。
在本实施例中,变换系数矩阵为由多个变换系数组成的多行多列的变换系数矩阵。例如,变换系数矩阵的大小可以为32*32,但不限于此。
在本实施例中,对变换系数矩阵进行量化可以理解为对变换系数矩阵中的每个变换系数进行量化。对一个变换系数进行量化,可以得到对应的第一量化系数。
在本实施例中,针对变换系数矩阵中的每个变换系数,可采用量化偏移参数对变换系数进行量化,得到第一量化系数。其中,第一量化系数可采用如下计算式计算得到:
QCoeff[cIdx][x][y]=sign[cIdx][x][y]×((|TCoeff[cIdx][x][y]|×quantizationScaler[cIdx][x][y]+(1<<(quantizationShift[cIdx][x][y]-1)))>>quantizationShift[cIdx][x][y]); (2)
其中,QCoeff[cIdx][x][y]为第一量化系数,sign[cIdx][x][y]为变换系数的符号,TCoeff[cIdx][x][y]为变换系数,quantizationScaler[cIdx][x][y]为量化缩放参数,quantizationShift[cIdx][x][y]为量化偏移参数,cIdx为Y、U、V分量索引,x、y为变换系数在变换系数矩阵中的坐标。
在本实施例中,编码器能够同时适应HEVC标准和AV1标准。在其他实施例中,编码器可单独适应HEVC标准或AV1标准。在本文中,为避免内容冗余,仅对编码器能够同时适应HEVC标准和AV1标准的方案进行详细介绍。
在本实施例中,量化偏移参数可采用如下计算式计算得到:
其中,QP1为编码器适应HEVC标准时的第一量化参数,transformShift为描述变换系数矩阵的内部变换移位的参数,numBitsDcQP为表示低频变换系数的量化索引dcQP所需的比特位数,tuSize为变换系数矩阵的大小,bitDepth为视频的比特位深度,numBitsAcQp为表示高频变换系数的量化索引acQP所需的比特位数。
由式(3)可知,当编码器适应HEVC标准时,量化偏移参数采用如下计算式计算得到:
其中,transformShift可采用如下计算式计算得到:
transformShift=15-bitDepth-log2(tuSize) (5)
当编码器适应AV1标准时,量化偏移参数采用如下计算式计算得到:
其中,dcQP采用如下计算式计算得到:
其中,av1DcQLookUp为第一表格,用于存储视频的比特位深度为8时第一量化参数与低频变换系数的量化索引的对应关系,av1DcQLoopUp10为第二表格,用于存储视频的比特位深度为10时第一量化参数与低频变换系数的量化索引的对应关系。
由式(7)可知,当视频的比特位深度为8时,可根据第一量化参数(QP1)查询第一表格,得到dcQP的值,当视频的比特位深度为10时,可根据第一量化参数(QP1)查询第二表格,得到dcQP的值。
其中,第一表格如下:
表1.av1DcQLookUp
QP dcQP
0 4
1 8
2 8
3 9
4 10
5 11
6 12
250 1098
251 1139
252 1184
253 1232
254 1282
255 1336
第二表格如下:
表2.av1DcQLookUp10
其中,acQP采用如下计算式计算得到:
其中,av1AcQLookUp为第三表格,用于存储视频的比特位深度为8时第一量化参数与高频变换系数的量化索引的对应关系,av1AcQLoopUp10为第四表格,用于存储视频的比特位深度为10时第一量化参数与高频变换系数的量化索引的对应关系。
由式(8)可知,当视频的比特位深度为8时,可根据第一量化参数(QP1)查询第三表格,得到acQP的值,当视频的比特位深度为10时,可根据第一量化参数(QP1)查询第四表格,得到acQP的值。
其中,第三表格如下:
表3.av1AcQLookUp
第四表格如下:
表4.av1AcQLookUp10
QP acQP
0 4
1 9
2 11
3 13
4 16
5 18
6 21
250 6640
251 6768
252 6900
253 7036
254 7172
255 7321
需要注意的是,由于AV1和HEVC共享统一的RDOQ设计和实现,而且本RDOQ的码率估计和失真估计基于HEVC的变换量化算法实现,因此,当编码器适应AV1标准时,式(7)和式(8)中使用的量化参数是编码器适应HEVC标准时的第一量化参数,而不是编码器适应AV1标准时的第二量化参数(QP2),因此,当编码器适应AV1标准时,在计算量化偏移参数之前,需要先将编码器适应AV1标准时的第二量化参数(QP2)转换为第一量化参数(QP1)。其中,可采用如下计算式将QP2转换为QP1:
其中,QP2为第二量化参数,av1ToHevcQp为第五表格,用于存储视频的比特位深度为8时第二量化参数与第一量化参数的对应关系,av1ToHevcQp10为第六表格,用于存储视频的比特位深度为10时第二量化参数与第一量化参数的对应关系。
由式(9)可知,当视频的比特位深度为8时,可根据QP2查询第五表格,得到QP1的值,当视频的比特位深度为10时,可根据QP2查询第六表格,得到QP1的值。
其中,第五表格如下:
表5.av1ToHevcQp
QP2 QP1
0 0
1 2
2 5
3 6
4 7
5 8
6 8
250 51
251 51
252 51
253 51
254 51
255 51
第六表格如下:
表6.av1ToHevcQp10
QP2 QP1
0 0
1 0
2 0
3 0
4 0
5 0
6 0
250 51
251 51
252 51
253 51
254 51
255 51
quantizationScaler[cIdx][x][y]可采用如下计算式计算得到:
其中,hevcScalingList为第七表格,用于存储编码器适应HEVC标准时QP1%6与量化缩放参数的对应关系,numBitsDcQP为表示低频变换系数的量化索引dcQP所需的比特位数,numBitsAcQp为表示高频变换系数的量化索引acQP所需的比特位数。
由式(10)可知,当编码器适应HEVC标准时,可采用如下计算式计算得到:
quantizationScaler[cIdx][x][y]=hevcScalingList[QP1%6]; (11)
即,当编码器适应HEVC标准时,根据QP1%6查询第七表格,得到对应的量化缩放参数。其中,第七表格如下:
表7.hevcScalingList
QP1%6 quantizationScaler
0 26214
1 23302
2 20560
3 18396
4 16384
5 14564
当编码器适应AV1标准时,quantizationScaler[cIdx][x][y]采用如下计算式计算得到:
步骤202,将第一量化系数矩阵划分为至少两个不重叠的第一量化系数子矩阵。
在本实施例中,以第一量化系数矩阵的大小为32*32为例进行说明。在划分第一量化系数矩阵时,可以根据实际需求确定划分的第一量化系数子矩阵(CG)的大小。其中,划分得到的至少两个的第一量化系数子矩阵的大小相同。在本实施例中,以第一量化系数子矩阵的大小为4*4为例进行说明。当然,在其他实施例中,第一量化系数子矩阵的大小也可以为8*8或16*16。
步骤203,对至少两个第一量化系数子矩阵进行数据统计,获取量化统计数据。量化统计数据用于消除至少两个第一量化系数子矩阵之间的依赖关系。
在本实施例中,如图3所示,步骤203可以包括如下步骤:
步骤301,对第一量化系数矩阵的第一量化系数子矩阵,按照指定的第一扫描顺序对至少两个第一量化系数子矩阵分别进行扫描。
步骤302,针对每个第一量化系数子矩阵,按照指定的第二扫描顺序对第一量化系数进行扫描,获取量化统计数据;第一扫描顺序与第二扫描顺序相同。
如图4所示,对第一量化系数矩阵41的第一量化系数子矩阵411,按照指定的第一扫描顺序S1对所有第一量化系数子矩阵411分别进行扫描。第一扫描顺序S1与CABAC处理顺序相似,也可称为zig-zag扫描顺序。从右下角的第一量化系数子矩阵411开始,然后向上移动,然后沿对角线向下移动,并重复这种对角线模式,直到到达第一量化系数矩阵41的左上角。
如图4所示,针对每个第一量化系数子矩阵411,按照指定的第二扫描顺序S2对第一量化系数4111进行扫描,获取量化统计数据;第一扫描顺序S1与第二扫描顺序S2相同。对第一量化系数矩阵扫描结束后,可以获得量化统计数据。
在本实施例中,步骤203之前,还为至少一个上下文模型创建对应的数组,并初始化上下文模型为预定义值;数组用于存储对应的上下文模型的状态;数组的每个元素为8位整数。其中,至少一个上下文模型在率失真优化量化过程中是固定的。
其中,至少一个上下文模型可包括第一上下文模型、第二上下文模型、第三上下文模型与第四上下文模型。至少一个上下文模型对应的数组包括第一数组、第二数组、第三数组与第四数组。
第一上下文模型为significantCoeffGroupCtx[2],用于存储第一语法元素的条件概率状态,第一语法元素为significantCoeffCroup,用于指出当前的第一量化系数子矩阵是否有非零的第一量化系数。第一语法元素为第一上下文模型。
第二上下文模型为sigCoeffCtx[44],用于存储第二语法元素的条件概率状态,第二语法元素为sigCoeffFlag,用于指出当前的第一量化系数是否为零。第二语法元素为第二上下文模型。
第三上下文模型为greaterOneCoeffCtx[24],用于存储第三语法元素的条件概率状态,第三语法元素为absCoeffGreaterThanOneFlag,用于指出当前的第一量化系数的绝对值是否大于1。第三语法元素为第三上下文模型。
第四上下文模型为levelAbsCoeffCtx[6],用于存储第四语法元素的条件概率状态,第四语法元素为levelAbsCoeff,是当前的第一量化系数的绝对值。第四语法元素为第四上下文模型。
在本实施例中,量化统计数据包括:第一量化系数子矩阵中绝对值为1的第一量化系数的数量、第一量化系数子矩阵中绝对值大于1的第一量化系数的数量、第一量化系数子矩阵中绝对值大于2的第一量化系数的数量、第一量化系数矩阵中按照第一扫描顺序排列的第一个非零的第一量化系数的位置、第一量化系数子矩阵中按照第二扫描顺序排列的第一个绝对值为4的第一量化系数的位置、第一量化系数子矩阵中按照第二扫描顺序排列的第一个绝对值为7的第一量化系数的位置、第一量化系数子矩阵中按照第二扫描顺序排列的第一个绝对值为13的第一量化系数的位置以及第一量化系数子矩阵中按照第二扫描顺序排列的第一个绝对值为25的第一量化系数的位置。
其中,第一量化系数子矩阵中绝对值为1的第一量化系数的数量存储于名为cgOneCnt[64]的第五数组中,第五数组在处理变换系数矩阵前或在数据统计前初始化为全零数组,在数据统计过程中,如果当前第一量化系数的绝对值为1,对应的第一量化系数子矩阵的cgOneCnt自增1。第一量化系数子矩阵中绝对值为1的第一量化系数的数量采用如下计算式计算得到:
其中,QCoeff[cIdx][x][y]为第一量化系数,cIdx为Y、U、V分量索引,x、y为第一量化系数在第一量化系数矩阵中的坐标,tuSize为变换系数矩阵的大小。
第一量化系数子矩阵中绝对值大于1的第一量化系数的数量存储于名为cgGreatherThanOneCnt[64]的第六数组中,第六数组在处理变换系数矩阵前或在数据统计前初始化为全零数组,在数据统计过程中,如果当前第一量化系数的绝对值大于1,对应的第一量化系数子矩阵的cgGreaterThanOneCnt自增1。第一量化系数子矩阵中绝对值大于1的第一量化系数的数量采用如下计算式计算得到:
其中,QCoeff[cIdx][x][y]为第一量化系数,cIdx为Y、U、V分量索引,x、y为第一量化系数在第一量化系数矩阵中的坐标,tuSize为变换系数矩阵的大小。
第一量化系数子矩阵中绝对值大于2的第一量化系数的数量存储于名为cgGreaterThanTwoCnt[64]的第七数组中,第七数组在处理变换系数矩阵前或在数据统计前初始化为全零数组,在数据统计过程中,如果当前第一量化系数的绝对值大于2,对应的第一量化系数子矩阵的cgGreaterThanTwoCnt自增1。第一量化系数子矩阵中绝对值大于2的第一量化系数的数量采用如下计算式计算得到:
其中,QCoeff[cIdx][x][y]为第一量化系数,cIdx为Y、U、V分量索引,x、y为第一量化系数在第一量化系数矩阵中的坐标,tuSize为变换系数矩阵的大小。
第一个绝对值为4的第一量化系数的位置存储于名为cgFirst4Loc[64][2]的第八数组中,第八数组在处理变换系数矩阵前或在数据统计前所有元素初始化为-1,第一个绝对值为4的第一量化系数的位置的纵坐标存储于cgFirst4Loc[64][0],横坐标存储于cgFirst4Loc[64][1]。如果Coeff[cIdx][x][y]是第一量化系数子矩阵中第一个绝对值为4的系数,则cgFirst4Loc更新为:
其中,cIdx为Y、U、V分量索引,x、y为第一个绝对值为4的系数在第一量化系数矩阵中的坐标,tuSize为变换系数矩阵的大小,y1为第一个绝对值为4的第一量化系数在第一量化系数子矩阵中的纵坐标,x1为第一个绝对值为4的第一量化系数在第一量化系数子矩阵中的横坐标。
第一个绝对值为7的第一量化系数的位置存储于名为cgFirst7Loc[64][2]的第九数组中,第九数组在处理变换系数矩阵前或在数据统计前所有元素初始化为-1,第一个绝对值为7的第一量化系数的位置的纵坐标存储于cgFirst7Loc[64][0],横坐标存储于cgFirst7Loc[64][1]。如果Coeff[cIdx][x][y]是第一量化系数子矩阵中第一个绝对值为7的系数,则cgFirst7Loc更新为:
其中,cIdx为Y、U、V分量索引,x、y为第一个绝对值为7的系数在第一量化系数矩阵中的坐标,tuSize为变换系数矩阵的大小,y2为第一个绝对值为7的第一量化系数在第一量化系数子矩阵中的纵坐标,x2为第一个绝对值为7的第一量化系数在第一量化系数子矩阵中的横坐标。
第一个绝对值为13的第一量化系数的位置存储于名为cgFirst13Loc[64][2]的第十数组中,第十数组在处理变换系数矩阵前或在数据统计前所有元素初始化为-1,第一个绝对值为13的第一量化系数的位置的纵坐标存储于cgFirst13Loc[64][0],横坐标存储于cgFirst13Loc[64][1]。如果Coeff[cIdx][x][y]是第一量化系数子矩阵中第一个绝对值为13的系数,则cgFirst13Loc更新为:
其中,cIdx为Y、U、V分量索引,x、y为第一个绝对值为13的系数在第一量化系数矩阵中的坐标,tuSize为变换系数矩阵的大小,y3为第一个绝对值为13的第一量化系数在第一量化系数子矩阵中的纵坐标,x3为第一个绝对值为13的第一量化系数在第一量化系数子矩阵中的横坐标。
第一个绝对值为25的第一量化系数的位置存储于名为cgFirst25Loc[64][2]的第十一数组中,第十一数组在处理变换系数矩阵前或在数据统计前所有元素初始化为-1,第一个绝对值为25的第一量化系数的位置的纵坐标存储于cgFirst25Loc[64][0],横坐标存储于cgFirst25Loc[64][1]。如果Coeff[cIdx][x][y]是第一量化系数子矩阵中第一个绝对值为25的系数,则cgFirst25Loc更新为:
其中,cIdx为Y、U、V分量索引,x、y为第一个绝对值为25的系数在第一量化系数矩阵中的坐标,tuSize为变换系数矩阵的大小,y4为第一个绝对值为25的第一量化系数在第一量化系数子矩阵中的纵坐标,x4为第一个绝对值为25的第一量化系数在第一量化系数子矩阵中的横坐标。
第一量化系数矩阵中第一个非零的第一量化系数的位置定义为firstSigCoeffX和firstSigCoeffY。其中,firstSigCoeffX为第一个非零的第一量化系数在第一量化系数矩阵中的横坐标,firstSigCoeffY为第一个非零的第一量化系数在第一量化系数矩阵中的纵坐标。
本实施例中,上述的每个数组的每个元素为8位整数。本申请中,采用整数运算,提出了一种主要基于32位整数计算的RDOQ模块,从而显着减少了硬件面积和处理延迟。
需要说明的是,传统的RDOQ需要大量基于浮点运算和大量乘法来计算编码成本。这可能会成倍地增加硬件复杂度。浮点运算会极大增加硬件开销,因为基于浮点运算的电路需要更大的面积并且需要更多的周期来运行。
步骤204,针对每个第一量化系数子矩阵,对非零的第一量化系数进行系数调整,得到第二量化系数子矩阵;第二量化系数子矩阵包括至少一个第二量化系数;至少两个第一量化系数子矩阵的系数调整并行执行。
在本实施例中,如图5所示,步骤204,可以包括以下步骤:
步骤501,针对每个非零的第一量化系数,计算按照至少两个系数调整方案进行系数调整的第一编码代价。
步骤502,针对每个系数调整方案,根据所有第一编码代价的和值,获得第二编码代价;第二编码代价为第一量化系数子矩阵进行系数调整的编码代价。
步骤503,从至少两个系数调整方案中确定目标系数调整方案,其中,目标系数调整方案的第二编码代价为至少两个系数调整方案的第二编码代价中最小的编码代价。
步骤504,根据目标系数调整方案对第一量化系数子矩阵中的非零的第一量化系数进行系数调整,得到第二量化系数子矩阵。
在本实施例中,至少两个系数调整方案可包括三个系数调整方案:第一系数调整方案、第二系数调整方案以及第三系数调整方案。三个系数调整方案对非零的第一量化系数的调整的幅度不同。例如,第一系数调整方案可以是将第一量化系数置零,第二系数调整方案可以是保持第一量化系数的符号不变,绝对值减去1,第三系数调整方案可以是保持第一量化系数的符号不变,绝对值减去2,但不限于此。
在本实施例中,按照每个系数调整方案调整非零的第一量化系数,产生对应的第一编码代价。对于每个第一量化系数子矩阵,针对每个非零的第一量化系数,计算按照至少两个系数调整方案进行系数调整的第一编码代价。例如,针对每个非零的第一量化系数,计算按照第一系数调整方案、第二系数调整方案以及第三系数调整方案进行系数调整的第一编码代价,可以得到三个第一编码代价。
然后,针对每个系数调整方案,根据所有第一编码代价的和值,获得第二编码代价;第二编码代价为第一量化系数子矩阵进行系数调整的编码代价。例如,针对第一系数调整方案、第二系数调整方案以及第三系数调整方案中的每个系数调整方案,可以获得对应的第二编码代价,共获得三个第二编码代价。
然后,从至少两个系数调整方案的第二编码代价中选取的最小的编码代价,然后将该最小的编码代价对应的系数调整方案作为目标系数调整方案,实现从至少两个系数调整方案中确定目标系数调整方案。例如,如果三个第二编码代价中第一系数调整方案对应的第二编码代价最小,则第一系数调整方案为目标系数调整方案。
然后,根据目标系数调整方案对第一量化系数子矩阵中的非零的第一量化系数进行系数调整,得到第二量化系数子矩阵。
在本实施例中,第一编码代价采用如下计算式计算得到:
cost1[cIdx][x′][y′]=distortion[cIdx][x′][y′]+rate[cIdx][x′][y′] (24)
其中,cost1[cIdx][x'][y']为第一编码代价,distortion[cIdx][x'][y']为像素域的误差,rate[cIdx][x'][y']为编码码率,cIdx为Y、U、V分量索引,x'、y'为第一量化系数在第一量化系数子矩阵中的坐标。
需要说明的是,上述的式(24)是计算本文中所有编码代价的通用计算式。
其中,像素域的误差可采用如下计算式计算得到:
distortion[cIdx][x′][y′]=(mErrr[cIdx][x′][y′]>>(2×transformShift+1))×mErr[cIdx][x′][y′] (25)
其中,mErr[cIdx][x'][y']为量化误差的反向还原值,transformShift为描述变换系数矩阵的内部变换移位的参数。
当视频的比特位深度为8时,mErr[cIdx][x'][y']可采用如下计算式计算得到:
由式(26)可知,当编码器适应HEVC标准且视频的比特位深度为8时,量化误差的反向还原值采用如下计算式计算得到:
mErr[cIdx][x′][y′]=(err[cIdx][x′][y′]>>12)×hevcScaler[QP1%6](27)
其中,err[cIdx][x'][y']为量化误差,hevcScaler为第八表格,用于存储QP1%6与放大系数的对应关系,根据QP1%6查询第八表格可获得对应的放大系数(Scaler),QP1为编码器适应HEVC标准时的第一量化参数。
其中,将量化误差乘以一个放大系数即可得到像素域的失真。对于HEVC和AV1两种编码器,由于它们的变换基不同,因此,放大系数也不同。
其中,第八表格如下:
表8.hevcScaler
QP1%6 Scaler
0 40
1 45
2 51
3 57
4 64
5 72
当编码器适应AV1标准且视频的比特位深度为8时,量化误差的反向还原值采用如下计算式计算得到:
其中,err[cIdx][x'][y']为量化误差,numBitsDcQP为表示低频变换系数的量化索引dcQP所需的比特位数,numBitsAcQp为表示高频变换系数的量化索引acQP所需的比特位数。
当视频的比特位深度为10时,量化误差的反向还原值采用如下方法得到:首先,获取视频的比特位深度为8时的量化误差的反向还原值,将视频的比特位深度为8时的量化误差的反向还原值右移两位,得到视频的比特位深度为10时的量化误差的反向还原值。其中,将视频的比特位深度为8时的量化误差的反向还原值右移两位,得到视频的比特位深度为10时的量化误差的反向还原值的计算式如下:
mErr[cIdx][x′][y′]》=(bitDepth-8) (29)
其中,量化误差采用如下计算式计算得到:
err[cIdx][x′][y′]=||TCoeff[cIdx][x′][y′]|×quantizationScaler[cIdx][x′][y′]-(|QCoeff[cIdx][x′][y′]|<<quantizationShift[cIdx][x′][y′])| (30)
其中,TCoeff[cIdx][x'][y']为变换系数,quantizationScaler[cIdx][x'][y']为量化缩放参数,QCoeff[cIdx][x'][y']为第一量化系数,quantizationShift[cIdx][x'][y']为量化偏移参数。
其中,|TCoeff[cIdx][x'][y']|×quantizationScaler[cIdx][x'][y']是将变换系数乘上一个量化缩放参数来近似原始的量化输入,(|QCoeff[cIdx][x'][y']|<<quantizationShift[cIdx][x'][y'])是反量化后的值,将它们相减就是量化误差。由于量化误差被变换放大,因此,需要将量化误差反向还原,计算上述的量化误差的反向还原值。
由于量化误差是基于频域的失真,编码器需要知道像素域的失真来计算最终的编码代价,于是按照上述的式(25)将频域的量化误差转换成像素域的误差。
编码码率采用如下计算式计算得到:
rate[cIdx][x′][y′]=sigCoeffFlagRate[cIdx][x′][y′]+coeffAbsLevelRate[cIdx][x′][y′] (31)
其中,sigCoeffFlagRate[cIdx][x'][y']为第二语法元素的第一码率估计,第二语法元素为sigCoeffFlag,用于指出当前的第一量化系数是否为零,coeffAbsLevelRate[cIdx][x'][y']为对非零的第一量化系数的绝对值进行编码的语法元素的第二码率估计。
其中,sigCoeffFlagRate[cIdx][x'][y']可采用如下计算式计算得到:
其中,rateEstTab为第九表格,第九表格用于存储QP1%3、语法元素的条件概率状态与码率估计的对应关系,QP1为编码器适应HEVC标准时的第一量化参数,sigCoeffFlagTabIdx为第二语法元素的当前条件概率状态,bitDepth为视频的比特位深度。
由式(32)可知,当编码器适应HEVC时,第一码率估计采用如下计算式计算得到:
其中,根据QP1%3与sigCoeffFlagTabIdx查询第九表格得到的码率估计根据QP1与bitDepth进一步缩放得到第一码率估计。
其中,第九表格如下:
表9.rateEstTab
第九表格中,Context index为语法元素的条件概率状态,Rate estimation为码率估计。
由于HEVC和AV1都使用基于算术编码的熵编码器,本申请设计了如表9所示的通用的码率估计表。表9需要两个输入,QP1和语法元素的概率状态,根据输入,从表9中查询编码该语法元素所需的码率代价。例如,Context index可以为第二语法元素的条件概率状态,也可以为第三语法元素的条件概率状态。即可以根据QP1%3与第二语法元素的条件概率状态查询第九表格得到对应的码率估计,也可以根据QP1%3与第三语法元素的条件概率状态查询第九表格得到对应的码率估计。sigCoeffFlagTabIdx采用如下计算式计算得到:
其中,sigCoeffCtx为第二上下文模型,用于存储第二语法元素的条件概率状态,sigCoeffCtxIdx由当前的所述第一量化系数子矩阵顶部的两个相邻的所述第一量化系数子矩阵和左边的两个相邻的第一量化系数子矩阵的第一语法元素的值综合决定。
当编码器适应AV1标准时,sigCoeffFlagRate[cIdx][x'][y']采用如下计算式计算得到:
为了编码非零的第一量化系数,编码器引入了三个语法元素:第三语法元素、第五语法元素与第六语法元素。第三语法元素为absCoeffGreaterThanOneFlag,用于指出当前的第一量化系数的绝对值是否大于1,第五语法元素为absCoeffGreaterThanTwo,用于指出当前的第一量化系数的绝对值是否大于2,第六语法元素为absCeoffMinusTwo,用于表示当前的第一量化系数的绝对值减2。
coeffAbsLevelRate[cIdx][x'][y']采用如下计算式计算得到:
coeffAbsLevelRate[cIdx][x′][y′]=absCoeffGreaterThanOneFlagRate[cIdx][x′][y′]+absCoeffGreaterThanTwoFlagRate[cIdx][x′][y′]+absCoeffMinusTwoRate[cIdx][x′][y′]; (36)
其中,absCoeffGreaterThanOneFlagRate[cIdx][x'][y']为第三语法元素的第三码率估计,absCoeffGreaterThanTwoFlagRate[cIdx][x'][y']为第五语法元素的第四码率估计,absCoeffMinusTwoRate[cIdx][x'][y']为第六语法元素的第五码率估计。
其中,absCoeffGreaterThanOneFlagRate[cIdx][x'][y']采用如下计算式计算得到:
其中,rateEstTab为第九表格,greaterThanOneTabIdx为第三语法元素的当前条件概率状态,其由cgGreatherThanOneCnt[64]中收集的统计数据,cIdx以及CG在TU中的位置决定。
由式(37)可知,当|QCoeff[cIdx][x'][y']|<1时,第三码率估计等于0;QCoeff[cIdx][x'][y']为第一量化系数。
当|QCoeff[cIdx][x'][y']|≥1且编码器适应HEVC标准时,第三码率估计采用如下计算式计算得到:
当|QCoeff[cIdx][x'][y']|≥1且编码器适应AV1标准时,第三码率估计采用如下计算式计算得到:
其中,QP1为编码器适应HEVC标准时的第一量化参数,由编码器适应AV1标准时的第二量化参数转换得到,greaterThanOneTabIdx为第三语法元素的当前条件概率状态。
absCoeffGreaterThanTwoFlagRate[cIdx][x'][y']采用如下计算式计算得到:
其中,greaterThanTwoTabIdx为第五语法元素的当前条件概率状态。
由式(40)可知,当|QCoeff[cIdx][x'][y']|<2时,第四码率估计等于0。
当|QCoeff[cIdx][x'][y']|≥2且编码器适应HEVC标准时,第四码率估计采用如下计算式计算得到:
当|QCoeff[cIdx][x'][y']|≥2且编码器适应AV1标准时,第四码率估计采用如下计算式计算得到:
其中,QP1为编码器适应HEVC标准时的第一量化参数,由编码器适应AV1标准时的第二量化参数转换得到。
absCoeffMinusTwoRate[cIdx][x'][y']采用如下计算式计算得到:
其中,GolombCodeLength为采用Golomb-Rice码编码第六语法元素所需的码长,其由第一量化系数的绝对值大小决定,eqProbRateEstTab为第十表格,用于存储在第六语法元素的条件概率均匀分布的情况下,第一量化参数与码率估计的对应关系。
由式(43)可知,当|QCoeff[cIdx][x'][y']|<3时,第五码率估计等于0。
当|QCoeff[cIdx][x'][y']|≥3且编码器适应HEVC标准时,absCoeffMinusTwoRate[cIdx][x'][y']采用如下计算式计算得到:
absCoeffMinusTwoRate[cIdx][x′][y′]=(GolombCodeLength×eqProbRateEstTab[QP1-6*(bitDepth-8)]) (44)
其中,GolombCodeLength为采用Golomb-Rice码编码第六语法元素所需的码长,eqProbRateEstTab为第十表格,用于存储在第六语法元素的条件概率均匀分布的情况下,索引值与码率估计的对应关系,索引值根据第一量化参数与比特位深度确定,第一量化参数为编码器适应HEVC标准时的量化参数。
当|QCoeff[cIdx][x'][y']|≥3且编码器适应AV1标准时,absCoeffMinusTwoRate[cIdx][x'][y']采用如下计算式计算得到:
absCoeffMinusTwoRate[cIdx][x′][y′]=GolombCodeLength×(eqProbRateEstTab[QP1]-(eqProbRateEstTob[QP1]>>2)) (45)
其中,GolombCodeLength为采用Golomb-Rice码编码第六语法元素所需的码长,eqProbRateEstTab为第十表格,用于存储在第六语法元素的条件概率均匀分布的情况下,第一量化参数与码率估计的对应关系,第一量化参数由第二量化参数转换而来,第一量化参数为编码器适应HEVC标准时的量化参数,第二量化参数为编码器适应AV1标准时的量化参数。
其中,第十表格如下:
表10.eqProbRateEstTab
index Value
0 1167
1 1470
2 1853
3 2334
4 2941
5 3706
6 4669
46 48194566
47 60721348
48 76504104
49 96389132
50 121442696
51 153008209
其中,index为索引值,Value为码率估计。
步骤205,根据第二量化系数子矩阵以及第一量化系数子矩阵与第一量化系数矩阵的关系,获取第二量化系数矩阵,第二量化系数矩阵包括至少一个第二量化系数。
在本实施例中,对至少两个第一量化系数子矩阵系数调整得到对应的至少两个第二量化系数子矩阵,根据至少两个第二量化系数子矩阵以及至少两个第一量化系数子矩阵与第一量化系数矩阵的关系,可以生成第二量化系数矩阵。
在本申请中,由于在对变换系数矩阵进行量化得到第一量化系数矩阵后,将第一量化系数矩阵划分为至少两个不重叠的第一量化系数子矩阵,并对至少两个第一量化系数子矩阵进行数据统计,获取量化统计数据,这样,利用量化统计数据可以用于消除至少两个第一量化系数子矩阵之间的依赖关系,后续可以第一量化系数子矩阵为单位并行处理量化系数。接着,针对每个第一量化系数子矩阵,对非零的第一量化系数进行系数调整,得到第二量化系数子矩阵,至少两个第一量化系数子矩阵的系数调整并行执行。然后,根据第二量化系数子矩阵以及第一量化系数子矩阵与第一量化系数矩阵的关系,获取第二量化系数矩阵。综上,本申请提供的技术方案,可以并行处理量化系数,提高硬件的处理速度,降低硬件的处理延迟。
在本申请中,采用整数运算,而非浮点数运算,可以降低硬件实现的复杂度,减小率失真优化量化模块12的面积。
在本申请中,率失真优化量化模块12是一种通用的率失真优化量化模块12,对于HEVC标准和AV1标准,只有部分参数取值不同,但是主要的硬件模块可以通用,能够同时适应H.265/HEVC和AV1标准,尽可能共享硬件资源。因此,本申请提供的技术方案,可以减小率失真优化量化模块12的面积。
需要说明的是,H.265/HEVC和AV1是两种不同的视频压缩标准。尽管它们共享大部分顶层设计,但各个模块的具体实现不同。传统上,会针对H.265/HEVC编码器设计专用的RDOQ模块以适应H.265/HEVC特有的量化和编码策略。而针对AV1编码器设计另外的RDOQ模块以适应AV1的量化和编码策略。这两个不同的RDOQ模块可能会增加电路面积并且不能共享它们之间的资源。
本申请另一示例性实施例还提供一种率失真优化量化方法。本实施例提供上述步骤204的另一种实施方式。如图6所示,本实施例中,步骤204可以包括以下步骤:
步骤601,针对每个非零的第一量化系数,如果第一量化系数在第一扫描顺序中位于第一个非零的第一量化系数之后,计算将第一量化系数归零的第三编码代价。
在本实施例中,第三编码代价采用如下计算式计算得到:
zeroOutCost[cIdx][x′][y′]=distortion[cIdx][x′][y′] (46)
其中,distortion[cIdx][x'][y']为像素域的误差。在QCoeff[cIdx][x'][y']=0的条件下可以采用上述的式(25)计算distortion[cIdx][x'][y']。
步骤602,对第一量化系数进行微调,得到对应的第二量化系数,并计算微调第一量化系数的第四编码代价。
在本实施例中,微调第一量化系数可以是保持第一量化系数的符号不变,绝对值减去1,或,保持第一量化系数的符号不变,绝对值减去2。
在本实施例中,第四编码代价与第一编码代价的计算方法相同,因此,可以采用上述的式(24)计算第四编码代价。
步骤603,获取所有第三编码代价的和值,得到第五编码代价;第五编码代价为第一量化系数子矩阵归零的编码代价。
在本实施例中,针对每个CG,采用如下计算式获取所有第三编码代价的和值,得到第五编码代价:
其中,cgCost0为第五编码代价,zeroOutCost[cIdx][x'][y']为第三编码代价,cIdx为Y、U、V分量索引,x'、y'为第一量化系数在第一量化系数子矩阵中的坐标,CGSize为第一量化系数子矩阵的大小。
步骤604,获取所有第四编码代价的和值,得到第六编码代价;第六编码代价为第一量化系数子矩阵进行系数微调的编码代价。
在本实施例中,针对每个CG,采用如下计算式获取所有第四编码代价的和值,得到第六编码代价:
其中,cgCost1为第六编码代价,tweakedCoeffCost[cIdx][x'][y']为第四编码代价。
步骤605,如果第五编码代价小于第六编码代价,将第一量化系数子矩阵置零,得到第二量化系数子矩阵。
步骤606,如果第六编码代价小于第五编码代价,根据第二量化系数得到第二量化系数子矩阵。
在本实施例中,针对每个CG,如果将第一量化系数子矩阵置零的编码代价小,则将第一量化系数子矩阵置零,如果微调第一量化系数时第一量化系数子矩阵的编码代价小,则微调第一量化系数,得到第二量化系数子矩阵。这样,可以以最小编码代价实现系数调整。
本申请另一示例性实施例还提供一种率失真优化量化方法。本实施例提供上述步骤602的另一种实施方式。如图7所示,本实施例中,步骤602可以包括以下步骤:
步骤701,将第一量化系数调整为第一候选量化系数,并计算调整第一量化系数的第一候选编码代价,其中,第一候选量化系数为0。
步骤702,如果第一量化系数的绝对值大于1,将第一量化系数调整为第二候选量化系数,并计算调整第一量化系数的第二候选编码代价,其中,第二候选量化系数的符号与第一量化系数的符号相同,第二候选量化系数的绝对值等于第一量化系数的绝对值减去1。
步骤703,将第一量化系数调整为第三候选量化系数,并计算调整第一量化系数的第三候选编码代价,其中,第三候选量化系数为第一量化系数。亦即,计算第一量化系数的第三候选编码代价,其中,不对第一量化系数做任何调整。
步骤704,选取第一候选编码代价、第二候选编码代价与第三候选编码代价中最小的编码代作为第四编码代价。
步骤705,第一候选编码代价、第二候选编码代价与第三候选编码代价中最小的编码代价对应的量化系数为第二量化系数。
在本实施例中,对于非零的第一量化系数,率失真优化量化模块试图将第一量化系数置零,或将其绝对值缩小1或2来降低编码码率。因此,存在三个候选量化系数:第一候选量化系数、第二候选量化系数与第三候选量化系数。其中,第一候选量化系数为0,第二候选量化系数的符号与第一量化系数的符号相同,第二候选量化系数的绝对值等于第一量化系数的绝对值减去1,第三候选量化系数的符号与第一量化系数的符号相同,第三候选量化系数的绝对值等于第一量化系数的绝对值减去2。
在本实施例中,首先,将第一量化系数置零,并计算调整第一量化系数的第一候选编码代价。然后,如果第一量化系数的绝对值大于1,将第一量化系数调整为第二候选量化系数,并计算调整第一量化系数的第二候选编码代价,如果第一量化系数的绝对值大于2,将第一量化系数调整为第三候选量化系数,并计算调整第一量化系数的第三候选编码代价,然后,选取第一候选编码代价、第二候选编码代价与第三候选编码代价中最小的编码代作为第四编码代价,其中,第四编码代价为微调第一量化系数的编码代价。然后,选取第一候选编码代价、第二候选编码代价与第三候选编码代价中最小的编码代价对应的量化系数作为第二量化系数。
其中,第四编码代价采用如下计算式计算得到:
tweakedCoeffCost[cIdx][x′][y′]=min(cost0[cIdx][x′][y′],cost1[cIdx][x′][y′],cost2[cIdx][x′][y′])) (49)
其中,tweakedCoeffCost[cIdx][x'][y']为第四编码代价。
其中,第二量化系数采用如下计算式计算得到:
其中,newQCoeff[cIdx][x'][y']为第二量化系数,sign[cIdx][x'][y']为第一量化系数的符号,cost0[cIdx][x'][y']为第一候选编码代价,cost1[cIdx][x'][y']为第二候选编码代价,cost2[cIdx][x'][y']为第三候选编码代价。
其中,sign[cIdx][x'][y']×(|QCoeff[cIdx][x'][y']|-1)为第二候选量化系数,sign[cIdx][x'][y']×(|QCoeff[cIdx][x'][y']|-2)为第三候选量化系数。
本申请另一示例性实施例还提供一种率失真优化量化方法。如图8所示,该率失真优化量化方法,可以包括以下步骤:
步骤801,初始化RDOQ参数。此处的RDOQ参数为RDOQ全局参数。
当编码器能够适应HEVC标准时,RDOQ全局参数包括:QP1、bitDepth、transformShift、quantizationShift、quantizationScaler以及QCoeff[cIdx][x][y]。
当编码器能够适应AV1标准时,RDOQ全局参数还除了包括上述的全局参数,还包括QP2、dcQP与acQP。
步骤802,为各个语法元素初始化上下文模型。
在本实施例中,为第一语法元素、第二语法元素、第三语法元素、第四语法元素初始化对应的第一上下文模型、第二上下文模型、第三上下文模型与第四上下文模型。
步骤803,量化变换系数。
在本实施例中,对变换系数矩阵中的每个变换系数进行量化。本步骤与上述的步骤201相似,在此不再赘述。
步骤804,更新量化当前TU的各个统计指标。
在本步骤中,将TU划分为至少两个不重叠的CG,并对至少两个CG进行数据统计,并更新当前TU的各个统计指标。本步骤与上述的步骤202~203相似,在此不再赘述。
此处的各个统计指标包括上述的第一量化系数子矩阵中绝对值为1的第一量化系数的数量、第一量化系数子矩阵中绝对值大于1的第一量化系数的数量、第一量化系数子矩阵中绝对值大于2的第一量化系数的数量、第一量化系数矩阵中按照第一扫描顺序排列的第一个非零的第一量化系数的位置、第一量化系数子矩阵中按照第二扫描顺序排列的第一个绝对值为4的第一量化系数的位置、第一量化系数子矩阵中按照第二扫描顺序排列的第一个绝对值为7的第一量化系数的位置、第一量化系数子矩阵中按照第二扫描顺序排列的第一个绝对值为13的第一量化系数的位置以及第一量化系数子矩阵中按照第二扫描顺序排列的第一个绝对值为25的第一量化系数的位置。
步骤805,获取当前TU的一个CG。
在本实施例中,可以对TU的各个CG进行标识,以区分各个CG。率失真优化量化模块12可以包括多个调整模块124,多个调整模块124可以并行地获取TU的一个CG,以并行地处理CG。
步骤806,微调CG的每一个非零的系数。
在本实施例中,每个调整模块124微调对应的CG的每一个非零的第一量化系数。本步骤与上述的步骤204相似,在此不再赘述。
步骤807,如有必要,对CG强制置零。
在本实施例中,调整模块124会判断当前CG是否符合强制置零的条件,如果符合,则对CG强制置零。
步骤808,判断当前的CG是否为当前TU的最后一个CG。
在本实施例中,调整模块124会判断当前的CG是否为当前TU的最后一个CG,如果不是,则执行步骤805,获取下一个CG,如果是,则执行步骤809,结束流程。
步骤809,结束。
在本申请中,由于在对TU进行量化得到第一量化系数矩阵后,将第一量化系数矩阵划分为至少两个不重叠的CG,并对至少两个CG进行数据统计,获取量化统计数据,这样,利用量化统计数据可以用于消除至少两个CG之间的依赖关系,后续可以CG为单位并行处理量化系数。接着,针对每个CG,对非零的第一量化系数进行系数调整,得到第二量化系数子矩阵,至少两个CG的系数调整并行执行。然后,根据第二量化系数子矩阵以及CG与第一量化系数矩阵的关系,获取第二量化系数矩阵。综上,本申请提供的技术方案,可以并行处理量化系数,提高硬件的处理速度,降低硬件的处理延迟。
本申请另一示例性实施例还提供一种率失真优化量化方法。在本实施例中,提供了CG层的处理流程。同时,也是上述步骤204的一种具体实施方式。如图9所示,该率失真优化量化方法,可以包括以下步骤:
步骤901,输入CG。
在本步骤中,向调整模块124输入TU的一个CG。
步骤902,判断当前的第一量化系数是否为当前CG的最后一个第一量化系数。
在本步骤中,判断当前的第一量化系数是否为按照第二扫描顺序扫描当前CG的最后一个第一量化系数。如果是,则执行步骤903,如果不是,则执行步骤907。
步骤903,判断在第一扫描顺序中当前的第一量化系数是否在第一个非零的第一量化系数之前。
在本步骤中,判断在第一扫描顺序中当前的第一量化系数是否在第一个非零的第一量化系数之前,如果是,则执行步骤902,如果不是,则执行步骤904。即,在第一扫描顺序中当前的第一量化系数位于在第一个非零的第一量化系数之后时,执行步骤904。
步骤904,计算将当前的第一量化系数强制置零的编码代价。
在本步骤中,针对每个第一量化系数子矩阵,计算将当前的第一量化系数强制置零的编码代价,得到第三编码代价,并获取所有第三编码代价的和值,得到第五编码代价;第五编码代价为第一量化系数子矩阵归零的编码代价。
步骤905,微调非零的第一量化系数并计算编码代价。
在本步骤中,针对每个第一量化系数子矩阵,微调非零的第一量化系数并计算编码代价,得到第二量化系数与第四编码代价,并获取所有第四编码代价的和值,得到第六编码代价;第六编码代价为第一量化系数子矩阵进行系数微调的编码代价。
步骤906,更新Golomb-Rice码的参数。
在本步骤中,Golomb-Rice码的参数默认为0。如果当前的第一量化系数是第一量化系数子矩阵中第一个绝对值为4的系数,Golomb-Rice码的参数更新为1;如果当前的第一量化系数是第一量化系数子矩阵中第一个绝对值为7的系数,Golomb-Rice码的参数更新为2;如果当前的第一量化系数是第一量化系数子矩阵中第一个绝对值为13的系数,Golomb-Rice码的参数更新为3;如果当前的第一量化系数是第一量化系数子矩阵中第一个绝对值为25的系数,Golomb-Rice码的参数更新为4。
步骤907,计算语法元素significance_cg_flag的上下文模型。
在本步骤中,根据当前的4x4系数块(第一量化系数子矩阵)顶部的两个相邻的4x4系数块和左边的两个相邻的4x4系数块(第一量化系数子矩阵)的第一语法元素的值计算significance_cg_flag的上下文模型。
步骤908,决定是否将当前CG强制置零。
在本步骤中,根据第五编码代价和第六编码代价,判断是否将当前CG强制置零。如果第五编码代价小于第六编码代价,将CG强制置零,如果不是,微调非零的第一量化系数,得到第二量化系数。
步骤909,输出CG'。
在本步骤中,CG'为对CG调整后得到的第二量化系数子矩阵。
本申请另一示例性实施例还提供一种率失真优化量化方法。本实施例提供上述步骤602的另一种实施方式。如图10所示,本实施例中,步骤602可以包括以下步骤:
步骤1001,输入QCoeff[cIdx][x'][y']。
在本步骤中,输入CG中的一个QCoeff[cIdx][x'][y']。
步骤1002,判断|QCoeff[cIdx][x'][y']|是否小于3。如果是,则执行步骤1003,如果不是,则执行步骤1004。
步骤1003,如果Cand0QCeff[cIdx][x'][y']=0,计算编码代价cost0。
其中,Cand0QCeff[cIdx][x'][y']为第一候选量化系数,编码代价cost0为上述的第一候选编码代价。
步骤1004,判断|QCoeff[cIdx][x'][y']|是否大于1。如果是,则执行步骤1005,如果不是,则执行步骤1006。
步骤1005,如果Cand1QCeff[cIdx][x'][y']=|QCoeff[cIdx][x'][y']|-1,计算编码代价cost1。
其中,Cand1QCeff[cIdx][x'][y']为第二候选量化系数。编码代价cost1为上述的第二候选编码代价。
步骤1006,判断|QCoeff[cIdx][x'][y']|是否大于0。如果是,则执行步骤1007,如果不是,则执行步骤1008。
步骤1007,如果Cand2QCeff[cIdx][x'][y']=QCoeff[cIdx][x'][y'],计算编码代价cost2。
其中,Cand2QCeff[cIdx][x'][y']为第三候选量化系数,编码代价cost2为第三候选编码代价。
步骤1008,从Cand0QCeff[cIdx][x'][y']、Cand1QCeff[cIdx][x'][y']与Cand2QCeff[cIdx][x'][y']中选取编码代价最小的作为第二量化系数。
在本步骤中,采用上述的式(50)从Cand0QCeff[cIdx][x'][y']、Cand1QCeff[cIdx][x'][y']与Cand2QCeff[cIdx][x'][y']中选取编码代价最小的作为第二量化系数。
步骤1009,输出第二量化系数。
图11是根据一示例性实施例示出的率失真优化量化装置的框图。该率失真优化量化装置,应用于编码器,该编码器适应HEVC标准与AV1标准中任意一个时,在率失真优化量化过程中,对于码率估计和失真估计,均采用通用的变化量化算法。如图11所示,本实施例中,该率失真优化量化装置,包括:
量化模块121,被配置为对变换系数矩阵进行量化,得到第一量化系数矩阵;其中,变换系数矩阵包括至少一个变换系数,第一量化系数矩阵包括至少一个第一量化系数;
分解模块122,被配置为将第一量化系数矩阵划分为至少两个不重叠的第一量化系数子矩阵;
统计模块123,被配置为对至少两个第一量化系数子矩阵进行数据统计,获取量化统计数据;量化统计数据用于消除至少两个第一量化系数子矩阵之间的依赖关系;
调整模块124,被配置为针对每个第一量化系数子矩阵,对非零的第一量化系数进行系数调整,得到第二量化系数子矩阵;第二量化系数子矩阵包括至少一个第二量化系数;至少两个第一量化系数子矩阵的系数调整并行执行;
获取模块125,被配置为根据第二量化系数子矩阵以及第一量化系数子矩阵与第一量化系数矩阵的关系,获取第二量化系数矩阵,第二量化系数矩阵包括至少一个第二量化系数。
本申请的实施例还提出了一种电子设备,包括处理器和存储器;存储器用于存储处理器可执行的计算机程序;处理器用于执行存储器中的计算机程序,以实现上述任一实施例的率失真优化量化方法。
本申请的实施例还提出了一种计算机可读存储介质,当存储介质中的可执行的计算机程序由处理器执行时,能够实现上述任一实施例的率失真优化量化方法。
关于上述实施例中的装置,其中处理器执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图12是根据一示例性实施例示出的一种电子设备的框图。例如,电子设备1200可以被提供为一服务器。参照图12,设备1200包括处理组件1222,其进一步包括一个或多个处理器,以及由存储器1232所代表的存储器资源,用于存储可由处理部件1222的执行的指令,例如应用程序。存储器1232中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件1222被配置为执行指令,以执行上述用于率失真优化量化方法。
设备1200还可以包括一个电源组件1226被配置为执行设备1200的电源管理,一个有线或无线网络接口1250被配置为将设备1200连接到网络,和一个输入输出(I/O)接口1258。设备1200可以操作基于存储在存储器1232的操作系统,例如Windows ServerTM,MacOS XTM,UnixTM,LinuxTM,FreeBSDTM或类似。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器1232,上述指令可由设备1200的处理组件1222执行以完成上述方法。例如,非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
在本发明中,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。术语“多个”指两个或两个以上,除非另有明确的限定。
上述对实施例的描述是为了便于本技术领域的普通技术人员能理解和应用本申请。熟悉本领域技术的人员显然可以容易地对这些实施例做出各种修改,并把在此说明的一般原理应用到其它实施例中而不必付出创造性的劳动。因此,本申请不限于这里的实施例,本领域技术人员根据本申请披露的内容,在不脱离本申请范围和精神的情况下做出的改进和修改都本申请的范围之内。

Claims (27)

1.一种率失真优化量化方法,其特征在于,应用于编码器,所述编码器适应HEVC标准与AV1标准中任意一个时,在率失真优化量化过程中,对于码率估计和失真估计,均采用通用的变化量化算法;所述方法,包括:
对变换系数矩阵进行量化,得到第一量化系数矩阵;其中,所述变换系数矩阵包括至少一个变换系数,所述第一量化系数矩阵包括至少一个第一量化系数;
将所述第一量化系数矩阵划分为至少两个不重叠的第一量化系数子矩阵;
对至少两个所述第一量化系数子矩阵进行数据统计,获取量化统计数据;所述量化统计数据用于消除至少两个所述第一量化系数子矩阵之间的依赖关系;
针对每个所述第一量化系数子矩阵,对非零的所述第一量化系数进行系数调整,得到第二量化系数子矩阵;所述第二量化系数子矩阵包括至少一个第二量化系数;至少两个所述第一量化系数子矩阵的系数调整并行执行;
根据所述第二量化系数子矩阵以及所述第一量化系数子矩阵与所述第一量化系数矩阵的关系,获取第二量化系数矩阵,所述第二量化系数矩阵包括至少一个所述第二量化系数。
2.如权利要求1所述的率失真优化量化方法,其特征在于,所述第一量化系数采用如下计算式计算得到:
QCoeff[cIdx][x][y]=sign[cIdx][x][y]×((|TCoeff[cIdx][x][y]|×quantizationScaler[cIdx][x][y]+(1<<(quantizationShift[cIdx][x][y]-1)))>>quantizationShift[cIdx][x][y]);
其中,QCoeff[cIdx][x][y]为所述第一量化系数,sign[cIdx][x][y]为所述变换系数的符号,TCoeff[cIdx][x][y]为所述变换系数,quantizationScaler[cIdx][x][y]为量化缩放参数,quantizationShift[cIdx][x][y]为量化偏移参数,cIdx为Y、U、V分量索引,x、y为所述变换系数在所述变换系数矩阵中的坐标。
3.如权利要求2所述的率失真优化量化方法,其特征在于,当所述编码器适应HEVC标准时,所述量化偏移参数采用如下计算式计算得到:
其中,QP1为所述编码器适应所述HEVC标准时的第一量化参数,transformShift为描述所述变换系数矩阵的内部变换移位的参数;和/或,
当所述编码器适应AV1标准时,所述量化偏移参数采用如下计算式计算得到:
numBitsDcQP为表示低频变换系数的量化索引dcQP所需的比特位数,tuSize为所述变换系数矩阵的大小,bitDepth为视频的比特位深度,numBitsAcQp为表示高频变换系数的量化索引acQP所需的比特位数。
4.如权利要求3所述的率失真优化量化方法,其特征在于,当所述编码器适应HEVC标准时,所述transformShift采用如下计算式计算得到:
transformShift=15-bitDepth-log2(tuSize);
其中,bitDepth为视频的比特位深度,tuSize为所述变换系数矩阵的大小。
5.如权利要求3所述的率失真优化量化方法,其特征在于,当所述编码器适应AV1标准时,所述dcQP采用如下计算式计算得到:
其中,av1DcQLookUp为第一表格,用于存储视频的比特位深度为8时所述第一量化参数与所述低频变换系数的量化索引的对应关系,所述av1DcQLoopUp10为第二表格,用于存储视频的比特位深度为10时所述第一量化参数与所述低频变换系数的量化索引的对应关系;
所述acQP采用如下计算式计算得到:
其中,av1AcQLookUp为第三表格,用于存储视频的比特位深度为8时所述第一量化参数与所述高频变换系数的量化索引的对应关系,所述av1AcQLoopUp10为第四表格,用于存储视频的比特位深度为10时所述第一量化参数与所述高频变换系数的量化索引的对应关系。
6.如权利要求3至5任一项所述的率失真优化量化方法,其特征在于,当所述编码器适应所述AV1标准时,在计算所述量化偏移参数之前,包括:
将所述编码器适应所述AV1标准时的第二量化参数转换为所述第一量化参数。
7.如权利要求6所述的率失真优化量化方法,其特征在于,当所述编码器适应AV1标准时,所述第一量化参数采用如下计算式计算得到:
其中,QP2为所述第二量化参数,av1ToHevcQp为第五表格,用于存储视频的比特位深度为8时所述第二量化参数与所述第一量化参数的对应关系,av1ToHevcQp10为第六表格,用于存储视频的比特位深度为10时所述第二量化参数与所述第一量化参数的对应关系。
8.如权利要求2所述的率失真优化量化方法,其特征在于,当所述编码器适应HEVC标准时,所述quantizationScaler[cIdx][x][y]采用如下计算式计算得到:
quantizationScaler[cIdx][x][y]=hevcScalingList[QP1%6];
其中,hevcScalingList为第七表格,用于存储所述编码器适应所述HEVC标准时QP1%6与所述量化缩放参数的对应关系,QP1为所述编码器适应所述HEVC标准时的第一量化参数;和/或,
当所述编码器适应AV1标准时,所述quantizationScaler[cIdx][x][y]采用如下计算式计算得到:
numBitsDcQP为表示低频变换系数的量化索引dcQP所需的比特位数,numBitsAcQp为表示高频变换系数的量化索引acQP所需的比特位数。
9.如权利要求1所述的率失真优化量化方法,其特征在于,对至少两个所述第一量化系数子矩阵进行数据统计,获取量化统计数据,包括:
对所述第一量化系数矩阵的所述第一量化系数子矩阵,按照指定的第一扫描顺序对至少两个所述第一量化系数子矩阵分别进行扫描;
针对每个所述第一量化系数子矩阵,按照指定的第二扫描顺序对所述第一量化系数进行扫描,获取所述量化统计数据;所述第一扫描顺序与所述第二扫描顺序相同。
10.如权利要求9所述的率失真优化量化方法,其特征在于,所述量化统计数据包括:所述第一量化系数子矩阵中绝对值为1的第一量化系数的数量、所述第一量化系数子矩阵中绝对值大于1的第一量化系数的数量、所述第一量化系数子矩阵中绝对值大于2的第一量化系数的数量、所述第一量化系数矩阵中按照所述第一扫描顺序排列的第一个非零的第一量化系数的位置、所述第一量化系数子矩阵中按照所述第二扫描顺序排列的第一个绝对值为4的第一量化系数的位置、所述第一量化系数子矩阵中按照所述第二扫描顺序排列的第一个绝对值为7的第一量化系数的位置、所述第一量化系数子矩阵中按照所述第二扫描顺序排列的第一个绝对值为13的第一量化系数的位置以及所述第一量化系数子矩阵中按照所述第二扫描顺序排列的第一个绝对值为25的第一量化系数的位置。
11.如权利要求1所述的率失真优化量化方法,其特征在于,所述针对每个所述第一量化系数子矩阵,对非零的所述第一量化系数进行系数调整,得到第二量化系数子矩阵,包括:
针对每个非零的所述第一量化系数,计算按照至少两个系数调整方案进行系数调整的第一编码代价;
针对每个系数调整方案,根据所有所述第一编码代价的和值,获得第二编码代价;所述第二编码代价为所述第一量化系数子矩阵进行系数调整的编码代价;
从至少两个系数调整方案中确定目标系数调整方案,其中,所述目标系数调整方案的第二编码代价为至少两个系数调整方案的第二编码代价中最小的编码代价;
根据目标系数调整方案对所述第一量化系数子矩阵中的非零的所述第一量化系数进行系数调整,得到所述第二量化系数子矩阵。
12.如权利要求11所述的率失真优化量化方法,其特征在于,所述第一编码代价采用如下计算式计算得到:
cost1[cIdx][x′][y′]=distortion[cIdx][x′][y′]+rate[cIdx][x′][y′];
其中,cost1[cIdx][x'][y']为所述第一编码代价,distortion[cIdx][x'][y']为像素域的误差,rate[cIdx][x'][y']为编码码率,cIdx为Y、U、V分量索引,x'、y'为所述第一量化系数在所述第一量化系数子矩阵中的坐标。
13.如权利要求12所述的率失真优化量化方法,其特征在于,所述像素域的误差采用如下计算式计算得到:
distortion[cIdx][x′][y′]=(mErr[cIdx][x′][y′]>>(2×transformShift+1))×mErr[cIdx][x′][y′];
其中,mErr[cIdx][x'][y']为量化误差的反向还原值,transformShift为描述所述变换系数矩阵的内部变换移位的参数。
14.如权利要求13所述的率失真优化量化方法,其特征在于,当所述编码器适应HEVC标准且视频的比特位深度为8时,所述量化误差的反向还原值采用如下计算式计算得到:
mErr[cIdx][x′][y′]=(err[cIdx][x′][y′]>>12)×hevcScaler[QP1%6];
其中,err[cIdx][x'][y']为量化误差,hevcScaler为第八表格,用于存储QP1%6与放大系数的对应关系,QP1为所述编码器适应所述HEVC标准时的第一量化参数;和/或,
当所述编码器适应AV1标准且视频的比特位深度为8时,所述量化误差的反向还原值采用如下计算式计算得到:
其中,err[cIdx][x'][y']为量化误差,numBitsDcQP为表示低频变换系数的量化索引dcQP所需的比特位数,numBitsAcQp为表示高频变换系数的量化索引acQP所需的比特位数。
15.如权利要求13所述的率失真优化量化方法,其特征在于,视频的比特位深度为10时的量化误差的反向还原值采用如下方法得到:
获取视频的比特位深度为8时的量化误差的反向还原值;
将视频的比特位深度为8时的量化误差的反向还原值右移两位,得到视频的比特位深度为10时的量化误差的反向还原值。
16.如权利要求13至14任一项所述的率失真优化量化方法,其特征在于,所述量化误差采用如下计算式计算得到:
err[cIdx][x′][y′]=||TCoeff[cIdx][x′][y′]|×quantizationScaler[cIdx][x′][y′]-(|QCoeff[cIdx][x′][y′]|<<quantizationShift[cIdx][x′][y′])|;
其中,TCoeff[cIdx][x'][y']为所述变换系数,quantizationScaler[cIdx][x'][y']为量化缩放参数,QCoeff[cIdx][x'][y']为所述第一量化系数,quantizationShift[cIdx][x'][y']为量化偏移参数。
17.如权利要求12所述的率失真优化量化方法,其特征在于,所述编码码率采用如下计算式计算得到:
rate[cIdx][x′][y′]=sigCoeffFlagRate[cIdx][x′][y′]+coeffAbsLevelRate[cIdx][x′][y′];
其中,sigCoeffFlagRate[cIdx][x'][y']为第二语法元素的第一码率估计,所述第二语法元素为sigCoeffFlag,用于指出当前的所述第一量化系数是否为零,coeffAbsLevelRate[cIdx][x'][y']为对非零的第一量化系数的绝对值进行编码的语法元素的第二码率估计。
18.如权利要求17所述的率失真优化量化方法,其特征在于,当所述编码器适应HEVC时,所述第一码率估计采用如下计算式计算得到:
其中,rateEstTab为第九表格,所述第九表格用于存储QP1%3、语法元素的条件概率状态与码率估计的对应关系,QP1为所述编码器适应所述HEVC标准时的第一量化参数,sigCoeffFlagTabIdx为第二语法元素的当前条件概率状态,bitDepth为视频的比特位深度;和/或,
当所述编码器适应AV1标准时,sigCoeffFlagRate[cIdx][x'][y']采用如下计算式计算得到:
其中,rateEstTab为第九表格,所述第九表格用于存储QP1%3、语法元素的条件概率状态与码率估计的对应关系,QP1为所述编码器适应所述HEVC标准时的第一量化参数,由所述编码器适应所述AV1标准时的第二量化参数转换得到,sigCoeffFlagTabIdx为第二语法元素的当前条件概率状态。
19.如权利要求18所述的率失真优化量化方法,其特征在于,sigCoeffFlagTabIdx采用如下计算式计算得到:
其中,sigCoeffCtx为第二上下文模型,用于存储所述第二语法元素的条件概率状态,sigCoeffCtxIdx由当前的所述第一量化系数子矩阵顶部的两个相邻的所述第一量化系数子矩阵和左边的两个相邻的所述第一量化系数子矩阵的第一语法元素的值综合决定;QCoeff[cIdx][x’][y’]为所述第一量化系数。
20.如权利要求17所述的率失真优化量化方法,其特征在于,所述第二码率估计采用如下计算式计算得到:
coeffAbsLevelRate[cIdx][x′][y′]=absCoeffGreaterThanOneFlagRate[cIdx][x′][y′]+absCoeffGreaterThanTwoFlagRate[cIdx][x′][y′]+absCoeffMinusTwoRate[cIdx][x′][y′];
其中,absCoeffGreaterThanOneFlagRate[cIdx][x'][y']为第三语法元素的第三码率估计,所述第三语法元素为absCoeffGreaterThanOneFlag,用于指出当前的第一量化系数的绝对值是否大于1,absCoeffGreaterThanTwoFlagRate[cIdx][x'][y']为第五语法元素的第四码率估计,所述第五语法元素为absCoeffGreaterThanTwo,用于指出当前的第一量化系数的绝对值是否大于2,absCoeffMinusTwoRate[cIdx][x'][y']为第六语法元素的第五码率估计,所述第六语法元素为absCeoffMinusTwo,用于表示当前的第一量化系数的绝对值减2。
21.如权利要求20所述的率失真优化量化方法,其特征在于,当|QCoeff[cIdx][x'][y']|<1时,所述第三码率估计等于0;QCoeff[cIdx][x'][y']为所述第一量化系数;
当|QCoeff[cIdx][x'][y']|≥1且所述编码器适应HEVC标准时,所述第三码率估计采用如下计算式计算得到:
其中,rateEstTab为第九表格,所述第九表格用于存储QP1%3、语法元素的条件概率状态与码率估计的对应关系,QP1为所述编码器适应所述HEVC标准时的第一量化参数,greaterThanOneTabIdx为所述第三语法元素的当前条件概率状态,bitDepth为视频的比特位深度;和/或,
当|QCoeff[cIdx][x'][y']|≥1且所述编码器适应AV1标准时,所述第三码率估计采用如下计算式计算得到:
其中,rateEstTab为第九表格,所述第九表格用于存储QP1%3、语法元素的条件概率状态与码率估计的对应关系,QP1为所述编码器适应所述HEVC标准时的第一量化参数,由所述编码器适应所述AV1标准时的第二量化参数转换得到,greaterThanOneTabIdx为所述第三语法元素的当前条件概率状态。
22.如权利要求20所述的率失真优化量化方法,其特征在于,当|QCoeff[cIdx][x'][y']|<2时,所述第四码率估计等于0;QCoeff[cIdx][x'][y']为所述第一量化系数;
当|QCoeff[cIdx][x'][y']|≥2且所述编码器适应HEVC标准时,所述第四码率估计采用如下计算式计算得到:
其中,rateEstTab为第九表格,所述第九表格用于存储QP1%3、语法元素的条件概率状态与码率估计的对应关系,QP1为所述编码器适应所述HEVC标准时的第一量化参数,greaterThanTwoTabIdx为所述第五语法元素的当前条件概率状态,bitDepth为视频的比特位深度;和/或,
当|QCoeff[cIdx][x'][y']|≥2且所述编码器适应AV1标准时,所述第四码率估计采用如下计算式计算得到:
其中,rateEstTab为第九表格,所述第九表格用于存储QP1%3、语法元素的条件概率状态与码率估计的对应关系,QP1为所述编码器适应所述HEVC标准时的第一量化参数,由所述编码器适应所述AV1标准时的第二量化参数转换得到,greaterThanTwoTabIdx为所述第五语法元素的当前条件概率状态。
23.如权利要求20所述的率失真优化量化方法,其特征在于,当|QCoeff[cIdx][x'][y']|<3时,所述第五码率估计等于0;QCoeff[cIdx][x'][y']为所述第一量化系数;
当|QCoeff[cIdx][x'][y']|≥3且所述编码器适应HEVC标准时,所述第五码率估计采用如下计算式计算得到:
absCoeffMinusTwoRate[cIdx][x′][y′]=(GolombCodeLength×eqProbRateEstTab[QP1-6*(bitDepth-8)]);
其中,GolombCodeLength为采用Golomb-Rice码编码第六语法元素所需的码长,eqProbRateEstTab为第十表格,用于存储在第六语法元素的条件概率均匀分布的情况下,索引值与码率估计的对应关系,所述索引值根据第一量化参数与比特位深度确定,所述第一量化参数为所述编码器适应所述HEVC标准时的量化参数,bitDepth为视频的比特位深度;和/或,
当|QCoeff[cIdx][x'][y']|≥3且所述编码器适应AV1标准时,所述第五码率估计采用如下计算式计算得到:
absCoeffMinusTwoRate[cIdx][x′][y′]=GolombCodeLength×(eqProbRateEstTab[QP1]-(eqProbRateEstTab[QP1]>>2));
其中,GolombCodeLength为采用Golomb-Rice码编码第六语法元素所需的码长,eqProbRateEstTab为第十表格,用于存储在第六语法元素的条件概率均匀分布的情况下,第一量化参数与码率估计的对应关系,所述第一量化参数由第二量化参数转换而来,所述第一量化参数为所述编码器适应所述HEVC标准时的量化参数,所述第二量化参数为所述编码器适应所述AV1标准时的量化参数。
24.如权利要求10所述的率失真优化量化方法,其特征在于,所述针对每个所述第一量化系数子矩阵,对非零的所述第一量化系数进行系数调整,得到第二量化系数子矩阵,包括:
针对每个非零的所述第一量化系数,如果所述第一量化系数在所述第一扫描顺序中位于所述第一个非零的第一量化系数之后,计算将所述第一量化系数归零的第三编码代价;
对所述第一量化系数进行微调,得到对应的所述第二量化系数,并计算微调所述第一量化系数的第四编码代价;
获取所有所述第三编码代价的和值,得到第五编码代价;所述第五编码代价为所述第一量化系数子矩阵归零的编码代价;
获取所有所述第四编码代价的和值,得到第六编码代价;所述第六编码代价为所述第一量化系数子矩阵进行系数微调的编码代价;
如果所述第五编码代价小于所述第六编码代价,将所述第一量化系数子矩阵置零,得到所述第二量化系数子矩阵;
如果所述第六编码代价小于所述第五编码代价,根据所述第二量化系数得到所述第二量化系数子矩阵。
25.一种率失真优化量化装置,其特征在于,应用于编码器,所述编码器适应HEVC标准与AV1标准中任意一个时,在率失真优化量化过程中,对于码率估计和失真估计,均采用通用的变换量化算法;所述装置,包括:
量化模块,被配置为对变换系数矩阵进行量化,得到第一量化系数矩阵;其中,所述变换系数矩阵包括至少一个变换系数,所述第一量化系数矩阵包括至少一个第一量化系数;
分解模块,被配置为将所述第一量化系数矩阵划分为至少两个不重叠的第一量化系数子矩阵;
统计模块,被配置为对至少两个所述第一量化系数子矩阵进行数据统计,获取量化统计数据;所述量化统计数据用于消除至少两个所述第一量化系数子矩阵之间的依赖关系;
调整模块,被配置为针对每个所述第一量化系数子矩阵,对非零的所述第一量化系数进行系数调整,得到第二量化系数子矩阵;所述第二量化系数子矩阵包括至少一个第二量化系数;至少两个所述第一量化系数子矩阵的系数调整并行执行;
获取模块,被配置为根据所述第二量化系数子矩阵以及所述第一量化系数子矩阵与所述第一量化系数矩阵的关系,获取第二量化系数矩阵,所述第二量化系数矩阵包括至少一个所述第二量化系数。
26.一种电子设备,其特征在于,包括存储器与处理器,所述存储器用于存储所述处理器可执行的计算机程序;所述处理器用于执行所述存储器中的计算机程序,以实现如权利要求1~24任一项所述的方法。
27.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,当所述存储介质中的可执行的计算机程序由处理器执行时,能够实现如权利要求1~24任一项所述的方法。
CN202310974524.XA 2023-08-03 2023-08-03 率失真优化量化方法、装置、电子设备及存储介质 Active CN116886913B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310974524.XA CN116886913B (zh) 2023-08-03 2023-08-03 率失真优化量化方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310974524.XA CN116886913B (zh) 2023-08-03 2023-08-03 率失真优化量化方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN116886913A CN116886913A (zh) 2023-10-13
CN116886913B true CN116886913B (zh) 2024-03-08

Family

ID=88264463

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310974524.XA Active CN116886913B (zh) 2023-08-03 2023-08-03 率失真优化量化方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN116886913B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118381936B (zh) * 2024-06-25 2024-09-03 腾讯科技(深圳)有限公司 一种视频数据处理方法、装置、设备及存储介质

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004064104A (ja) * 2002-07-24 2004-02-26 Mega Chips Corp 圧縮符号化装置、圧縮符号化方法およびプログラム
WO2011113346A1 (en) * 2010-03-15 2011-09-22 Mediatek Singapore Pte. Ltd. Methods of utilizing tables adaptively updated for coding/decoding and related processing circuits thereof
JP2011223068A (ja) * 2010-04-02 2011-11-04 Nippon Hoso Kyokai <Nhk> 符号化装置、復号装置及びプログラム
CN102547293A (zh) * 2012-02-16 2012-07-04 西南交通大学 人脸区域时域依赖性与全局率失真优化相结合的会话视频编码方法
JP2015043524A (ja) * 2013-08-26 2015-03-05 学校法人早稲田大学 レート歪コスト推定装置及びプログラム
CN105812824A (zh) * 2014-12-30 2016-07-27 浙江大华技术股份有限公司 一种视频图像编码方法及装置
CN106034238A (zh) * 2015-03-11 2016-10-19 杭州海康威视数字技术股份有限公司 计算编码失真度和编码模式控制的方法及其系统
CN113573056A (zh) * 2021-05-25 2021-10-29 杭州博雅鸿图视频技术有限公司 一种率失真优化量化的方法、装置、存储介质及终端
WO2022178686A1 (zh) * 2021-02-23 2022-09-01 Oppo广东移动通信有限公司 编解码方法、编解码设备、编解码系统以及计算机可读存储介质
CN115334306A (zh) * 2022-08-12 2022-11-11 有半岛(北京)信息科技有限公司 一种率失真优化量化方法、装置、设备及存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8031768B2 (en) * 2004-12-15 2011-10-04 Maxim Integrated Products, Inc. System and method for performing optimized quantization via quantization re-scaling
US9781449B2 (en) * 2011-10-06 2017-10-03 Synopsys, Inc. Rate distortion optimization in image and video encoding

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004064104A (ja) * 2002-07-24 2004-02-26 Mega Chips Corp 圧縮符号化装置、圧縮符号化方法およびプログラム
WO2011113346A1 (en) * 2010-03-15 2011-09-22 Mediatek Singapore Pte. Ltd. Methods of utilizing tables adaptively updated for coding/decoding and related processing circuits thereof
JP2011223068A (ja) * 2010-04-02 2011-11-04 Nippon Hoso Kyokai <Nhk> 符号化装置、復号装置及びプログラム
CN102547293A (zh) * 2012-02-16 2012-07-04 西南交通大学 人脸区域时域依赖性与全局率失真优化相结合的会话视频编码方法
JP2015043524A (ja) * 2013-08-26 2015-03-05 学校法人早稲田大学 レート歪コスト推定装置及びプログラム
CN105812824A (zh) * 2014-12-30 2016-07-27 浙江大华技术股份有限公司 一种视频图像编码方法及装置
CN106034238A (zh) * 2015-03-11 2016-10-19 杭州海康威视数字技术股份有限公司 计算编码失真度和编码模式控制的方法及其系统
WO2022178686A1 (zh) * 2021-02-23 2022-09-01 Oppo广东移动通信有限公司 编解码方法、编解码设备、编解码系统以及计算机可读存储介质
CN113573056A (zh) * 2021-05-25 2021-10-29 杭州博雅鸿图视频技术有限公司 一种率失真优化量化的方法、装置、存储介质及终端
CN115334306A (zh) * 2022-08-12 2022-11-11 有半岛(北京)信息科技有限公司 一种率失真优化量化方法、装置、设备及存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
AHG15: 16x16 base scaling matrix for 64x64 TU;Tadamasa Toma etal;Joint Video Exploration Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11;20191011;全文 *

Also Published As

Publication number Publication date
CN116886913A (zh) 2023-10-13

Similar Documents

Publication Publication Date Title
RU2543519C2 (ru) Способ и устройство для кодирования и декодирования изображения с использованием крупной единицы преобразования
RU2479942C2 (ru) Устройство обработки изображения и способ обработки изображения
JP5566529B2 (ja) 辞書を用いてビデオをコード化する方法
CN103024383B (zh) 一种基于hevc框架的帧内无损压缩编码方法
KR101074870B1 (ko) 부호량 추정 방법, 장치, 그 프로그램 및 기록매체
KR101506372B1 (ko) 변환 영역 필터들을 인코딩 및 디코딩하기 위한 방법들 및 장치들
US8780972B2 (en) Methods and devices for data compression using offset-based adaptive reconstruction levels
KR101549823B1 (ko) 적응적 이진화를 이용한 영상 부호화, 복호화 방법 및 장치
US11483562B2 (en) Method and apparatus for video encoding and decoding based on context switching
KR20080110170A (ko) 영상 데이터의 엔트로피 부호화, 복호화 방법 및 장치
CN116886913B (zh) 率失真优化量化方法、装置、电子设备及存储介质
JP6476900B2 (ja) 動画像符号化装置、動画像符号化方法及び動画像符号化用コンピュータプログラム
JPWO2009157581A1 (ja) 画像処理装置及び画像処理方法
US20080144721A1 (en) Video coding apparatus
JP5423469B2 (ja) 量子化装置、プログラム及び方法、並びに、動画像符号化装置
US11245924B2 (en) Methods and devices for coding and decoding a data stream representative of at least one image
JP2015043524A (ja) レート歪コスト推定装置及びプログラム
CN117135354A (zh) 率失真优化量化方法、装置、电子设备及存储介质
Puri et al. Improved coefficient coding for adaptive transforms in HEVC
Liu et al. CABAC based bit estimation for fast H. 264 RD optimization decision
Chowdary et al. Multiple transform selection in versatile video coding: a review
JPWO2012127706A1 (ja) 動画像符号化装置及び動画像符号化方法
KR101731431B1 (ko) 영상 데이터의 엔트로피 부호화, 복호화 방법 및 장치
KR101573340B1 (ko) 영상 데이터의 엔트로피 부호화, 복호화 방법 및 장치
KR101573684B1 (ko) 영상 데이터의 엔트로피 부호화, 복호화 방법 및 장치

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant