kaiyun官方注册
您所在的位置: 首页> 嵌入式技术> 设计应用> 基于DSP的数字图像采集、压缩系统的设计与实现
基于DSP的数字图像采集、压缩系统的设计与实现
李世军,黄 锋,屈喜龙,郭照南
摘要:一种基于高速数字信号处理器TMS320VC5410DSP和CPLD的图像采集、压缩系统,分析了系统设计时的各个关键技术环节,介绍了JPEG图像编码算法的DSP的实现,讨论了图像编码中DCT变换的实现和优化,利用DSP的乘法累加指令和双字加/减法指令快速实现DCT。
关键词: DSP JPEG DCT变换
Abstract:
Key words :

摘 要:一种基于高速数字信号处理器TMS320VC5410DSP和CPLD的图像采集、压缩系统,分析了系统设计时的各个关键技术环节,介绍了JPEG图像编码算法的DSP的实现,讨论了图像编码中DCT变换的实现和优化,利用DSP的乘法累加指令和双字加/减法指令快速实现DCT。
 关键词:DSP;JPEG;DCT变换

  随着计算机与图像处理技术的日益发展,研究图像采集、处理的实时实现具有重要的现实意义。而视频图像信号数据量较大、信号较为复杂,这就要求视频图像信号处理系统具有实时采集、大容量存储和实时处理的特点。传统的数字图像处理系统多采用计算机加软件、单片机或专用DSP等来实现。这些方法有的处理速度较慢,无法满足现代图像处理系统的实时性要求;有的专业性太强,应用受限制。基于以上各方面的考虑,本文提出一种基于DSP和CPLD的视频图像采集、压缩系统。JPEG算法是一种数字图像压缩编码算法,具有压缩比例高、失真小的特点,并已被确定为国际标准[1]。该标准被广泛应用于数码相机、监视系统、手机、可视电话等诸多方面。而实现JPEG算法一般有3种, 即纯软件实现法、专用集成电路实现法及基于DSP的软硬件综合实现法。纯软件实现法一般依赖PC机的支持,不适应嵌入式应用需要;专用集成电路实现法实时性好,但灵活性以及可扩展性差;用DSP编程实现JPEG,其算法灵活,满足嵌入式应用需要,具有较好的交互能力,并且具有很好的可扩展性、可升级性和易维护性。
1 系统硬件设计
选用TMS320VC5410DSP芯片作为系统主处理器,CPLD为协处理器。该嵌入式系统能完成视频图像信号的采集、处理、压缩编码、存储等一系列功能。构建的图像处理系统由主处理器TMS320C5410DSP、1片256 K×16 bit Flash、2片4 M×16 bit SDRAM、外部存储器接口EMIF(External Memory Interface)和其他通用外设接口,如RS-232、音频接口等组成。另外采集模块主要由视频解码A/D芯片、采集和显示时序控制芯片IspLSI2064CPLD等[2]组成。系统结构原理如图1所示。


(1)CCD摄像头用来采集模拟视频图像数据。
(2)视频解码A/D芯片Philips SAA7113将模拟视频电视信号(本系统PAL制)数字化。输出为符合CCIR.601标准的数字视频码流。
(3)FIFO AL422B作为A/D与VC5416DSP之间的数据缓冲,使A/D的转换速度与DSP读取A/D数据的速度匹配。
(4)TMS320C5410 DSP为主处理器,实现对视频数据的压缩编码处理。在存储FIFO、存储SDRAM和压缩码流输出SDRAM采用DMA方式进行数据传输,可以提高数据传输的速率。
(5)CPLD采用Laitiice公司的IspLSI2064VE为系统协处理器,作为视频A/D对FIFO进行写操作,DSP对FIFO进行读操作的时序控制。
(6)Flash 采用芯片256 K×16 bit的AM29LV400B,用于DSP上电或复位后的程序加载。
(7)SDRAM作为DSP的片外扩展存储器,用于存储A/D的图像数据、中间过程的部分数据以及压缩后的图像数据。选用了4片ISSI公司的4 M×16 bit SDRAM芯片IS42S16400,构成了一个8 M×32 bit的外部存储器。
1.1 图像采集与存储关键问题与解诀方法
本设计中解码CCD摄像头的模拟视频信号采用专用的模拟视频信号解码器SAA71113。SAA71113视频解码器是双通道模拟预处理电路、自动钳位和增益控制电路、时钟产生电路、数字多标准解码器、亮度/对比度/饱和度控制电路、彩色空间矩阵的组合,是一款功能完善的视频处理器。SAA71113只需要单一的3.3 V电源供电,与DSP的I/O电压一致。SAA71113A接收CVBS(复合视频)或S-video模拟视频输入,可以自动将PAL、SECAM、NTSC模式的彩色视频信号解码为CCIR-60l/656兼容的彩色数字分量值,器件功能通过I2C接口控制。这样图像采集过程可以全部在后台完成,基本上不需要CPU的干预,可以节约大量的CPU时间。但是这样设计有一个难点:由模拟视频信号解码得出的数字视频信号数据量非常大,而且由于是实时视频信号,所以数据输出速率也非常高,但是DSP外部存储器接口的读出速率却比较慢。为了解决这个问题,本设计采取高速FIFO对数据进行暂存以缓解速度上的差异,即采用FIFO来暂存10行图像数据,视频解码器直接向FIFO中写入图像数据。当FIFO中写入了10行图像数据后,由CPLD向DSP发出中断INT0请求;同时,DSP接到中断请求后,启动DMA方式将10行图像数据从FIFO中读入到其外部SDRAM中存放。这样在采集的同时,DSP就可以读取已采集的10行数据,而不必等待一帧图像数据采集完成,从而提高了DSP的处理效率。CPLD主要控制解码器向FIFO中写入数据以及DSP从FIFO中读出数据。系统可以采集到一帧图像的尺寸为640(点/行)×480(行),从SA71113输出的是4:2:2的YcrCb数据格式,一个像素用2个字节表示,一个字节表示Y,另一个字节为Cb和Cr,总的数据量为640×480×2=600 KB。对于亮度信号,每个像素Y占1B,一行共640 B,用640个存储单元存储一行的Y数据。对于色度信号Cb,一行共640点,每两个像素共用一个色度信号Cb,占1 B,共320 B,用320个字节单元存放一行的数据。对于色度信号Cr,存储格式与Cb一样。这样一帧图像数据需要的的缓冲区大小为:640×480+320×480×2=600 KB。因此系统中对此扩展了8 M×32 bit的SDRAM,而且用了具有3 Mbit缓冲的FIFO[3,5]。
2 JPEG压缩编码流程与优化实现
JPEG压缩编码主要由图像数据分块、DCT变换、量化、Huffman编码4个步骤[4]。先将原始YcbCr空间的二维图像分成8×8的数据块,然后将各数据块按从左到右、从上到下的顺序分别进行DCT变换、量化、“之”字型(Zig-Zag)扫描和Huffman编码(量化和Huffman编码分别需要量化表和Huffman表的支持),其中DCT变换是JPEG算法的关键部分。
DCT变换的快慢决定了整个JPEG算法的速度。8×8数据块的DCT计算有直接计算法和行列法两大类,但直接计算法较复杂,占用更多的DSP资源,因此一般使用行列法,将8×8数据块的DCT计算转换为16次一维8点DCT计算,只要提高一维DCT的运算速度就可以提高二维DCT的运算速度。本文应用一种基于DSP乘法累加单元的DCT快速算法,DSP都具有乘法累加/减单元,能在单周期内完成1次乘法运算和1次累加运算[4]。VC5410DSP具有多条乘法累加指令,其中2条双操作数乘法累加指令如表1所列。


表1中2条指令都能在单周期内完成读出2个操作数、2个操作数相乘及乘法运算结果,与源累加器相加后送给目的累加器不同的是,第二条指令能将加法结果四舍五入后再送给目的累加器,可见这2条指令的功能非常强大。引入DCT计算,将大大简化程序的复杂度,并减少DCT的时间。
(1)二维DCT正变换
二维DCT正变换的公式如下(8×8):

  将以上二维变换分解为一系列一维变换(行,列)进行计算。即:

  从上述表达式可以看出,Y0~Y7都是乘法累加运算,而S0~S7可由x0~x7经过蝶形运算得到。因此将DCT算法分成两级运算,即第一级蝶形运算,第二级乘法累加运算,减少了运算级数,也就减少了中间数据的存、取时间。这样利用DSP的专用指令乘累加运算大大优化了DCT算法[4,5]。
(2)8点DCT的DSP实现
第一级运算包括4个蝶形运算,每个蝶形运算包括1次加法运算和1次减法运算,可以采用DSP的双字加减法指令。例如计算(x0+x7)、(x0-x7)、(x1+x6)及(x1-x6)的程序段,需要如下5条指令:
DLD *AR2+0,B ;取x0、x1
DADD *AR3,B,A ;计算(x0+x7)、(x1+x6)
DSTA, *AR4+ ;存储(x0+x7)、(x1+x6)
DSUB *AR3-0,B,A ;计算(x0-x7)、(x1-x6)
DSTA, *AR5- ;存储(x0-x7)、(x1-x6)
故4个蝶形运算共需要10条指令。
计算一个DCT系数需要4次乘法累加运算和1次存储操作,共5条指令,被乘数是蝶形运算结果,乘数是已知常数(事先计算好系数并存放在DSP的内部存储器中)。乘法累加运算的程序段如下:
MAC *AR4+,*AR5+0%,B,A ;乘法累加
MAC *AR4+,*AR5+0%,A ;乘法累加
MAC *AR4+,*AR5+0%,A ;乘法累加
MACR *AR4+,*AR5+0%,A ;乘法累加
STHA, *AR2-0 ;存储结果
其中,AR4、AR5分别指向被乘数和乘数,累加器B事先被清零,因此,第二级运算共需要40条指令,计算一个8点DCT要50条指令,实际编程时还要加几条辅助指令,最后以54条指令和非常简洁的程序结构实现了8点DCT[4-7]。
本文以上述算法和流程为基础,设计了基于DSP实现JPEG的编码算法,并进行了优化。与基于ASIC的方法相比,本方案具有通用性强、灵活高效的特点。图2(CCS界面显示)为采集的640×480×16 bit的本人彩色视频头像进行JPEG标准压缩后复原的图像,相应的压缩编码指标在表2中列出。


  从上面的结果可以看出,整个压缩系统基本上可以实现对视频图像压缩编码。对本算法进行适当修改,可以应用到数码相机、手机等多种嵌入式系统中。同时,该压缩系统可以通过PCI总线控制,将压缩后的码流通过JPEG文件的形式传输给PC机。另外,该压缩系统可以成为一个通用的视频图像采集压缩处理平台,在该平台上可以实现JPEG2000、H.264、MPEG-4等多种视频压缩。


参考文献
[1] PENNEBAKER W B,MITCH1L J L.JPEG still image data compression standard.VNR 115 fifth Avenue,New York,NY 10003,1993.
[2] 刘政,叶汉民.CPLD在DSP多分辩率图像采集系统中的应用[J].微计算机信息,2007(29).
[3] 冯琪,裴海龙.视频采集与实时传输系统的软件实现方法研究[J].计算机应用研究,2005(7).
[4] 齐美彬.基于DSP的视频图象压缩系统的研究.合肥工业大学硕士学位论文,2001.
[5] 王元中,胡瑞繁.整数DCT变换中变换基的通用生成算法[J].中国图像图形学报,2008(6).
[6] 鲁昌华,石洪源.基于FPGA+DSP的实时图像处理平台的设计与实现[J].电子技术应用,2007(12).
[7] 须文波,陈玉萍.基于DSP图像压缩系统设计与算法研究[J].计算机工程与应用,2007(43).

此内容为AET网站原创,未经授权禁止转载。
Baidu
map