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 分量的最大值。
根据上述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
3 算法效果对比
4 FPGA实现
首先根据计算公式,在FPGA中要依次统计RGB三通道的均值、最大值,并计算均值和最大值的平方。其次,要根据方程组分别解出R和B通道的2个校正系数u和v。最后,按照校正公式将u、v代入计算出校正后的R和B。
针对1280*1024,8bit图像的自动白平衡算法模块资源消耗如下:
需要算法FPGA源码请私信。