ISP算法 | 白平衡(White Balance)

一、什么是白平衡

先说白平衡的作用,白平衡是为了让图片的颜色符合人眼的视觉感知。我们的视觉系统具有自动白平衡的能力,这种能力称为色彩恒常性(Color Constancy),它能补偿环境中的照明,从而使物体被视为相同的颜色。比如图1中的这个苹果,在不同的光照条件下,苹果的颜色其实是不同的,但是人眼能把苹果自动补偿成红色。

3a69d4e8ebd7426ebc7c2bd3389d8f96.jpeg

图1 人眼自动白平衡

可是图像传感器是没有自动白平衡这个功能的,在图2所示的情况中,从左往右分别是钨丝灯、荧光灯和太阳光下拍摄的图片,会发现在钨丝灯下杯子是偏黄色的,荧光灯下杯子是偏蓝色的,而太阳光下杯子才差不多是白色的。

bae2485b70434c6d8ffbbac702eae3d6.png

图2 不同光源下的效果图

因此白平衡的目标是把不同光源下的白色物体都矫正成人眼认知中的白色,让图像中不存在色偏。但为什么是白色?而不是黄色或者是蓝色呢?这是因为人眼对其他颜色的色度信息没有白色敏感。图2中还有一个柠檬,无论在什么光源下,柠檬都是黄色的,可以简单的理解为,如果选定黄色作为色彩平衡的目标,那么柠檬的黄色叠加光源的颜色,此时就很难分辨出光源的真实颜色了,但是如果选择白色,这个问题就不存在了。

可以这么理解,由于白色不含任何色度信息,其显色效果最佳,因此它为被选定为基准色。如果选择黄色或者是蓝色为基准色,那么在不同的光源下,基准色会存在误差,光源的颜色就很难区分出来了,就更谈不上矫正了。白平衡对图像矫正后的结果如图3所示。

ea284e762eec430b8960eb9b25c8ae30.png

图3 经过白平衡处理后的结果

也不是所有的色偏都需要被白平衡矫正,有时候色偏会让拍摄的图像呈现独特的氛围感,比如图4所示的这幅图像,给它橘色和蓝色两种不同的光源,得到的图像如图5所示,在暖光源的条件下,图像偏红,感觉更温馨,在冷光源的条件下,图像偏蓝,感觉更清冷。

87362928be72416fb73b2d9bbfcf83c5.jpeg

图4 暖光源和冷光源

6784d70c916a42a6a9ab1d36622a0906.jpeg

图5 不同光源下的图像

  

二、白平衡和色温的关系

这部分要是展开说会牵扯出很多内容,需要从SPD(光谱功率分布)和CIE(国际照明委员会)开始讲起,完全够我再写一篇,但是不讲色温又没办法讲透白平衡,因此就简单介绍一下。

1. 舌形图

大概就是有个叫做国际照明委员会的组织(CIE),他们研究了RGB三色光的各种功率分布组合,通过一系列复杂的数学变换得到了一个舌形图,就是图6这个被广为流传的马蹄形的图。

7568352ece3e4e1296710f001f44f1a0.png

图6 CIE Yxy色度图

简单解释一下这个图,我们知道可见光的范围大概是380nm~720nm,在这个波段中的可见光就是我们从小就会背的“赤橙黄绿青蓝紫”,但是自然界中这些光是混在一起的,它们混合出的光是什么颜色的呢?我们无法凭想象和别人描述一束光或者是一种颜色(要考虑一下色盲同学的感受),于是伟大的CIE把它显示在了舌形图上,我们能看见380nm~720nm围着边缘饶了一圈,圈内就是光组合出的颜色,有了这个图可见光就变得可以描述了。

图中有一个圈出来的点E,它被描述为X=Y=Z,一个能量(光谱是有能量的)相等的地方,也是CIE XYZ的“白点”。所以白色其实被定义出来的,其实颜色也是被定义出来的,到后面的颜色空间感受会更加深刻。

 

2. 色温——颜色和温度是怎么扯上关系的?

介绍一下黑体(不是黑色的物体),黑体(black body)是一个物理学中的理想化的物体,它能够吸收外来的全部电磁辐射,并且不会有任何的反射与透射。黑体在受热后,逐渐由黑变红,转黄,发白,最后发出蓝色光(试想一个火炭从点着到温度进一步升高),在加热过程中,黑体发出的光所含的光谱成分,就称为这一温度下的色温(Color Temperature),色温单位开尔文(开尔文Kelvin是温度的计量单位,符号K)。

德国物理学家普朗克(Max Planck)于1900年提出了普朗克定律,即在任意温度T下,从一个黑体中发射出的电磁辐射的辐射率与频率彼此之间的关系,这个关系如图7左下角所示,经过一个数学运算它可以被表示在舌形图上,这条曲线就是色温的“普朗克轨迹”。

5b5d59f9a9d14302b2ecfb3b0ca965f4.png

图7 色温和舌形图

至此,颜色和温度终于扯上关系了。注意,光源的色温与光源本身的温度是两回事,通常两者是不相同的。另外人对色温的喜好主要是因为瞳孔的色素沉淀不同,根据调查研究显示,黄种人合适的色温在9300K,白种人在6500K,所以说亚洲人比较喜欢偏蓝色的白色,欧洲人则比较喜欢偏黄色的白色。

图8为开尔文色温表,比较常见,在很多文档里面都出现过,就是图7的曲线用更容易理解的方式展示出来。

d95c804ccdf6494585e77cfd688d1fdb.png

图8 开尔文色温表

    色温这个概念不常用,但是现实生活中无处不在,网上有一种折叠摄影棚(图9),它本质上就是一个可以控制色温的灯箱,商家可以通过控制光源让拍摄的商品呈现不同的氛围感,这就使得一些商品一旦脱离特定的灯光,就显得很普通,买家大呼“上当”,买家秀和卖家秀的矛盾一定程度上是这样产生的。

ca9c91c5ff0e4b3b8f262c48c96a2f30.jpeg

图9 折叠摄影棚

 

​​​​​​​三、白平衡算法

白平衡的目标是颜色矫正,旨在确保图像中的颜色在不同光照条件下保持一致性。白平衡算法很多,介绍三种比较常见的白平衡算法,另外找了一幅图像尝试了一下白平衡的效果。

1. 完美反射算法(White Patch Algorithm)

White Patch假设图像中RGB三通道的最大响应是由场景中的白色表面引起的,因此RGB通道中的最大值就被当做图像的光照颜色,该算法又被称为Max RGB算法,算法流程如下:

(1)计算三通道各自最大值r_max、g_max和b_max。

(2)计算增益r_k=max/r_max,g_k=max/g_max,b_k=max/b_max,这里的max可以直接是图像的最大值,或者g_max。

(3)对原图三个通道分别乘上增益r_k、g_k和b_k。

当场景中不存在一个白色像素点或者是三通道反射率相同的点(灰点)的时候,该算法的表现就会比较糟糕,此外,如果场景中存在过曝或特别亮的反光,也做不出好的结果,这个算法最大的优点就是简单高效。

    按照上述步骤试了一下白平衡的效果,我挑选的这幅图像比较简单,没有过曝点,得到的效果如图10所示。

29da6fadce0f49c59699513863aa15a2.jpeg

图10 White Patch白平衡效果

    这个效果差强人意吧,只能说矫正了部分色偏,但是没有完全矫正过来,有效果,但是效果没那么理想,完美反射算法并不完美,需要改进。

 

2. 灰色世界算法(Gray World Algorithm)

灰色世界基于这样一种假设:对于一幅有大量色彩变化的图片,RGB三个分量的平均值趋同于同一个灰度值Gary,即灰度世界法假设自然界景物对于光线反射的平均值在总体上近似为“灰色”。通过这一假设,可以对RGB三个通道计算均值,并尽可能消除环境光的影响,算法流程如下:

(1)分别计算三通道的均值r_avg,g_avg,b_avg。

(2)计算三通的均值作为灰色:gray=(r_avg+g_avg+b_avg)/3。

(3)计算三通道的增益系数:k_r=gray/r_avg,k_g=gray/g_avg,k_b=gray/b_avg。

(4)对于每一个通道,调整RGB分量:r_out=r_in*k_r,g_out=g_in*k_g,b_out=b_in*k_b。

按照上述步骤对输入图像做了一下白平衡,得到的结果如图11所示,这个结果可以说是过犹不及了,黄色没矫正干净(眼睛和鼻子周围还有黄色),整体还弄出了偏蓝的感觉,可见gray world算法也需要改进。

66510b870fbe4b5b8725b445cc3c1b41.jpeg

图11 Gray World白平衡效果

 

3. 直方图均衡

    直方图均衡是通过重新分配各个通道的亮度比例来实现色偏纠正的,matlab里面自带一个自适应直方图函数adapthisteq(I),三个通道分别均衡一下,得到的效果如图12所示。

61efdab50d264f23aa9239d7333c6771.jpeg

图12 直方图均衡效果

    matlab的直方图均衡具体怎么做的我没仔细去看,但是对这幅图像来说,效果不尽人意,上次试的demosaic函数效果也不是太好,可能matlab内部自带的图像处理函数都是一些基础款,要是需要更好的效果,还是得自己动手优化。

 

4. 楼主设计的白平衡算法

    把white patch和gray world结合起来,按照分块的思路设计了一个白平衡算法,得到的结果如图13所示,看起来比上面三种都要好一点,但是没有做图像批量测试,或许也有其他问题。

688359b05fe24f7a9f1f06b21ad75f44.jpeg

图13 楼主的白平衡效果

    最后总结一下吧,白平衡其实是个挺复杂的算法,要做好它也不是太容易,目前也有用机器学习来做的,据说可以获得很好的结果。现在ISP中的白平衡更多的是依靠tuning,也有自动白平衡的算法,这些都是更高的要求了,后期如果关注楼主的人足够多,楼主可以考虑把这些算法都深挖一下,出一个进阶版的系列集,同时给出实现代码,以满足不同人群的需求。

 

  • 24
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大凝的IC进阶之路

一起学习一起进步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值