• 黑白多帧相机设置白平衡原理


    白平衡,字面意思即白色的平衡。白平衡是描述显示器中红、绿、蓝三基色混合生成后白色(无彩色)准确度的一项指标。

     

    如果用白平衡准确的彩色相机拍摄白纸或者灰板(不能过曝),生成的图像不应该存在偏色,而应该是纯粹的灰色。灰色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蓝始终成立。)

     

    值得注意的是,如果改变了光圈大小、相机增益、伽马值、光源亮度中的任意一个,那么白平衡设置就需要重新做。

     

  • 相关阅读:
    js 字符串中提取ip地址
    echart lengend 选中事件
    反射与注解
    clientX、clientY、offsetLeft、offsetTop、offsetWidth、offsetHeight
    图片放大和缩小
    拖拽文字辅助线对齐
    文字随着鼠标移动而移动(文字拖拽移动)
    Java 数组转 List 的三种方式及使用场景
    【Docker(二)】Docker镜像、容器、仓库命令详解
    【Docker(一)】走进Docker的第一步
  • 原文地址:https://www.cnblogs.com/xh6300/p/16220995.html
Copyright © 2020-2023  润新知