基于FPGA的自动白平衡算法实现

1 概述

       在机器视觉中,白平衡(White Balance)是很多彩色成像设备的必备功能。白平衡按照校准方式可分为自动白平衡和手动白平衡。

       首先,白平衡的提出是由于不同环境下不同的光源具有不同的色温,即不同的光谱分布。也就是说在不同光源的光照条件下彩色图像传感器所拍摄的“白色”在人眼看来是不同的。这是由于传感器的光谱响应特性是固定的,在不同色温下会产生色偏。而人眼具有颜色恒常性,可以避免光源变化带来的颜色变化。白平衡就是要校正图像传感器与人眼之间的颜色偏差,使传感器的色彩符合人眼的视觉特性。

       白平衡一般通过调节传感器输出图像R、G、B三个通道的增益系数来实现。

       手动白平衡一般是针对特定色温的光源用白色物体进行标定,计算出3个增益系数。

       而自动白平衡(Auto White Balance),就是根据所拍摄物体的颜色分布自动计算并调节R、G、B三个通道的增益系数。 

       有一些CMOS图像传感器带有自动白平衡功能,可直接使用。对于没有自动白平衡功能的CMOS传感器,就需要在接收端设计开发相应的自动白平衡算法,来动态控制CMOS的R、G、B三通道增益系数。

       目前,很多CMOS传感器使用FPGA芯片作为图像接收端。本文介绍一种可在FPGA中实现的自动白平衡算法,该算法平衡了算法的复杂度与成像效果,可实时计算每幅图像的RGB增益系数,并应用于高速成像领域。

       算法原理来自一篇论文:

Combining Gray World and Retinex Theory for Automatic White Balance in Digital Photography. Edmund Y. Lam, Member, IEEE

2 Gray World Retinex自动白平衡算法

       该方法其实是在QCGP算法上做了一些改进。关于QCGP算法此处不作介绍,可搜索相关博客文章。QCGP算法的计算公式如下,以R通道为例。

       设Rave、Gave、Bave为图像中RGB分量的均值,Rmax、Gmax、Bmax各为RGB 分量的最大值。

基于FPGA的自动白平衡算法实现_第1张图片

基于FPGA的自动白平衡算法实现_第2张图片

       根据上述2组公式得出2个校正系数u和v,最后经过白平衡校正后的Rwb为:

       同理,G和B通道也可通过上述公式计算。

       Gray World Retinex算法在此基础上进行改进,不对G通道进行校正,只对R和B通道进行校正。以R通道为例,计算公式为:

基于FPGA的自动白平衡算法实现_第3张图片

       根据上述公式得出2个校正系数u和v,最后经过白平衡校正后的Rwb为:

       同理,B通道也可通过上述公式计算。

       显然,此算法利用了人眼对于绿色最为敏感的特性。

3 算法效果对比

基于FPGA的自动白平衡算法实现_第4张图片

基于FPGA的自动白平衡算法实现_第5张图片

基于FPGA的自动白平衡算法实现_第6张图片

4 FPGA实现

       首先根据计算公式,在FPGA中要依次统计RGB三通道的均值、最大值,并计算均值和最大值的平方。其次,要根据方程组分别解出R和B通道的2个校正系数u和v。最后,按照校正公式将u、v代入计算出校正后的R和B。

       针对1280*1024,8bit图像的自动白平衡算法模块资源消耗如下:

       需要算法FPGA源码请私信。

你可能感兴趣的:(#,机器视觉,fpga开发,fpga,机器视觉,白平衡,isp,FPGA图像处理,matlab)