基于FPGA+DSP技术的Bayer格式图像预处理
扫描二维码
随时随地手机看文章
高分辨率图像实时处理在通信、医学、军事、航天航空、信息安全等领域有着广泛的应用和发展。在图像实时处理的过程中,下层图像预处理的数据量大,运算简单,但是要求运算速率高,可以用FPGA硬件来处理,上层所处理的数据量少,算法结构复杂,适于运算速度快,寻址灵活的DSP数字信号处理器进行处理。这里提出了一种FPGA+DSP相结合的实时图像处理系统,并应用于传像光线束传递图像。CMOS实际采集的是光线束的出端图像,FPGA将CMOS采集的Bayer格式的图像转换为RGB格式的亮度信号。由于光纤出、入端结构不同,需要DSP准确每根光纤的中心位置,重新排序才能输出正确的图像信息。该系统充分发挥了FPGA和DSP各自的优势,能更好地提高图像处理的实时性,降低成本。
1 Bayer图像格式
CMOS图像传感器作为一种基础器件可以实现信息的采集、转换以及视觉功能的扩展,并能直观真实地给出可视图像信息。系统中CMOS图像传感器输出2 592x1 944x12 bit的Bayer格式的图像(该格式的图像本身就是数字信号,因此无需对图像进行模数转换),Bayer图像格式如图1所示。在图l中,每个方格代表一个像素,并且只含有R、G、B中的一种颜色分量,奇数行由G、R像素交替构成,偶数行由B、G像素交替进行,其中G像素分量占所有像素的一半,R像素和G像素占另一半。因为G像素分量是R、B像素分量的2倍,所以如果G像素分量采用好的插值方法,不仅可以提高G像素分量的质量,也能提高R和B像素分量的质量。由于TMS320DM642的video port capture接口的数据总线是8位或者16位(该系统采用了更适合DSP处理的8位数据),所以为了后续的DSP能够更好的处理数据并减少DSP的运算量,需要使用FPGA先将输出的图像数据取高8位,然后依据每个像素点与相邻8个像素点之间的关系,使用双线性插值法将Bayer图像格式转换成24位的RGB图像格式和亮度信号,然后将处理后的数据发送给DSP。
2 图像数据处理的工作原理
2.1 Bayer图像的格式转换
双线性插值法具有算法计算量少,算法结构简单,易于实现,占硬件资源少等优点,本系统中更适合FPGA实现。双线性插值法的基本原理是将每个像素位置上缺少的另外两种色彩分量通过该像素本身为中心的领域内具有相同分量的像素平均获得,即将每个像素的RGB分量都以该点像素为中心的3x3像素矩阵进行线性插值而成。按照这种思路可以将图像中的3x3矩阵分成4类,如表1所示。
每种图像矩阵中间的像素点为待插值的数据源,设R(x,y)、G(x,y)、B(x,y)为插值计算后该点红、绿、蓝像素分量。当像素位于奇数行奇数列计算公式为:
[!--empirenews.page--]
由于系统中TMS320DM642的视频端口使用的是8位RAW采集方式从CMOS传感器中采集图像,为了减轻DSP的运算负担,FPGA还需要将图像数据转换成Y亮度信号。将得到的RGB图像信号,通过浮点算法公式转换成亮度信号,具体推导公式如下(GB代表取高8位数据):
2.2 FPGA的硬件实现原理
由于双线性插值法需要将图像数据采集成3x3的图像矩阵,系统采用一种由FPGA硬件元器件构成的FD-FIFO模型取图像矩阵。电路如图2所示。
如图2所示,每个移位寄存器FD和先入先出寄存器FIFO左侧上端信号为时钟输入信号(上升沿有效),左侧下端信号为8位的像素信号。图像矩阵的采集流程为:8位的图像信号送到第1个FD,然后经过移位操作从第3个FD存入左边第1个FIFO,存入一行图像数据后,等第2行图像数据送达时,第2行的图像数据经过移位操作从FD存入左边第1个FIFO,同时存储在第1个FIFO的数据开始读出到第4个FD,再经过移位操作存入第2个FIFO,等待两行图像数据都存储后,当第3行图像数据送达至第3个FD,同时后面2个FIFO分别读出前两行的前3个图像数据时,就可以从FD和FIFO的输出端口读取到1个3x3的图像数据矩阵:3x3矩阵第1行从左到右的数据为ABC,第2行的数据从左到右为DEF,第3行的数据从左到右为GHI。
CMOS图像传感器采集的图像大小固定为2 592x1 946x12 bit的Bayer图像,FPGA先用一个12位输入8位输出的移位寄存器取图像的高8位,再利用FD-FIFO得到3x3的图像矩阵,然后可以根据双线性插值法计算图像的RGB信号。双线性插值法虽然算法简单,且易于实现,但是存在边界效应。系统对边界效应做了如下的处理方法:对图像四周全部补零,即先将图像扩展成2 594x1 946大小,然后计算得到2592x1 944大小的图像,这样得到的图像仍是完整尺寸。只需在运算的时候,针对不同四周特殊的像素采用裁减的公式(系统中不产生零像素,只是对计算公式中相应边界元素补零)。过程如下:
第1行图像读入第1个FIF0后,第2行图像开始读入左边第1个FD的时候,开始计算第1行RGB数据,这时候第2个FIFO没有数据,相当于在第1行的数据前面补零。第1 944行图像读入第1个FIFO后,第1 943行图像读入第2个FIFO的时候,开始计算最后1行(第1 944行),这时候第1个FD已经没有数据读入,相当于在第1 944行的数据后面补零。由于FD具有延时效应,所以在读写时,前1个FIFO开始读写时,再经过延时2个时钟周期,才到达后1个FIFO,所以相邻的FIFO读写使能信号要间隔2个时钟周期。
对列的操作也是如此,每一行的第1个元素读出到B、E、H位置时开始计算,这样每一列的第1个元素前相当于是零元素。每一行的最后一个元素读出到B,E,H位置时开始计算,这样每一列的最后一个元素后相当于是零元素。[!--empirenews.page--]
3 图像预处理系统的硬件工作过程
图像预处理系统硬件框图如图3所示,整个系统在通电后,先由TMS320DM642通过I2C向500万像素的CMOS摄像头发出控制命令,调整摄像头输出的图像分辨率、焦距等,之后由摄像头将采集到的图像数据发送至FPGA。由于摄像头输出的图像格式为12位的Bayer图像,而DSP的vp-ort口支持为8位或者16位的RAW采集方式,本项目中采用了更适合于DSP处理的8位数据,所以需要FPGA对采集的图像数据取高8位以方便DSP获取图像数据。FPGA在Frame_Valid和Line_Valid同时为高电平的时,在Pixclk的上升沿采样图像数据,并将原来的12位图像数据取其高8位转换成8位Bayer图像数据,然后利用FPGA内部的FD-FIFO模型结构取图像的3x3矩阵并利用双线性插值算法将Bayer图像转换成24位的RGB图像格式。除此之外,FPGA还将Bayer图像数据转换成了Y亮度信号以达到DSP对运算数据的要求,使得DSP只工作在核心算法上。
转换好的亮度图像数据由FPGA通过TMS320DM642的VPort1口发送至DSP进行核心算法处理。为了更好地达到整个DSP算法处理的实时性,DSP采用了BIOS实时操作系统。经算法处理好的图像数据由TMS320DM642通过其VPortO口发送至FPGA。图像预处理过程是在Spartan-3系列的XC3S1500x中进行的。FPGA使用的设计方法是HDL设计输入法,常用的HDL语言有VHDL和VerilogDHL语言,在本系统中使用VHDL语言进行硬件设计。
系统采用的是通过FPGA固件支持高传输率USB2.0的CY7C68013芯片,采用Slave_FIFO模式接收FPGA输出的图像数据,再通过USB口输送给上位机。如图4所示,图4(a)为RAW图像,即每个像素点只含有单一颜色分量的Bayer格式图像,图4(b)为系统处理后的RGB格式的亮度信号图像。
4 结论
可见,本文所提出的基于FPGA+DSP的图像处理系统,能在FPGA硬件设备中高速、高质量地对CMOS传感器采集的Bayer图像进行预处理,为DSP数字信号处理器进行核心算法减少运算量,提高整个图像处理的实时性,缩短了开发周期,并且这种FPGA+DSP的组合模式也可以推广到处理各种数字视频信号。