一种基于高速数字信号处理器TMS320VC5410DSP和CPLD的图像采集、压缩系统

时间:2011-08-27

  一、前言

  广义的来说,计算机图像处理(Computer Image Processing)泛指一切利用计算机来进行与图像相关的过程、技术或系统,它与各个领域都有很深的交叉与渗透。例如,工业生产、生物医学、智能监控、虚拟现实、生活娱乐等等。计算机图像处理包括:对数字图像的处理、对数字图像的分析与理解、结合传感设备对实际事物的数字化图像采集,以及对图像处理结果的数字化表达等等。

    随着计算机与图像处理技术的日益发展,研究图像采集、处理的实时实现具有重要的现实意义。而视频图像信号数据量较大、信号较为复杂,这就要求视频图像信号处理系统具有实时采集、大容量存储和实时处理的特点。传统的数字图像处理系统多采用计算机加软件、单片机或专用DSP等来实现。这些方法有的处理速度较慢,无法满足现代图像处理系统的实时性要求;有的性太强,应用受限制。基于以上各方面的考虑,本文提出一种基于DSP和CPLD的视频图像采集、压缩系统。JPEG算法是一种数字图像压缩编码算法,具有压缩比例高、失真小的特点,并已被确定为国际标准[1]。该标准被广泛应用于数码相机、监视系统、手机、可视电话等诸多方面。而实现JPEG算法一般有3种, 即纯软件实现法、专用集成电路实现法及基于DSP的软硬件综合实现法。纯软件实现法一般依赖PC机的支持,不适应嵌入式应用需要;专用集成电路实现法实时性好,但灵活性以及可扩展性差;用DSP编程实现JPEG,其算法灵活,满足嵌入式应用需要,具有较好的交互能力,并且具有很好的可扩展性、可升级性和易维护性。

  二、系统硬件设计

  选用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.图像采集与存储关键问题与解诀方法

  计算机是一种数字化的处理设备,因此经典的计算机图像处理主要是指数字图像处理(Digital Image Processing),这其中包括图像的空间域处理、频域处理、复原处理、压缩处理、形态学处理、分割处理等等。计算机所要完成的工作,是运行相关的程序,以便得到所需要的图像处理结果,常用的编程语言包括C、Matlab等等。

本设计中解码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]。

    此外,像IPP、OpenCV、MTL这样的函数库,包含了许多经典、高效的图像处理模块,为开发人员带来了不少的便利。而像Photoshop这样的商用软件,则是将计算机图像处理的复杂算法,做成了友好的用户界面,为摄影爱好者、广告设计师等注重应用的人群,提供了一个简单易用的平台。可见计算机图像处理技术的应用之广!   一般说来,数字图像处理技术主要应用在对图像的预处理层面上。

  三、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等多种视频压缩。

  作为当今科研领域为活跃的一个方向来讲,计算机图像处理以其独特的魅力、广泛的应用,吸引了许多国内外科研单位和企业的关注。例如,清华大学电子工程系智能图文信息处理研究室研发的“TH-OCR”文字识别系统,微软公司、英特尔公司联合研制的“数字家庭”平台等等,都是计算机图像处理应用的经典;同时,还有数不胜数的产品正处于研发阶段,或是批量生产阶段,等待着掀起下一轮的“技术狂潮”。因此,我们完全有理由相信,计算机图像处理技术终将会对我们的生活、工作、学习、娱乐等各方面,带来深刻而长远的影响!

  
上一篇:一项以BQ24200为芯片的太阳能供电电源设计
下一篇:一种单级功率因数校正电路的直流母线电压设计和实现

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料