在机器视觉中,白平衡(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
该方法其实是在QCGP算法上做了一些改进。关于QCGP算法此处不作介绍,可搜索相关博客文章。QCGP算法的计算公式如下,以R通道为例。
设Rave、Gave、Bave为图像中RGB分量的均值,Rmax、Gmax、Bmax各为RGB 分量的最大值。


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

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

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

同理,B通道也可通过上述公式计算。
显然,此算法利用了人眼对于绿色最为敏感的特性。
该算法的matlab程序如下:
- function [I1] = f_awb_retinex(I0)
- % Combining Gray World and Retinex Theory for Automatic White Balance in Digital Photography
- R0 = I0(:,:,1);
- G0 = I0(:,:,2);
- B0 = I0(:,:,3);
- [m,n] = size(R0);
-
- %找到RGB最大值
- Rmax = double(max(max(R0)));
- Gmax = double(max(max(G0)));
- Bmax = double(max(max(B0)));
-
- R2max = (double(Rmax))^2;
- G2max = (double(Gmax))^2;
- B2max = (double(Bmax))^2;
-
- %计算RGB均值
- Rave = double(mean(R0(:)));
- Gave = double(mean(G0(:)));
- Bave = double(mean(B0(:)));
-
- R2ave = (double(Rave))^2;
- G2ave = (double(Gave))^2;
- B2ave = (double(Bave))^2;
-
- %反解参数u'v'即xr1,xr2,xr1,xr2
- Ar = [R2ave,Rave;R2max,Rmax];
- Ab = [B2ave,Bave;B2max,Bmax];
- B = [Gave;Gmax];
-
- xr = Ar\B;
- xb = Ab\B;
-
- %计算R, B分量白平衡
- for i=1:1:m
- for j=1:1:n
- R1(i,j)=xr(1)*(double(R0(i,j)))^2 + xr(2)*double(R0(i,j));
- B1(i,j)=xb(1)*(double(B0(i,j)))^2 + xb(2)*double(B0(i,j));
- end
- end
-
- R1 = uint8(R1);
- B1 = uint8(B1);
- G1 = uint8(G0);
-
- %合成
- I1(:,:,1) = R1;
- I1(:,:,2) = G1;
- I1(:,:,3) = B1;
-
- end



首先根据计算公式,在FPGA中要依次统计RGB三通道的均值、最大值,并计算均值和最大值的平方。其次,要根据方程组分别解出R和B通道的2个校正系数u和v。最后,按照校正公式将u、v代入计算出校正后的R和B。
针对1280*1024,8bit图像的自动白平衡算法模块资源消耗如下:

需要算法FPGA源码请私信。