版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、HEVC变换部分总结1、介绍DCT1.1、DCT矩阵的推导4*4 DCT变换公式: , 将上式分解进行先列变换: 再行变换: 将矩阵A中的系数乘以(根据公式:,此时m=2),再 根据变换矩阵设计原则取近似数,就得到变换系数矩阵。尺寸为8*8、16*16、32*32的变换系数矩阵类似。 1.2 、DCT矩阵的性质一维DCT变换的系数公式: (1)基向量为标准正交基,变换矩阵为正交矩阵。即: for , for (2)DCT矩阵系数之间存在三角函数关系。(3)尺寸为的DCT矩阵中包含了尺寸为的DCT矩阵。(4)尺寸为的DCT矩阵可用个元素表示。比如:4*4可用64、83、36表示,8*8可用64、
2、89、83、75、50、36、18表示。除了64*64系数矩阵,其余尺寸都可用第一列元素表示(第一列元素中64出现两次)。(5)偶数行是中心对称的,奇数行是中心反对称的。1.3、DCT矩阵的设计 设计固定的DCT矩阵是为了防止不同的生产商制作的编码器和译码器不同而产生误差。因为1.2小节提到的第4,5,6条DCT矩阵性质在实现算法的过程中可以减少大量计算量,所以必须严格保持,其他性质尽可能达到。同时,也要考虑到运算中矩阵系数的比特深度带来的运算消耗。总结DCT矩阵设计的原则:(1)尽可能的让基向量为标准正交基。(2)DCT矩阵保持对称性和反对称性。(3)小尺寸的DCT矩阵嵌套在大尺寸的DCT矩
3、阵中。(4)8bit表示变换矩阵系数。(5)变换后移位前不超过32bit,移位后不超过16bit。(实验表明,如果用18bit或者20bit表示只会减少0.5%的BD-rate)(6)尺寸为的DCT矩阵可用个元素表示。1.4、DCT的作用DCT 将原始图像信息块转换成代表不同频率分量的系数集,这有两个优点:其一,信号常将其能量的大部分集中于频率域的一个小范围内,这样一来,描述不重要的分量 只需要很少的比特数;其二,频率域分解映射了人类视觉系统的处理过程,并允许后继的量化过程满足其灵敏度的要求。DCT 后的DCT 频率系数个数与 DCT 前的像素块个数相对应,说明这个过程只是一个没有压缩作用的无
4、损变换过程。单独一个图像的全部 DCT 系数块的频谱几乎都集中在最左上角的系数块中。DCT 输出的频率系数矩阵最左上角的直流 (DC)系数幅度最大;以 DC 系数为出发点向下、向右的其它 DCT 系数,离 DC 分量越远,频率越高,幅度值越小,即图像信息的大部分集中于直流系数及其附近的低频频谱上,离 DC 系数越来越远的高频频谱几乎不含图像信息,甚至于只含杂波。DCT 本身虽然没有压缩作用,却为以后压缩时的"取"、"舍" 奠定了必不可少的基础。2、DCT的实现2.1、使用中间变量存储运算结果从32*32的DCT矩阵中抽出4*4的矩阵进行一维列反变换 直接
5、计算 (1)使用中间变量 (2) (3)ADD/SUB (4)代码如下: O0 = g_aiT410*srcline + g_aiT430*src3*line; O1 = g_aiT411*srcline + g_aiT431*src3*line; E0 = g_aiT400*src0 + g_aiT420*src2*line;E1 = g_aiT401*src0 + g_aiT421*src2*line;dst0 = Clip3( -32768, 32767, (E0 + O0 + add)>>shift );dst1 = Clip3( -32768, 32767, (E1 +
6、O1 + add)>>shift );dst2 = Clip3( -32768, 32767, (E1 - O1 + add)>>shift );dst3 = Clip3( -32768, 32767, (E0 - O0 + add)>>shift );前四行代码对应(2)(3)两式,即使用中间变量O0、O1、E0、E1。后四行代码对应(4)式。一维4*4反变换按照(1)式直接进行矩阵相乘,需要16次乘法和12次加法。如果是进行二维反变换,需要128次乘法和96次加法。按照(2)式的方法使用中间变量存储运算结果,一维反变换需要6次乘法和8次加法,二维反变换需
7、要48次乘法和64次加法。2.2、大尺寸DCT矩阵运算使用小尺寸矩阵运算方法Even part (5) (6)ADD/SUB (7) 对比(3)式和(1),会发现,8*8DCT反变换的偶数部分运算其实就是4*4DCT反变换。有了这个发现,再用上一小节的方法可以进一步减少运算量。8*8反变换代码如下:for (k=0;k<4;k+) Ok = g_aiT8 1k*srcline + g_aiT8 3k*src3*line + g_aiT8 5k*src5*line + g_aiT8 7k*src7*line; EO0 = g_aiT820*src 2*line + g_aiT860*src
8、 6*line ; EO1 = g_aiT821*src 2*line + g_aiT861*src 6*line ; EE0 = g_aiT800*src 0 + g_aiT840*src 4*line ; EE1 = g_aiT801*src 0 + g_aiT841*src 4*line ; E0 = EE0 + EO0; E3 = EE0 - EO0; E1 = EE1 + EO1; E2 = EE1 - EO1; for (k=0;k<4;k+) dst k = Clip3( -32768, 32767, (Ek + Ok + add)>>shift ); dst
9、k+4 = Clip3( -32768, 32767, (E3-k - O3-k + add)>>shift ); 第一个for循环里处理奇数行运算,对应(6)。接下来八行代码是处理偶数行运算,也就是做一个4*4DCT反变换。一维8*8反变换直接进行矩阵相乘,需要65次乘法和56次加法。如果是进行二维反变换,需要1024次乘法和896次加法。按照上述方法,一维反变换需要22次乘法和28次加法,二维反变换需要352次乘法和448次加法。当对16*16矩阵反变换时,它的偶数部分运算其实就是8*8DCT反变换,运算8*8DCT反变换时又可以用到4*4DCT反变换。32*32矩阵反变换是同
10、理。 32*32 IDCT 流程示意图8*8DCT快速算法蝶形图:3、DCT的精度控制变换计算代码: 3.1、移位精度(>>shift)移位的位数必须满足下面的约束:(1)每一次运算完的中间值必须是16bit深度。(2)因为变换矩阵系数都扩大了,在进行二维变换和二维反变换后,结果会扩大倍,所以在运算中所有移位之和为右移24+2M位。以4*4DCT为例。(1)假设出现最差情况,也就是将要作变换的残差矩阵的系数全为最大幅度即 =255。为了运算方便,把最大幅度设为。即:(2)一维列变换后最大的输出值为,为使得这个值在16bit深度内,乘以,即右移位数为(B+M-9)位。即: 移位:(3
11、)一维行变换前系数矩阵只有第一行的数为,其余全为0。则行变换后最大的输出值为。为使得这个值在16bit深度内,乘以,即右移位数为(M+6)位。即:移位:(4)一维列反变换之前系数矩阵只有最左上角的数为,其余全为0。输出矩阵中最大的系数为。为使得这个值在16bit深度内,乘以,即右移位数为6位。即:移位:(5)一维行反变换之前系数矩阵只有第一列的数为,其余全为0。输出矩阵中最大的系数为。为使得这个值在B bit深度内,乘以,即右移位数为21-B位。即:移位:因为量化步骤可能导致在进行一维列反变换之前矩阵系数超过,所以一维列反变换多右移一位,调整为7位,一维行反变换少右移一位,调整为20-B位。3.2、补偿精度(+add)变换结果右移n位,必然会导致精度的丢失。add为。变换结果加上再右移n为,可以保证精度误差不超过。4、介绍DSTDST(Discrete Sine Transform):离散正弦变换。DST的变换公式原型:经过帧内预测后,预测残差仍然存在着一定的方向性。当预测方向是垂直方向的话,预测残差会沿着垂直方向有逐渐增大的趋势;同样当预测方向是水平方向的话,预测残差会沿着水平方向有逐渐增大的趋势。因为当前像素与参考像素之间的距离越远,它们之间的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论