文献标识码:A
文章编号: 0258-7998(2010)08-0055-05
在不同的光源或者天气条件下光谱特性是互不相同的,这被称之为色温。从物理意义上讲,人们看到的物体之所以呈现出特定的颜色,是因为光线照向物体时,物体所反射的光在人眼视觉系统中呈现出这种特定的颜色。也就是说,能看到的物体颜色不仅取决于其反射特性,而且还和照向物体的光线有关系,如一张白纸在钨丝灯下会偏橘黄色调,在荧光灯下会偏绿,而在日光下会有点偏蓝。自动白平衡的目的就是自动调整不同色温光照下图像的三基色分量的比例,使其看上去和标准光源下拍摄的颜色一致。 (3)色温校正 目前彩色CCD相机,分为3CCD全色相机和单CCD Bayer彩色相机两大类。全色相机中,光线被分光系统分为R、G和B三色光后,分别投向三块CCD,这样在信号输出时就可以获得每个像素的三基色信息。Bayer格式的CCD感光表面覆盖有如图3所示的CFA,CFA上每个格点仅允许通过一种颜色分量,使每个感光单元只产生一个分量的灰度值。要获得每个像元的[r,g,b]信息,需要用到色彩空间插值。 Bayer CCD相机与全色相机相比,有价格相对便宜、要求进入光线的照度低、输出帧频高等优点,被广泛应用于工程实践中。本文所用的Bayer CCD相机有效像元数为1 024×1 024,帧频为30 Hz,像素时钟为45 MHz,像素位深度为8 bit,以Camera Link协议输出。 写SRAM模块根据帧、行同步信号、像素时钟以及行、列偏移量,获得有效像素的起止,把像素数据存入SRAM。白平衡处理过程就在写SRAM模块中完成。“双向开关”由FVAL_In信号触发,起到信号线切换的作用,完成乒乓操作。当写SRAM模块把数据写入SRAM_A的同时,读SRAM模块从SRAM_B读取数据,当写SRAM模块把数据写入SRAM_B的同时,读SRAM模块从SRAM_A读取数据。读SRAM模块读取SRAM中的像素数据并以Camera Link 协议的形式传出。从整体效果上看,数据能源源不断地流过系统。 电路中色温校正模块,色温统计模块和增益计算模块连接形成一个负反馈回路,能根据场景色温的变化,实时修正增益系数,使修正后的图像稳定在白平衡状态。 时间分析:相机输入4行数据的时钟周期数至少为1 144×4=4 576 T,上述过程操作时间为:1 024/4×12=3 072 T,所以上述转换过程能在色温校正模块填满半页DPRAM的时间内完成,且不会产生访问DPRAM冲突。在满足时间的条件下,可以寻址更多的点,采用更复杂的插值方法做转换。 由图9、图10可以看出荧光灯下的物体偏绿,且G通道直方图高灰度级的像素明显多于其他通道。处理后的图像视觉效果较好,各通道像素灰度级趋于均衡。通过实验发现,处理后的图像比原图偏亮,这可以通过前级调光系统实现更好的处理效果。
目前在工程上应用的自动白平衡算法主要有全局白平衡算法和局部白平衡算法两大类。全局白平衡算法以“灰度世界法”GWM(Gray World Method)为代表,其认为所拍摄的图像有丰富的色彩变化,R、G和B三色分量的统计平均值应该相等,并以该均值作为白平衡校准的依据。局部白平衡算法以“镜面法”PRM(Perfect Reflector Method)为代表,该算法认为一幅图像中最亮像素点对应于光滑或者镜子表面的物体,这样的像素点最大限度反映了照射光线的光谱信息,对这部分点做色彩信息统计并作为色温校正的依据。全局白平衡算法有较大的局限性,当场景过亮、过暗,或者色彩比较单一时,算法几乎完全失效。局部白平衡算法的关键在于寻找参考白点,而在户外拍摄的过程中,总是可以找到参考点的,文献[1]、[2]、[3]介绍了几种能精确寻找参考点的方法。
在工程上,需要对帧频较高的原始视频图像做实时的白平衡恢复,而目前的自动白平衡方法,算法复杂,计算时间较长,难以实现对视频流的实时处理。本文就针对以上问题,讨论了一种在FPGA上实现的、对视频流实时白平衡处理的自适应方法。
1 自动白平衡算法
在FPGA设计的过程中,采用局部白平衡的方法,主要有3个基本步骤:
(1)色温估计
色温估计是自动白平衡中最重要的一步,根据算法估计当前场景的色温,给增益计算提供依据。文献[1]利用“镜面法”,严格控制Y、Cb和Cr三分量的关系,在YCbCr空间定义了一个六面体的区域,凡是落入该区域的点都可以作为参考白点。文献[2]提出先对图像的R、G和B三个分量分别作直方图均衡化,然后将直方图均衡化后的图像转换到YCbCr空间,对转换后的Y分量进行边沿检测,在边沿包含的各个区域中寻找满足文献[1]条件的区域,作为参考白点区域。选择符合一定条件的区域而不是选择符合一定条件的点,可以提高参考点选择的准确性,但是直方图均衡化处理本身存在灰度级“简并”现象,这也是该文算法的不足。文献[3]直接在原图像的YCbCr空间,用LoG算子对Cb和Cr分别作色度边缘提取,获得的色度边缘即为参考白点区域。综合考虑参考点选择的准确性和电路设计的难易程度,本文选用文献[1]的方法选择参考点。
(2)增益计算
增益计算是在色温估计的基础上,求取色温修正系数的过程,主要有3种方法:
①查表法[1]。事先统计出一张表,记录不同的色温所对应的通道增益,具有速度快的优点。但由于表的容量有限,不能实现各种色温情况的连续调节。
②平均值法。对于参考白点区域有R=G=B,即Cb和Cr的分量为零。得到各通道的增益如下:
③迭代法。设G通道的增益为常数1,R和B通道的增益分别为?自,?滋。迭代法根据参考白点区域Cb和Cr的关系,通过不断地调节?滋和?自的值,便可得到各通道最终增益值。文献[1]中提到的方法,在场景出现大量色块时,容易出现色彩振荡现象。本文在其基础上做出了如下改进,增加对白点数目的判断:判断是否WhitePointNum>N,只有场景的白点数目大于阈值N时,才认为色温估计有效,这样能避免色温估计无效时对修正系数的误操作导致的色彩振荡。增加了对当前色温的判断:判断是否|Cb|+|Cr|
在获得各颜色通道的增益量后,按照下面的等式对原图像所有像素进行调整。
上述3种增益计算方法中,平均值法和查表法多用于对单张图片处理,迭代法用于对连续图片序列的处理。迭代法获得的修正系数,用于下一帧图像的色彩校正,每次色温估计都是在色彩校正的基础上进行的。
2 系统硬件结构
系统硬件结构如图2所示。
Camera Link是专门为数字摄像机提出的一种工业级的高速数据连接与传输协议。采用LVDS(Low Voltage Differential Signaling)技术,使用较少的连线,却能达到理论上最大1.923 G b/s的传输速率,并且传输距离比普通的传输方式更远。Camera Link标准中包含Base、Medium、Full 3种规范,其中Base规范只需要一个26针的连接器即可实现。26 bit信号中包括:5对图像数据信号(X0,X1,X2,X3,Xclk),X0~X3传递图像数据,Xclk传递像素时钟;4对相机控制线(CC1,CC2,CC3,CC4),相机制造商可以自由定义各控制信号的功能以满足其特殊产品;2对异步串行通信信号线(SerTC,SerTFG),可用于相机和图像采集卡之间的异步串行通信;2对屏蔽线,直接接地即可。在本文所述的系统只需要用到5对图像数据信号线。
本文采用的Camera Link协议芯片为DS90CR288A和DS90CR287,最高工作频率为85 MHz,能满足系统设计要求。DS90CR288A把接收到的4路LVDS数据信号和1路LVDS时钟信号,分别转换为28 bit的CMOS/TTL并行数据和像素时钟信号。4路LVDS数据线能传递28 bit数据,传递频率是LVDS时钟信号的7倍,最高可达595 MHz。28 bit数据中包括24 bit像素信号,1 bit帧同步信号(FVAL)、1 bit行同步信号(LVAL),1 bit数据有效信号(DVAL)和1 bit保留信号。在FPGA设计中,只需要应用帧、行同步信号,像素时钟和有效的像素信号即可完成对图像数据的处理。DS90CR287的工作过程和DS90CR288A相反,把数据和同步信号转换为LVDS信号传递出去。
系统用的主芯片为Altera公司的Cyclone III系列芯片EP3C16Q240C8,其具有丰富的逻辑资源和触发器资源,内嵌大量乘法器和丰富的RAM资源,特别适合时序操作和大量数据的并行运算。系统还用到容量2 MB的2块SRAM,最短访问周期10 ns,可以把处理后的图像数据存于其中,供板上其他系统使用。
3 EDA设计
FPGA的设计采取自顶向下的模块化设计方法,系统的一级框图如图4所示。
写SRAM模块中白平衡过程如图5 所示。
在色温统计的过程中没有必要对全平面像素做统计,为了编程和设计的方便,本文在每个4×4的块中选两点做色温统计,如图3中的(2,1)和(1,2)两个点。在色彩空间转换之前需要进行色彩插值,恢复待测像素的三原色数据[r,g,b],用线性插值法恢复的算法如下。
恢复每一个像素的[r,g,b]值,需要用到相邻的3×3范围的像素值,然而相机数据是逐行依次输出的,所以必须暂存至少3行的像素值。本文引入一块8 KB的DPRAM,可以存储8行的像素信息。色温校正模块把数据写入外部SRAM的同时也把数据存入了内部的DPRAM,存满了8 KB的空间后,从地址0重新开始写入。把DPRAM分为上下两半页,每存好半页后, Bayer转RGB模块便从刚存的半页中寻址,读取数据,进行插值转换。
用Quartus II设计的DPRAM宏模块,如图6所示。可以看出输入DPRAM的信号都是在时钟上升沿锁存的,输出不锁存。访问DPRAM以及完成插值过程可用“12状态法”实现,如图7所示。实验仿真图,如图8所示。
色温统计模块,在接收到转换信号后,完成RGB到YCbCr色彩空间转换,并把符合式(5)的点的Cb和Cr值累加,在一帧末的时候,完成除法运算,输出满足条件点的Cb和Cr的平均值以及Control信号。
4 实验结果
在试验的过程中参数(χ,α,β,γ,φ,M,N)分别设定为(120,30,30,50,100,8,2000)。图9为在荧光灯下的偏绿图像及其各通道直方图,图10为硬件白平衡后的图像及其直方图。图11、图12是户外拍摄图像及恢复的情况。
本文分析了目前的自动白平衡算法,结合EDA设计的特点,对迭代法进行了改进,能有效抑制色彩振荡。系统能根据场景色温的变化,实时调整色温修正系数,恢复场景的真实色彩。结合当前相机常用的Camera Link接口,在一块芯片上实现了图像预处理,减小了CPU运算负担,系统功耗小,应用前景较好。
参考文献
[1] 周荣政,何捷,洪志良.自适应的数码相机自动白平衡算法[J].计算机辅助设计与图形学学报,2005,17(3):350-353.
[2] 张钰,姚素英,胡燕翔.一种基于边沿检测的图像自动白平衡方法[J].光电子·激光,2008,19(6):804-807.
[3] 赵全友,潘宝昌.改进的LoG边缘自动白平衡算法[J].计算机应用研究,2009,26(2):775-777.
[4] 张静.基于DSP和FPGA的数字图像采集与处理系统的实现[D].西安电子科技大学硕士论文,2006.
[5] 沈斌,张多利,何亚军.一种低功耗色彩空间转换模块的FPGA实现[J].计算机工程与应用,2008,44(22):84-86.
[6] 彭俊,高伟.基于FPGA的Bayer图像彩色恢复快速算法研究及实现[J].科学技术与工程,2007,7(13):3084-3086.
[7] 张向飞,张刚,程永强.基于FPGA的高分辨率贝尔CFA插值算法的设计与实现[J].太原理工大学学报,2006,5(专辑):12-15.
[8] 赵全友,潘保昌,郑胜林.复杂光照下的两步法颜色恒常性增强[J].光学精密工程,2009,17(4).