多核处理器构架的高速JPEG解码算法
扫描二维码
随时随地手机看文章
作者:电子科技大学 章承科 摘 要:实现基于多核处理器构架的jpeg解码算法;通过将jpeg算法并行化,在多个处理器核上并行处理,并针对多核处理嚣构架进行内存读取等方面的优化,可极大地提高jpeg解码算法的解码速度。实测表明,在4核集成的多核处理器上,jpeg图像的平均解码周期为单核处理器上的28%左右。 jpeg(joint photographlc experts group)是一个适用范围很广的静态图像数据压缩标准,目前广泛应用于照相机、打印机等方面的图像处理。在这些应用中,设计出一个高速高效的jpeg***已经成为一个重要的研究方向。随着对嵌入式系统实时性、高性能和可扩展性要求的提高,多核(multi—core)嵌入式处理器的应用场合日益增多。 1 jpeg解码算法原理 jpeg压缩是一种有损压缩。它利用人的视角系统特性,使用量化和无损压缩编码相结合的方式去掉视角的冗余信息和数据本身的冗余信息来达到压缩的目的。jpeg算法可分为基本jpeg(baseline system)和扩展jpeg(extended system)。其中baseline system应用尤其广泛。本文主要讨论baseline system的解码。jpeg解码算法框图如图1所示。 (1)颜色空间变换 jpeg算法本身与颜色空间无关,因此“rgb到yuv变换”和“yuv到rgb变换”不包含在jpeg算法中。但由于作为输出的位图数据一般要求rgb的表示,所以将颜色空间变换也表示在算法框图中。 (2)jpeg的编解码单元 在jpeg中,对于图像的编解码是分块进行的。整个图像被划分为若干个8×8的数据块,称为最小编码单元(mcu),每一个块对应于原图像的一个8×8的像素阵列; 各行的编解码顺序是从上到下,行内的编解码顺序是从左到右。 值得注意的是,由于一幅图像的高和宽不一定是mcu尺寸的整数倍,因此需要对图像的最右边一列或其最下边一行进行填充,扩展其高或宽,使得可以将整个图像划分为整数个mcu;而在解码输出时,这些复制的行列是要被抛弃的。 (3)熵*** 在jpeg的熵编码时,首先利用空间相关性对各块的直流值采用差分编码,即对相邻块之间的直流差值编码,以达到压缩码长的目的。然后对于交流部分以zigzag方式扫描块中的元素,对块内元素采用先游程编码后哈夫曼编码的混合编码方式,得到一维二进制块码流。熵编码过程是由直流部分的差分编码和交流部分的zigzag扫描、游程编码、哈夫曼编码组成。而相应的熵解码过程是编码的逆过程,在解码端接收到的是由变长码(vlc)和变长整数(vli)组成的数据流。为了从此数据流中恢复编码前的dct系数,必须根据哈夫曼编码的原理及其各级码表生成的细节,生成哈夫曼解码表,再根据解码算法来恢复dct的直流和交流系数。 (4)反量化 在jpeg解码端要利用发送过来的量化表对量化值进行译码。jpeg文件里一般含有两个量化表:一个亮度分量的量化表,一个色度分量的量化表。反量化就是对熵解码出来的系数矩阵乘上相应的量化矩阵: 其中,c(u,v)代表熵解码输出,q(u,v)代表相应的量化矩阵。 (5)idct。变换 jpeg解码算法能否满足实时应用,关键在于8×8的二维idct的计算速度。在编码阶段,正向离散余弦变换(fdct)把空间域表示的图变换成频率域表示的图;相应地在解码阶段,逆向离散余弦变换(idct)将频率域表示的图变换为空间域表示的图。 在idct的实现上,目前有多种算法。传统的方法是行-列法,即先对每行(列)进行一维idct计算,再对每列(行)进行一维idct计算。还有多项式变换法和三角函数公式法,这两种方法的加法次数与行-列法相当,乘法次数仅为