首 页电子文章电子资料客户留言繁體中文
设为首页
加入收藏
联系我们
您当前的位置:中国电子前沿 -> DSP技术 -> TI6000应用 -> 电子文章内容 退出登录 用户管理
栏目导航
· TI DSP综合 · TI2000应用
· TIDSP Boot · TI5000应用
· TI OMAP应用 · TI6000应用
· ADIdsp
热门电子文章
· [无线开发] 收发一体超声..
· [TI DSP综合] 轻松体验DS..
· [51系列] 单片机c语言学..
· [USB技术] 基于DSP技术的..
· [ARM应用] 触摸屏在S3C24..
· [原理欣赏] 高速高密度PC..
· [ARM入门] 安装cygwin 注..
· [USB技术] USB设计
· [ARM应用] ARM/DSP双核系..
· [FPGA应用] FPGA器件的在..
· [ARM系统] 基于ARM体系的..
· [ARM应用] ARM CPU S3C44..
相关电子文章
· 基于Arm的Linux内核..
· [组图] 基于ADSP2106..
· [组图] 基于DSP的实时..
· [组图] 基于DSP56F80..
· [图文] 基于AD7864和..
· [组图] 基于ADSP-TS1..
· [组图] TMS320F206对..
· [组图] 基于VisualDS..
· [组图] 基于ADSP-TS1..
· [组图] 基于双DSP的运..
基于DSP的JPEG图像解码算法的实现
作者:佚名  来源:不详  发布时间:2006-9-20 8:20:36  发布人:zangyl

减小字体 增大字体

 摘 要:概述了JPEG图像解码算法的基本原理,论述了JPEG图像解码算法基于DSP的实现过程,并重点讨论了JPEG图像解码中IDCT变换和Huffman解码算法的实现和优化。本文介绍的JPEG图像解码算法可以应用到数码相机、多媒体手机等多种场合
  关键词:DSP;JPEG;IDCT变换;Huffman解码

 JPEG算法是一种数字图像压缩编码算法,具有压缩比例高、失真小的特点,并已被确定为国际标准[1]。要对以JPEG文件格式进行存储的数字图像进行显示和回放,需对其进行解码。DSP处理器具有特殊的处理器结构、指令系统和指令流程,是一种特别适合数字信号处理的微处理器[2]。DSP对JPEG图像的解码处理,具有小巧灵活、实时高效的特点,在诸如数码相机、监视系统、手机、PDA以及可视电话等多媒体嵌入式系统中应用广泛。

1JPEG图像解码算法的基本原理
  JPEG图像解码需要将JPEG图像数据恢复成压缩编码前的图像数据。如图1所示,JPEG
图像解码须经过预处理、Huffman解码、反量化、IDCT变换这几个主要步骤,然后还要经过后续处理才能最终将JPEG图像显示出来。

2JPEG图像解码算法的实现和优化
  
本文以16位定点ADSP为例,论述使用DSP将24位真彩色JPEG图像解码为可显示的RGB颜色空间图像的算法流程。
2.1预处理
  JPEG图像解码需要从JPEG图像文件中提取解码需要的各种信息和压缩数据。JPEG图像文件
大体上可分为2个部分:压缩数据和标记码。压缩数据是以MCU(最小编码单元)形式存储的经过压缩编码后的数据。标记码给出了诸如图像长度、宽度、量化表、Huffman表等重要信息,而这些信息都包含在不同类型的标记码中。预处理算法需要识别不同的标记码,并提取标记码中的有用信息。当进入SOS(扫描开始)标记码并开始读取压缩数据时,预处理任务结束,开始进入解码阶段。
2.2基于IDCT的解码实现
  
基于IDCT的解码过程如图1虚线框所示,包括:Huffman解码、反量化和IDCT变换。如前所述JPEG文件中的压缩数据是以MCU形式存储的,因此解码过程也必须以MCU为单元来实现,即不断对MCU单元进行循环解码,直到取完所有压缩数据为止。JPEG文件中MCU可以定义成多种模式,本文以MCU的4∶1∶1模式进行说明。
2.2.1Huffman解码的实现

  如图2所示,对一个MCU进行Huffman解码,需在完成亮度解码后才能进行色度解码。解码后得到6个具有64位元素的一维数组,分别是:4个Y亮度数组、1个Cb色度数组、1个Cr色度数组。对亮度和色度进行解码其实就是对亮度数组和色度数组的解码。对一个数组来说,Huffman解码包括直流解码和交流解码。对数组第一个元素的解码称为直流解码(简记为DC解码),对剩下的63个元素的解码称为交流解码(简记为AC解码)。JPEG文件中一般包含4个Huffman表,即亮度DC表、AC表,色度DC表、AC表。对不同的数据进行解码需要调用不同Huffman表。DC解码出的数据称为DC值,但最终的DC值却是直接解码出的DC值与该数组紧跟的前面一个数组的DC值之和。AC解码一般会得到多个数据,包括一些连续0数据和一个非0数据。
  
不管是亮度还是色度解码,也不管是AC还是DC解码, Huffman码是其最小解码单位,且每个Huffman码的解码流程都是大致相同的。一个Huffman码包括码头和码值2部分,码头用来惟一的标识该Huffman码,并与Huffman表一一对应,码值是该码的实际大小。图3是ADSP完成一个Huffman码解码的流程图。在图3中,SR是ADSP中32位移位寄存器,他包括2个可以单独使用的16位寄存器:SR0和SR1。当SR从低16位开始将SR0中的数据向左移位时,从SR0移出的数据会进入SR1中。对一个Huffman码进行解码需要首先找到该码的码头,而最短的
码头有2个二进制位。为此,从JPEG文件中读取一个字的数据后,先取其高两位来分析。图3中,判断A是指:判断SR1中的数据是否是包含在Huffman判断表中的Huffman码头,判断B是指:判断SR0移位后剩下的数的位数是否不小于查得的Huffman码值位数,X是指SR0中剩下的还没有移位的数的位数,Y是指查得的Huffman码值位数。
  
Huffman码是变长编码,Huffman解码时需要将所有压缩数据都按位在Huffman表中进行分析比较以确定惟一标识Huffman码的码头,如果直接采用从JPEG文件头中读取的Huffman表将非常浪费时间。为此,根据从JPEG文件中读取的Huffman表,生成了2个单独的表,即图3中的Huffman值表和判断表。值表存放的是与Huffman码头相对应的码值位数信息。判断表专门用于判断识别码头。判断表确定码头后,根据码头就可以在值表中直接查到Huffman码值的位数,知道了码值的位数就可以从JPEG文件中轻松取出该码值来,从而完成一个Huffman码的解码。

2.2.2反量化的实现
  
由图1可知:量化运算需要量化表的配合。从JPEG文件中读取的量化表一般有2个,分别用2个64位元素的一维数组来存储,分别用于对亮度和色度行进反量化。反量化运算就是将上面经Huffman解码得到的数组中的元素与量化表中对应位置元素相乘。反量化的计算可以利ADSP的可变址寄存器寻址方式和循环指令,灵活快捷地装载操作数并循环执行,这样可以大大减少非计算指令消耗DSP指令周期。反量化运算的ADSP实现代码如下:
 

  
为了进行后面的IDCT,还需要将完成反量化运算的数组进行Z字型变换,即按图4所示折线先后的顺序将一维数组变换成8×8的二维数组。这样,一个MCU经过反量化和Z字型变换后,就得到了8×8的Y数组4个,Cb,Cr数组各一个。

2.2.3IDCT的实现
  
IDCT变换(离散余弦反变换),其计算可用下面的公式表示为:
  

为其他情况时,C(u)=C(v=1。直接按照上面的公式计算,将会有很大的运算量,势必影响JPEG的解码速度,为此可以将二维IDCT分为2个一维的IDCT,转换如下:  
  

  这样对8×8的二维数组进行IDCT的计算可以转化为先对该数组的行分别进行8次一维IDCT,再对列分别进行8次一维IDCT,这样就简化了计算复杂度。下面研究如何快速实现一维IDCT
  
由文献[3]可得到8点一维DCT变换(用S8(u)表示)同16点DFT(离散傅里叶变换,用F16(u)表示)的关系公式如下:  
  

  由上面的公式可知:对应的16点DFT的实部等于8点一维DCT变换乘以一个常数。因此,8点一IDCT可由16点DFT来代替。根据参考文献[3]的推导并结合ADSP的特点,8点一维IDCT可用如下公式流程来实现:
  
  

  
从上面的运算步骤可以看出,一维IDCT运算已经转化成了一系列简单的加减法及与常数相乘的乘法运算。简化了IDCT运算的复杂度,并大大降低了运算量。用ADSP实现上面的运算,要注意结合ADSP自身的特点,以上述第(3)步计算b3,b4为例,ADSP实现代码如下
  
  
上述代码利用了操作数的特点,合理调整了各公式数据的计算次序并选用合适的指令,使一次装载的4个数据可以完成乘、加、减三种运算,节约了指令周期。
2.3后续处理的实现
  
经过上述处理后,JPEG图像解码任务基本完成,但是要将解码出的图像进行显示还需要一些后续处理。后续处理的任务之一就是完成颜色空间的转换,即将JPEG图像数据的YCbCr颜色空间转换为RGB颜色空间,其转换公式如图5左边所示。但是,为了使计算出的RG,B的值都是正数,需要对Y,Cb,Cr分别加128进行修正,同时该公式中乘法运算出现了浮点数,故需要对浮点数进行定标处理。此处,参与乘法运算的浮点数定为Q14,为了使乘法运算的结果能直接参与加减运算,还需要将积再除以214。因此,图5左边的公式就需要转 变成右边的公式。从公式中可以看出:每计算出一对R,G,B数据,需要一对Y,Cb,Cr数据参与运算,但是一个MCU计算出的Y,Cb,Cr数据是4∶1∶1的关系,为此,在进行颜色空间转换前,需将1个Cb和1个Cr数组扩展成4个Cb和4个Cr数组。完成颜色空间的转换后,再将计算出的R,G,B数据按显示设备要求的格式排列,就可以显示图像了。


 


 

3结语
  
本文以上述算法和流程为基础,在ADSP的开发环境Visual DSP下,实现了JPEG的解码算法,并进行了优化,其中,消耗程序存储器2 566 B,数据存储器893 B。图6是原始JPEG图像,7是采用上述算法流程,在ADSP中进行解码后得到的BMP图像。对本算法进行适当的修改,就可以应用到数码相机、PDA等多种嵌入式系统中。

参考文献

1]张益贞,刘滔.VisualC++.实现MPEG/JPEG编解码技术[M] .北京:人民邮电出版社,2002
2]徐科军,黄云志.定点DSP的原理、开发与应用[M].北京:清华大学出版 社,2002
3]The Implementation of the 2D-IDCT[J].http://rnvs.informatik.tu- chemnit.zde/~jan/MPEG/HTML/IDCT.html.2000

[] [返回上一页] [打 印] [收 藏]
下一篇电子文章:基于Arm的Linux内核编译指导
∷相关电子文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
关于本站网站帮助广告合作下载声明友情连接网站地图
Copyright © 2002-2006 EMB-CN.com. All Rights Reserved .鲁ICP备06032441号qq群:30191791