白平衡,字面意思即白色的平衡。白平衡是描述显示器中红、绿、蓝三基色混合生成后白色(无彩色)准确度的一项指标。
如果用白平衡准确的彩色相机拍摄白纸或者灰板(不能过曝),生成的图像不应该存在偏色,而应该是纯粹的灰色。灰色RGB图像的R、G、B通道图是一模一样的,如下:
白 色:255, 255, 255
中性灰:128, 128, 128
黑 色:0, 0, 0
彩色相机的白平衡设置很简单,在相机端就可以一键设置。
那么黑白多帧相机如何设置白平衡呢?有些人可能大吃一惊:黑白相机也有白平衡??
以黑白三帧相机为例,它是设计了一种特殊的三色光源,依次曝光发出红光、绿光、蓝光,曝光的同时,黑白相机连续拍摄3次。
这三张“灰色”的黑白图通过图像算法合成,就可以合成一张RGB彩色图像。如果黑白三帧相机用这种方式拍摄灰板,那么最终合成的RGB“彩色图像”看起来应该也是灰色的,而不应该存在偏色。
灰色的RGB图(包括白色)是由红、蓝、绿三通道图以等比例组成的,所以对灰色物体拍照时,红光、绿光、蓝光单独拍摄得到的黑白图的灰度值应该完全一样,这就是黑白多帧相机白平衡的原理。
以红通道图为例,红通道图的灰度值与什么有关呢?
光圈大小、相机增益、伽马值、曝光时间、光源亮度。
一般来说,拍摄三帧图像时,光圈大小、相机增益、伽马值都是相同的。从控制变量的角度来看,还需要锁定一个参数——所以一般把光源控制器的红光、绿光、蓝光的光源亮度档位都设置成相同的。
插一句:公司委托供应商定制的光源控制器,在光源亮度档位相同时,红光、绿光、蓝光拍摄灰板生成的图像的灰度值基本相同,这是个不错的特性。
那么黑白三帧相机设置白平衡的的关键就变成了:锁定红、绿、蓝光的光源亮度时,如何计算出红绿蓝光对应的曝光时间,使得生成的三张黑白图的灰度值相等。
假设三张黑白图的灰度值=20时,红、绿、蓝光的曝光时间分别应该是多少呢?
假设三张黑白图的灰度值=60时,红、绿、蓝光的曝光时间分别应该是多少呢?
假设三张黑白图的灰度值=200时,红、绿、蓝光的曝光时间分别应该是多少呢?
不断改变曝光时间,生成的黑白图的灰度值也会不断变化,假设它们之间存在线性关系:Y = KX + B,如下图所示。(事实上,确实存在这种近似的线性关系)
图中X轴是曝光时间,Y轴是图像灰度值。红绿蓝三根线分别代表红光、绿光、蓝光的曝光时间与灰度值的关系。
具体操作:可以单独用红光先曝光20次,收集20个图像的灰度值,每次曝光时间逐渐增加。然后用20个灰度结果值拟合出红色这条线段。由于在太暗和太亮的情况下,点的直线拟合性不好,所以上图中上下各有一条横线,代表灰度值在上下线范围以内的线段才是有效的。
对蓝光、绿光进行同样的操作,这样就有了红绿蓝三根线。
这三根线可以用方程表示:(Y = KX + B)
Y红=K红* X红 + B红 (1)
Y绿=K绿* X绿 + B绿 (2)
Y蓝=K蓝* X蓝 + B蓝 (3)
Y代表灰度值,X代表曝光时间,K和B是直线方程的系数。
在校正过程中,对着白纸或者灰板。红绿蓝光分别曝光20次,通过最小二乘法就能拟合出直线,得到系数K和B的值。
建议是使用色卡中的灰色块,用白色块很容易图像就过曝了。(或者说更推荐使用灰板,而不是白纸)
做完校正后,六个系数K、B可以保存在一个文件中。以后软件在设置曝光时间时就先读入这个文件,只要设置一种光源的曝光时间,另两种光源的曝光时间就能自动计算出来,且保证得到的图像色彩逼真。(因为当合成图的白平衡准确时,在不同的曝光时间组合下,Y红=Y绿=Y蓝始终成立。)
值得注意的是,如果改变了光圈大小、相机增益、伽马值、光源亮度中的任意一个,那么白平衡设置就需要重新做。