APP下载

基于SDRAM的Bayer格式图像插值算法硬件设计

2013-08-13

电视技术 2013年5期
关键词:彩色图像数据流插值

李 华

(商洛学院,陕西 商洛 726000)

现在的数字图像采集系统出于成本和体积重量等因素考虑都是在灰度CCD/CMOS传感器感光表面覆盖颜色滤波阵列(CFA),产生一种马赛克图像,从而实现彩色成像,其中最常用的为Bayer格式[1]。对经过滤波阵列马赛克图像进行彩色恢复,特别是实时彩色恢复,在图像处理方面有着非常重要的应用。

在Bayer格式中,因为每个像素点仅有一种颜色,因此,需要利用其周围像素点的强度相关性来估计出缺失的另外两种颜色,从而得到彩色图像,这种方法称为彩色插值或去马赛克。应用硬件实现彩色恢复算法,实时输出彩色图像不但可以省去二次处理图像的麻烦,还可以将算法应用于别的系统之中,比如图像分割等。本文设计了1套基于1片FPGA结合4片SDRAM来完成Bayer插值算法的实时彩色输出硬件实现方案,该设计原理简单,实际开发较容易,稳定性高,而且具有一定的通用性。

1 系统原理分析

自1976年Bayer首次提出Bayer阵列至今,Bayer插值算法不计其数,但都是在3×3,5×5或是更大的数据窗口中进行,它们应用硬件设计都会使用如图1所示的数据流结构(以5×5为例说明)。当输入数据有效时,Raw格式的数据依次通过缓存 1,R44,R43,R42,R41,R40;缓存 2,R34,R33,R32,R31,R30;缓存 3,R24,R23,R22,R21,R20;缓存4,R14,R13,R12,R11,R10;缓存5,R04,R03,R02,R01,R00缓存送入算法处理单元,然后利用插值算法得到最终的RGB图像。其中BufferX为行缓存器,RXX为像素缓存器。

本文使用的探测器是DALSA公司的一款全色CMOS探测器,分辨率为2352×1728,它采用的输出形式是奇偶行同时输出,这样,在做CFA插值时就有两种方案可供选择,一种是将探测器输出的Bayer格式图像数据进行缓存,然后再构成图1所示的数据流结构进行插值,输出的彩色图像不需要缓存就可以直接输出显示或存储;另一种是直接将探测器输出的数据构成图1的数据流结构,因为是同时输出2路,所以,要缓存6行然后同时输出2行彩色图像,但是,这样就要对彩色图像进行缓存、拼接,然后才能输出。两种方案各有优劣,本文选用第一种,即将Bayer格式图像数据缓冲,具体的过程如图2所示。

图2中,因为CMOS探测器是同时输出2行图像数据,又SDRAM是单口输入输出存储器,所以不能在同1片SDRAM的2个bank进行乒乓操作,而只能使用2片SDRAM进行存储,其中,图像的奇数行存储在SDRAM A(a),偶数行存储在SDRAM A(b)。又因为1帧图像的大小为2352×1728×16 bit,而本设计使用的SDRAM容量为8388608×16 bit×4 bank,所以1片SDRAM的1个bank就可以存储半帧图像,这样读写都在1个bank进行,简化了设计。当1帧图像在SDRAMA存储完毕后,开始将输出的下1帧图像的两路图像数据以同样的方式存储在SDRAM B中,在写SDRAM B的同时对SDRAM A(a)和SDRAM A(b)进行乒乓读操作,将奇数行和偶数行拼接顺序输出,由于图像输出的帧频是20 f/s(帧/秒),而顺序读完一帧只需要40 ms,所以,读时不会造成数据丢失。当第二帧数据全部写到SDRAM B后又开始写SDRAM A。同时,对SDRAM B进行乒乓读操作,顺序输出图像数据,如此循环,就完成了探测器数据顺序的改变,构成图2的数据流结构,满足了彩色插值的要求。

2 Bayer插值算法研究

目前,CFA插值算法很多,但大部分算法却因为过于复杂而只能停留在计算机仿真验证阶段,本文结合文献[2],设计了一种易于硬件实现的线性Bayer插值算法。由图像原理可知,任何一幅图片的红、绿、蓝三颜色之间的信息是相互关联,而不是单独存在的,这就意味着可以用这种关联关系来获取图片的颜色信息,通常是用梯度关系来操作,文献[3]使用了两个通道之差,即G通道分别减去R和B通道,来增加通道之间的相关性,再用相减得到的结果进行插值,由于这种方法考虑了各通道间的关联,因此插值结果伪彩色大大减少。本文也是采用与文献[3]类似的通道相关梯度法,具体设计如下:

以Bayer格式中的R为例,定义R0处的梯度为

这样就可以得到R0处的G分量为

将式(1)代入式(3),即得到R0处的G分量为

同理,可得到R0处的B分量为

这样,R0处的R,G,B三分量都已经得到。将该算法应用到Bayer格式图像的其他分量,就可以得到整幅图像的R,G,B分量,从而输出彩色图像。由于算法中的修正因子是按照维纳逼近计算的,所以,计算出的结果具有最小的均方误差,这样得到的插值效果也就更佳。图3为本文使用的算法和双线性插值算法的效果比较,本文算法不仅3个通道的PSNR均比双线性插值算法高3 dB以上,而且视觉效果更胜一筹。

图3 两种算法的插值效果比较

除了本文所用的插值算法效果比较好,对式(4)和式(5)分析,不难看出,算法在计算方面仅有加减和移位计算,这就特别适合硬件设计,特别是适合硬件资源丰富的FPGA来实现。设计上只要有图1所示的数据顺序再结合流水线技术就能将算法实现,实时地输出彩色图像。

3 SDRAM设计

SDRAM是一种应用广泛的存储器,具有容量大、数据读写速度快等优点,特别适合那些需要海量存储的应用领域[4]。SDRAM内部存储单元由若干个相当于矩阵的bank组成。而行地址就是矩阵的行元素,列地址相当于矩阵的列元素。这样,只要给定了bank的地址,就可以通过行地址和列地址的选取唯一地指定一个存取单元。

SDRAM和别的存储器不同的是,所有行在系统初始化后都处于非活动状态,要进行读写操作就必须先激活相应的行。在激活命令执行完毕,并经过从行地址选择到列地址选择的延迟之后,就可以根据read/write信号决定SDRAM将要进行读操作还是写操作了。

SDRAM控制逻辑主要由3部分组成:主控制模块、信号产生模块和数据通路模块。主控制模块通常由两个状态机构成,它是SDRAM系统设计的核心模块,主要是根据外部控制信号来改变SDRAM当前的工作状态;信号产生模块则根据SDRAM的工作状态产生SDRAM需要的行列地址和工作信号;而数据通路模块主要是负责控制逻辑对SDRAM的数据进行写入或读出。

本设计除了以上基本注意点,还根据图像连续输出的特点,让SDRAM工作在满页模式状态下,由于使用的SDRAM每次读写的长度仅为1024×16 bit,而探测器输出的图像数据1行的长度却是2352×16 bit,所以,SDRAM每读写完1行1024×16 bit后,要进行一次Burst Stop操作,然后对SDRAM进行刷新,再读写下一行,这样,探测器输出的每1行要占用SDRAM中的3行。由于数据在读写的过程中有Burst Stop等操作的存在,而探测器输出的每行图像数据又是连续的,所以,两者之间就存在速度的不匹配,这就要用到FIFO。当然,这里FIFO的深度不是很深,仅仅用来缓冲两次Burst Stop和刷新操作时间内的数据即可,设计时当状态是Burst Stop和刷新状态时,就将FIFO读使能信号去掉,其他状态再恢复读使能。这样,探测器的数据就能完整无误地在SDRAM中写入和读出了。

显然,只需要一套SDRAM控制程序,结合图2的乒乓操作就可以按照图1的数据流要求输出数据了。

4 试验结果分析

基于上述设计思路,FPGA使用Xilinx公司的XC6SLX150,SDRAM使用尔必达公司的EDS5116,探测器使用DALSA公司的Bayer格式彩色CMOS探测器设计的某型相机,实时输出的彩色图像如图4所示。由结果可以看出,图像伪彩色较少,边缘较锐利,整体效果优于双线性算法等其他线性插值算法,甚至要好于某些非线性算法,证明了设计的可行性。

图4 实时输出的彩色图像

5 结论

本文提出了一种基于大容量存储器的Bayer格式图像梯度插值算法硬件设计方案。整个系统由一片FPGA控制,其中,针对特定探测器图像数据输出格式,使用了4片SDRAM并结合乒乓操作,完成了探测器数据格式的改变,满足了插值算法对数据流格式的要求,试验证明,本系统能够实时、稳定输出高质量的彩色图像,目前,该系统已成功应用于某工程项目之中。

[1]BAYER B E.Color imaging array:U.S.,3971065[P].1975-07-20.

[2]MALVAR H S,HE L W,CUTLER R.High-quality linear interpolation for demosaicing of Bayer-patterned color images[C]//Proc.IEEE International Conference on Acoustics, Speech and Signal Processing.Quebec,Canada:IEEE Press,2004:485-488.

[3]PEI S C,TAM I K.Effective color interpolation in CCD color filter arrays using signal correlation[J].IEEE Trans.Circuits and Systems for Video Technology,2003,13(6):503-513.

[4]雷海军,刘鹏,陈战夫,等.视频格式转换系统中DDR控制器设计[J].电视技术,2011,35(4):22-24.

猜你喜欢

彩色图像数据流插值
汽车维修数据流基础(上)
汽车维修数据流基础(下)
基于FPGA的实时彩色图像边缘检测
基于Sinc插值与相关谱的纵横波速度比扫描方法
基于专家模糊技术的彩色图像对比度增强方法
基于最大加权投影求解的彩色图像灰度化对比度保留算法
一种改进FFT多谱线插值谐波分析方法
基于四项最低旁瓣Nuttall窗的插值FFT谐波分析
基于数据流聚类的多目标跟踪算法
基于颜色恒常性的彩色图像分割方法