×

二维DCT编码的DSP设计实现

消耗积分:1 | 格式:rar | 大小:0.3 MB | 2017-11-03

分享资料个

 现今的图像编码标准,一般采用纹理编码方式对图像进行压缩。这种方式极大的利用了图像数据的空间相关性,使图像数据的压缩能够达到很高的比率。它主要是利用数学变换的方法,使用极少量的离散信号来表示大量的时域连续信号[1]。常用的数学变换有很多种,比如离散傅立叶变换DFT、沃尔什变换、哈尔变换、斜变换、离散余弦变换DCT、离散正弦变换DST 、K-L变换等。其中,K-L变换为理想状态下的最佳变换方法,但是,由于K-L变换没有快速的变换算法,而DCT、DFT和DST都具有与K-L变换近似的良好性质,尤其是当一阶马尔可夫过程相邻元素相关系数ρ逼近1时,DCT的近似性能远远优于其它两者,并且DCT变换有具体的快速算法。因此,图像压缩标准中,使用DCT变换来实现纹理编码。
  由于DCT变换在各种编码标准中要被反复调用,因此,其代码执行效率对实时视频压缩起着至关重要的作用。实际应用中,如何实现DCT变换的编码及如何用硬件电路实现这种编码变换是使用者关心的问题[。本文将利用DSP实现图像的二维DCT变换并对其实行优化。
  2 DCT 变换
  1974年Ahmed和Rao首先给出二维DCT 变换的数学表达式。该表达式适用于N点的DCT定义,但是,由于MPEG编码一般是把视频图像帧或图片分为场、片、宏块的结构,一帧图像一般包括1-2场,每场包括若干片,每片包括若干宏块,为了方便处理,把每个宏快分成8×8的子块,即DCT处理的基本单元是8×8的子块。因此,直接定义实用8点二维DCT变换:
  其反变换为:
  其中 ,i,j,u,v=0,1…7.
  在(1)式中,把变换核分离可得两次一维DCT变换:
  二维DCT编码的DSP设计实现
  因此,可以使用2次一维DCT变换来实现二维DCT变换。
  在该定义被提出以后,很多优秀的算法也被提了出来。如Chen,Lee的快速DCT算法等,Loeffler 在1989年提出的实用快速DCT算法共使用11次乘法和29次加法,该算法比起Chen的算法快而且不会发生Lee算法中的上溢问题,并且该算法被证明已经达到了算法极限,是最优秀的算法[4]。该算法如图1,它把整个DCT过程分成了四级,第一级只有8次加法,第二级分为上下两块,上面是偶块,下面是奇块,偶块有4次加法,奇块有6次乘法和6次加法,第三级上面有5次加法3次乘法,下面有4次加法,第四级仅奇块有2次乘法和2次加法。由图1可见,奇数部分的第四级与第二级的计算构成了连续的乘法,这种运算实现的时间将增加实际的计算时间。故Loeffler 提出了无乘法串行的并行计算方法,该方法使用了12次乘法和32次加法,这在具有并行的MAC处理器的运算中,并不增加实际的计算时间[1]。本文即采用这种DCT算法实现图像的压缩与处理。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !