整数DCT论文

2024-05-14

整数DCT论文(精选3篇)

整数DCT论文 篇1

1 引 言

新一代视频压缩编码标准在对图像进行压缩时与以往的视频编码标准相同,同样采用基于块的变换编码。H.264标准中使用4×4的整数DCT变换作为残差宏块的基本变换,这种变换的对象是经过运动补偿预测或者帧内预测后的包含残差数据的4×4块。这类变换是基于DCT变换,但又不同于DCT。由于DCT变换是实数,量化时需对系数进行四舍五入,从而影响了运算的精度。

同时,传统的DCT存在不匹配问题,产生参考帧的偏移,直接影响到重建图像的质量。H.264对图像或预测残差采用了4×4整数离散余弦变换技术,避免以往标准中使用的通用8×8离散余弦变换、逆变换经常出现的失配问题。同时采用整数DCT变换技术,可有效地减少计算量,同时不损失图像的准确度。

2 H.264整数DCT变换

一维N点离散余弦变换(DCT)可以表示为:

undefined

其中,xn是输入时域序列中的第n项;yk是输出频域序列中的第k项;系数undefined;undefined。

二维N×N图像块的DCT可以理解为先对图像块的每行进行一维DCT,然后对经行变换的块每列再应用一维DCT。可以表示为:

undefined

其中,Xij是图像块X中第i行第j列图像或其残差值;Ymn是变换结果矩阵Y相应频率点上的DCT系数。可以用矩阵表示:

undefined

其中,N×N变换矩阵A中的系数:

undefined

H.264对4×4的图像块(亮度块或Cr,Cb色度块)进行操作,则相应的4×4 DCT变换矩阵A为:

undefined

undefined

,则:

undefined

A中的a,b和c是实数,而图像块X中的元素是整数。对实数的DCT,由于在解码端的浮点运算精度问题,会造成解码后的数据的失配,进而引起漂移。H.264较其他图像编码使用了更多的预测过程,甚至内部编码模式也依赖于空间预测。因此,H.264对预测漂移是十分敏感的。为此,H.264对4×4 DCT中的A进行了改造,采用整数DCT技术,可有效地减少计算量,同时不损失图象的准确度。式(3)可以等效为:

undefined

其中,d=c/b,符号“⊗”表示(CXCT)结果中的每个元素乘以矩阵E中对应位置的系数值的运算。为简化运算,取d=0.5。同时为了保持变换的正交性,对b进行修正,取undefined。对矩阵C中的第2行和第4行,以及矩阵CT中的第2列和第4列元素乘以2,相应地改造矩阵E为Ef,以保持式(7)成立,得到:

undefined

其中,运算“⊗”对每个矩阵元素只进行1次乘法,同时它将被归纳到量化运算中。这样,(CfXCTf)中只剩下整数的加法、减法和移位(乘以2)运算。H.264将DCT中“⊗Ef”运算的乘法融合到后面的量化过程中,实际的DCT输出为:W=CfXCTf。将该矩阵的乘法改造成2次一维整数DCT变换,并且每次的一维整数DCT可以采用叠形快速算法,以节省计算时间,如图1所示。

3 H.264整数DCT变换的FPGA实现

图2为用FPGA实现H.264整数DCT变换的框图。以上的每个行变换单元仅处理1行数据,每个列变换单元仅处理1列数据;由于在从行变换到列变换中间经过1个矩阵转置过程所以在给列变换单元输入数据时,输入的数据需要重新组合后再送给每个列变换单元。

数据输入为经过运动补偿预测或者帧内预测后的包含残差数据的4×4块。共16个数据,按顺序送给每个行变换单元,每个数据用8位二进制表示,即表示输入块的相应像素点,每个像素点范围为0~255;由于在进行行变换以后的输入行单元的数据进行了8次加法(包括减法)和2次移位运算,所以经过数据组合后输入到列变换单元的数据范围发生了改变;所以为防止该输入数据溢出将它定义为16位,经列变换后即为一个残差数据的4×4块经过整数DCT变换的结果。其输出数据不会超过16位,故用16位定义不会溢出。因为行列变换各有4个变换单元所以处理1个残差数据的4×4块后需至少等待2个时钟周期,之后读取下一个4×4块。行变换单元VHDL描述如下:

library IEEE;

use IEEE.STD_LOGIC_1164.all;

use IEEE.STD_LOGIC_ARITH.all;

use IEEE.STD_LOGIC_SIGNED.all;

entity dct is

PORT(data0,data1,data2,data3:IN

STD_LOGIC_VECTOR(7 DOWNTO 0);

out0,out1,out2,out3:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));

end dct;

architecture comp of dct is

SIGNAL temp0,temp1:STD_LOGIC_

VECTOR(15 DOWNTO 0);

SIGNAL temp2,temp3:STD_LOGIC_

VECTOR(14 DOWNTO 0);

SIGNAL temp4,temp5,temp6:STD_LOGIC_

VECTOR(8 DOWNTO 0);

BEGIN

PROCESS(temp0,temp1,temp2,temp3,data0,data1,data2,data3,temp5,temp6,temp4)

BEGIN

temp4<=(data0(7)&data0)+(data3(7)&

data3)-(data1(7)&data1)-(data2(7)&data2);

out2<=(temp4(7)&temp4(7)&temp4(7)&

temp4(7)&temp4(7)&temp4(7)&

temp4(7)&temp4);

temp5<=(data1(7)&data1)-(data2(7)&

data2);

temp0<=(temp5(7)&temp5(7)&temp5(7)&temp5(7)&temp5(7)&temp5(7)&temp5(7)&temp5);

temp6<=(data0(7)&data0)-(data3(7)&

data3);

temp1<=(temp6(7)&temp6(7)&temp6(7)&temp6(7)&temp6(7)&temp6(7)&temp6(7)&temp6);

temp2<=temp0(14 DOWNTO 0);

temp3<=temp1(14 DOWNTO 0);

out1<=temp3&'0'+temp0;

out3<=temp1-(temp2&'0');

END PROCESS;

END comp;

仿真波形如图3所示,该仿真时输入数据为:1,-1,1,1。输出为:2,-2,2,4;经验证正确。列变换单元VHDL描述可参考行变换单元代码。一个4×4块的DCT变换的代码可以直接调用行、列变换单元模块来实现。该设计可快速实现H.264整数DCT变换。

4 结 语

为了实现H.264视频压缩的高压缩率,必须进行大量的计算,而整数DCT变换计算量大,用FPGA实现可大大加快其处理速度。以上实现可用并行计算能加速整数DCT变换的处理效率。

摘要:H.264整数DCT变换算法有助于减少计算复杂度,提高编码速度,进一步提高视频或图像的压缩效率。分析H.264整数DCT变换的快速算法及其实现原理,并提出一种用来具体实现一个4×4块的DCT变换的结构;同时给出用VHDL语言实现4×4块DCT变换的内部模块的源代码和仿真波形。仿真结果表明用该算法可快速实现一个4×4块的整数DCT变换。提出一种切实可行的用于H.264整数DCT变换的结构,该结构可完全用硬件电路快速实现;对于用FPGA实现H.264整数DCT变换做了一次实践性的尝试,对深入理解H.264整数DCT变换及其算法的具体实现具有一定的实践意义。

关键词:H.264,宏块,整数DCT,FPGA,VHDL

参考文献

[1]Wiegand T,Sullivan G J,Bjontegaard G,et al.Overview ofH.264/AVC Video Coding Standard[J].IEEE Trans.Cir-cuits Syst.Video Technol.,2003(13):560-576.

[2]Draft ITU-T Recommendation and Final Draft InternationalStandard of Joint Video Specification(ITU-T Rec.H.264/ISO/IEC14 496-10 AVC.in Joint Video Team(JVT)of ISO/IECMPEGand ITU-T VCEG,JVTG050,2003.

[3]Schafer Ralf,Wiegand Thomas,Schwarz Heiko.The Emer-ging H.264/AVC Standard EBU Technical Review.2003.

[4]Mathias Wien.Variable Block-Size Transforms for H.264/AVC[J].IEEE Trans.Circuit Syst.Video Technol.,2003,13:604-613.

[5]毕厚杰.多媒体信息的传输与处理[M].北京:人民邮电出版社,1999.

[6]朱秀昌.数字图像处理与图像通信[M].北京:北京邮电大学出版社,2002.

[7]陈传波,金先级.数字图像处理[M].北京:机械工业出版社,2004.

[8]毕厚杰.新一代视频压缩编码标准———H.264/AVC[M].北京:人民邮电出版社,2005.

[9]侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计[M].西安:西安电子科技大学出版社,1997.

[10]赵俊超.集成电路设计VHDL教程[M].北京:北京希望电子出版社,2002.

[11]李玉山.电子系统集成设计技术[M].北京:电子工业出版社,2002.

整数DCT论文 篇2

DCT即离散余弦变换, 是傅里叶变换的实数部分, 因其与傅里叶变换能达到相同功能, 数据量又不大而被广泛采用H.264是应用非常广泛的视频图像编码标准, 其频域图像预处理采用的是基于4×4图像块的整数DCT。本文研究了如何由4×4浮点DCT得到4×4整数DCT, 并设计了4×4整数DCT的蝶形算法, 比较了蝶形算法与普通算法的运算量。

1 4×4浮点DCT

二维N×N图像块的DCT可以理解为先对图像块的每行进行一维DCT, 然后对经行变换的块的每列再进行一维DCT。可以表示为:

式 (1) 中, Xij是图像块X中第i行第j列图像或其残差值, Ymn是变换结果矩阵Y相应频率点上的DCT系数。可以用矩阵表示:

其中, N×N变换矩阵A中的系数:

设相应的4×4浮点DCT变换矩阵A为:

由式 (3) 可得:

2 4×4整数DCT

对于实数的DCT, 由于解码端的浮点运算精度问题, 可能造成解码后数据的失配。为此, H.264采用整数DCT技术, 在不损失图像精度的情况下, 有效减少计算量。

A中的a、b和c是实数, 而图像块X中的元素是整数。为此, H.264对4×4DCT中的A进行了改造。式 (2) 可以等效为:

仍有:

式 (5) 中, 矩阵C是在矩阵A的第一行、第三行除以a, 然后在A的第二行、第四行除以b, 并且方便起见, 令。E是一个尺度因子, 也可以说是个比例缩放矩阵。E中元素的大小可以从A变成C的过程中得到。符号“”表示 (CXCT) 结果中的每个元素乘以矩阵E中对应位置上的系数的值。

为了简化计算, 取d=1/2, 相应地系数b、c也应该调整。由于当d=1/2时有:

根据变换的正交性, 应有的结果为单位矩阵, 所以可推出:

因此当d=1/2时, 同时有:

接下来将矩阵C中的第2行、第4行以及CT的第2列、第4列乘以2, 同时尺度因子矩阵E相应地缩小以给予补偿。最终得到的整数DCT正变换的公式:

在进行变换时, 只计算式 (10) 中的 (CfXCfT) , 因为H.264将“”的运算融合到后面的量化过程中, 从而降低了整个运算的乘法次数, 提高了运算速度。所以实际的4×4整数DCT为:

这样, 式 (11) 中只剩下整数的加法、减法和移位 (乘以2) 操作。

式 (11) 被称为4×4整数DCT变换, Cf是变换矩阵。整数DCT变换与传统的浮点DCT变换运算结果近似, 但因为b和d的值有所变化, 所以两者结果有差别。

3 4×4整数DCT的蝶形算法

可以将式 (11) 的二维变换改造成两个一维变换:先对需要做变换的块 (矩阵) 的每一列做一维变换, 再对其结果的每一行做一维变换。以第一步对输入矩阵X的每一列做一维整数变换为例, 输出矩阵Z的第一列如式 (12) 所示。

其中, x0, …, x3是输入矩阵X的第一列, 而z0, …, z3是输出矩阵Z的第一列。此次变换需要12次加法和4次左移。

从式 (12) 可以看出, 有很多计算重复, 例如 (x0-x3) 就同时被z1和z3使用。为了避免重复, 可以将每次一维整数变换采用蝶形快速算法以节省时间。4×4整数DCT的一维快速变换算法如图1所示。

从图1可以看出, 做一维快速变换需要做8次加法及2次左移, 利用了运算中的冗余, 降低了计算量。表1给出了4×4整数DCT普通算法和快速算法的计算量。

可以看出, 4×4整数DCT快速算法的计算量几乎只有普通算法的一半, 节省了计算空间, 大大提高了运算速度。

摘要:H.264是应用非常广泛的视频图像编码标准。其频域图像预处理采用的是基于4×4图像块的整数DCT。研究了如何由4×4浮点DCT得到4×4整数DCT, 并设计了4×4整数DCT的蝶形算法, 比较了蝶形算法与普通算法的运算量。

关键词:4×4浮点DCT,4×4整数DCT,蝶形算法

参考文献

[1]毕厚杰.新一代视频压缩编码标准——H.264/AVC[M].北京:人民邮电出版社, 2005.

[2]MALVAR H S.Low-complexity length-4transform and quanlization with l6-bit arithmetic.ITU-T SGI6Doc.VCEG-N44[R1].Santa Barbara, USA:[s.n.], 2001.

[3]张晓燕, 谢珺堂.H.264的整数DCT变换编码与量化过程[J].军民两用技术与产品, 2005 (5) :49-51.

[4]于娜, 沈庭芝.新一代视频压缩标准H.264中数据的变换和量化.现代电视技术[J].2005 (2) :15-17.

[5]李朝晖, 等.数字图像处理及应用[M].北京:机械工业出版社, 2007.

整数DCT论文 篇3

H.264[1,2]是由ITU-T的视频编码专家组(VCEG)和ISO/ISE的运动图像专家组(MPEG)共同制定的视频编码标准。同H.263或MPEG-4相比,在获得相同图像质量的情况下,H.264最多可以节约50%的码率[3],然而,H.264高效的编码效率是以高复杂性为代价的[4]。变换量化模块是H.264标准的重要模块之一,也是频繁调用、复杂耗时的模块之一,因此对于变换量化模块的研究[5,6]具有重要的意义。虽然H.264的编码复杂性比较大,但其底层的基本原理却十分简单,运算规则简单,使用的都是整数的加法、乘法和移位操作,因而十分适合用硬件来实现。而FPGA强大的并行运算能力和高速的运算速度非常适合这一要求,使其成为硬件实现H.264编码标准的理想平台。

1 整数DCT变换与量化的原理

1.1 整数DCT变换的原理

H.264视频编码标准中采用的是基于4×4块的变换编码,并且巧妙地将变换过程中的比例因子合并到量化过程中,使得变换过程只需要一些加法和移位运算就可以实现[6]。其核心变换如式(1)所示

式中:X为帧内或帧间预测后的4×4图像残差块,W为对应DCT变换后的4×4图像残差块,Cf为核心变换矩阵,如果将Cf中的2全部变成1,并保持符号不变,则为DC系数的Hadamard变换。H.264的整数DCT变换和Hadamard变换都是用2个矩阵的左右乘来实现的,如果直接用加乘法来实现矩阵的乘法操作,得到最终的结果需要经过大量计算,而采用蝶形变换[8],简化了计算的过程,只要用加法和移位的操作就可以实现矩阵的相乘,既可以节省计算的量,又可以减少硬件实现的成本。蝶形变换如图1所示。当r=1时,表示Hadamard变换的蝶形算法;当r=2时,表示DCT变换的蝶形算法。

1.2 量化的原理

H.264标准采用标量量化的原理[9],采用52个不同的量化步长,并将DCT变换中的尺度因子结合到量化过程中,具体的量化过程可以通过以下运算[10]来实现

式中:Zij表示量化后的残差系数,Wij表示DCT变换后的残差系数,MF为乘法因子,其值可根据Wij在矩阵中的不同位置和量化参数QP的不同查表得到,如表1所示,f是修正参数,对于帧内预测图像块f取2q/3,对于帧间预测图像块f取2q/6,“>>”为右移运算符,右移1次完成整数除以2的操作,q表示右移位数,sgn()为符号函数。

2 变换量化算法的硬件设计与实现

2.1 变换量化系统的硬件结构

H.264编码器中经过预测后的残差数据可以分为3类:普通4×4的残差块、帧内预测16×16模式亮度宏块的4×4 DC系数块以及色度宏块的2×2 DC系数块。对于普通的残差块,只需对其进行DCT变换、量化,然后至熵编码器,与此同时将量化后的残差进行反量化、反变换,以便得到重构残差数据作为下一帧图像的参考图像;对于帧内预测的16×16模式的亮度宏块,首先对16×16亮度宏块的16个4×4块进行DCT变换,然后将每个4×4块的DC系数提取出来组成4×4 DC块进行Hadamard变换,然后再量化,至熵编码器,重建路径的过程是将4×4 DC块进行反Hadamard变换反量化,并将其填入反量化后的4×4块的DC位置上,然后再进行反DCT变换;色度DC系数的变换量化过程同亮度。图2是变换量化系统的整体结构框图。

2.2 DCT算法的优化与实现

由于DCT算法只涉及到加法和移位操作,非常适合FPGA实现,而1次完整的DCT变换可以看作1次行变换和1次列变换,每次行变换或列变换对应于1次蝶形变换,即完成1次完整的DCT变换需要2次完整的蝶形变换。由图1可知,完成1次完整的蝶形变换需要进行2次计算,即需要2个时钟周期,而在设计中,可以通过代入法,把蝶形变换的中间变量a,b,c,d消除,从而减少1次变换,这样1次蝶形变换需要的时钟周期由2个变为1个,而1次完整的DCT变换需要的时钟周期由4个变成2个,从而实现了对DCT算法的优化。

2.3 量化模块的流水线设计与实现

由式(2)可知,量化的具体实现过程为:首先从缓存中读取DCT变换后的残差数据,对该残差数值进行取绝对值操作,根据残差在缓存中的地址及QP的值查找对应MF值,然后将残差的绝对值和MF相乘,接着将残差和MF的乘积加上偏移量f,进行移位操作,最后输出量化后的残差数据,这样处理1个残差的数据需要的时钟周期为6个,处理1个完整4×4块的残差数据需要96个时钟周期。由于设计中要根据读残差数据的地址确定MF值,本文提出了一种流水线的操作方法,即在查找完MF值后,接着读取下一个数据,而不是等全部处理完一个数据后再读取下一个数据,这样节省了2个时钟周期,处理完16个残差数据所需的时钟周期为65个,比之前减少了21个时钟周期,从而实现了对量化模块的优化。其时序图如图3所示,具体的量化实现框图如图4所示。

3 仿真验证与分析

本文以4×4残差块为例,通过Verilog编程语言实现H.264编码器的变换量化模块,使用Modelsim进行功能仿真,并在Xinlinx的Vertex2P系列的XC2VP30 FPGA上进行综合验证。对DCT算法进行了优化,并对量化模块采用流水线操作处理,使用ISE9.1对变换量化模块进行综合,综合后时钟最高频率可达到135.498 MHz,最长路径时间为7.380 ns。表2给出了本文设计的方法和没进行优化之前的对比,相比之下本文设计的方法处理速度更快,时钟频率更高。

图5给出了变换量化模块的功能仿真图,图中dct_in是经过DCT变换后输出并存储在缓存空间中的残差数据,quantise_out是经过量化后的输出结果,并且将其存储到缓存空间中,以备熵编码使用。本文给出的残差数据是5,11,8,10,9,8,4,12,1,10,11,4,19,6,15,7,经过DCT变换后的输出应为140,-1,-6,7,-19,-39,7,-92,22,17,8,31,-27,-32,-59,-21,经过量化后的输出应为17,0,-1,0,-1,-2,0,-5,3,1,1,2,-2,-1,-5,-1,由仿真图可以证明本文设计方法的正确性。

4 小结

本文充分利用了H.264的DCT算法和量化算法的整洁性以及FPGA强大的并行处理数据能力,首先对DCT的算法进行了优化处理,并对量化模块采用了一种流水线的操作方法,大大缩短了变换量化所需的时间,并且成功设计并实现了H.264变换量化模块的FPGA实现,相对于没有优化和流水线操作的设计方法,可以减少29个时钟周期,为H.264的硬件实现提供了参考,具有一定的应用价值和现实意义。

参考文献

[1]WIEGAND T,SULLIVAN G J,BJONTEGAARD G,et al.Overview oft he H.264/AVC video coding standard[J].IEEE Trans.Circuits andS ystems for Video Technology,2003,13(7):560-576.

[2]PURI A,CHEN Xuemin,LUTHRA A.Video coding using the H.264/M PEG-4AVC compression standard[EB/OL].[2010-08-31].http://w ww-ee.uta.edu/dip/courses/ee5351/h.264spic.pdf.

[3]宗怡.H.264视频压缩关键技术的研究与应用[D].太原:中北大学,2008.

[4]于小燕,赵不贿,郑博,等.基于FPGA的H.264帧内预测算法研究[J].电视技术,2010,34(5):40-43.

[5]KORAH R,PERINBAM J R P.FPGA implementation of integert ransform and quantizer for H.264encoder[J].Journal of SignalP rocessing Systems,2008,53(3):261-269.

[6]KORDASIEWICZ R,SHIRANI S.On hardware implementation of DCTa nd quantization blocks for H.264/AVC[J].Journal of VLSI SignalP rocessing,2007,47(3):189-199.

[7]毕厚杰.新一代视频压缩编码标准[M].北京:人民邮电出版社,2004:127-128.

[8]程丽.基于H.264/AVC中整数变换和量化的研究及VLSI设计[D].哈尔滨:哈尔滨工业大学,2006.

[9]刘峰.视频图像编码技术及国际标准[M].北京:北京邮电大学出版社,2005:55-57.

上一篇:滑坡地质灾害下一篇:胆道术后