多核处理器构架的高速JPEG解码算法

sapzj1984 2007-10-09 11:33:02
JPEG(Joint Photographlc Experts Group)是一个适用范围很广的静态图像数据压缩标准,目前广泛应用于照相机、打印机等方面的图像处理。在这些应用中,设计出一个高速高效的JPEG解码器已经成为一个重要的研究方向。随着对嵌入式系统实时性、高性能和可扩展性要求的提高,多核(multi—core)嵌入式处理器的应用场合日益增多。

1 JPEG解码算法原理

JPEG压缩是一种有损压缩。它利用人的视角系统特性,使用量化和无损压缩编码相结合的方式去掉视角的冗余信息和数据本身的冗余信息来达到压缩的目的。JPEG算法可分为基本JPEG(Baseline system)和扩展JPEG(Extended system)。其中Baseline system应用尤其广泛。本文主要讨论Baseline system的解码。
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计算。还有多项式变换法和三角函数公式法,这两种方法的加法次数与行-列法相当,乘法次数仅为行-列法的一半。但这两种方法的问题在于实现方法复杂,对于目标平台(VLIW)来说,这样的结构难以提高指令的并行性,并且对于目标平台来说,乘法指令的执行时间与加法指令相当,因此减少了行-列法实现的代价。

2 多核处理器构架

FRl000是Fujitsu公司生产的主要应用于嵌入式系统的多核处理器。FRl000将4个处理器核(processorelement) 集成在1枚芯片上,各个处理器核之间共享内存和其他外部设备。4个处理器核分别叫作PM(PE0)、PE1、PE2、PE3。其中,每个处理器内核均为一个独立的VLIW(超长指令集)型架构的处理器,每个处理器核上都设置有独立的高速二级缓存,以减小多核处理器在并行访问内存时的瓶颈效应。
FR1000在每一个处理器核上都运行一个独立的实时操作系统(RTOS),而各个处理器核之间通过并行扩展库(MP extended library)进行通信。通过并行扩展库的扩展,运行在一个处理器核上的任务不仅能和运行在同一处理器核上的任务通信,还能和运行在不同处理器核上的任务通信。这样,任务间就可以通过协同通信来完成特定的应用。而通过将应用划分为不同的可以并行运行的任务而运行在不同的处理器核上,就可以并行地处理数据,从而达到提高系统性能的目的。
从FRl000的构架可以看出,为了提升对于图形和多媒体数据的处理速度,处理器着重于扩展其并行处理数据的能力。这样的扩展主要表现在两个方面:一方面使用VLlW构架的处理器核(这样的处理器核一次最多能够并行执行8条指令,这样的并行性主要由编译器支持,这是一种指令的并行性);另一方面使用多核处理器(CMP)的构架,使针对应用划分的任务能够真正并行地运行在多个处理器核上。(这样的并行性需要由应用支持,通过恰当的划分任务来实现)
http://jingyan.qihoo.com/jingyan_frame.html?dest=http%3A%2F%2Fwww.ee365.cn%2Fshow.aspx%3FClassID%3D184%26articleID%3D13265&title=%B6%E0%BA%CB%B4%A6%C0%ED%C6%F7%B9%B9%BC%DC%B5%C4%B8%DF%CB%D9JPEG%BD%E2%C2%EB%CB%E3%B7%A8+&rnum=0&vnum=924&kw=%B6%E0%BA%CB
...全文
123 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhenwanli 2007-10-09
  • 打赏
  • 举报
回复
Intel的应该怎么做?

说了半天不是Intel的,是专用主力器,而不是通用处理器
oo 2007-10-09
  • 打赏
  • 举报
回复
up
zy_914 2007-10-09
  • 打赏
  • 举报
回复
好文章

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧