由于Lens的不同区域透光性能不一致,导致图像中心区域较亮,图像四周较暗。如下图:

一般来说,物体到lens中心的距离越远,图像越暗,呈圆形中性对称的方式递减。在算法中很容易想到用曲线映射的方式来补偿亮度。假设像素到lens 中心的距离为d, 那么根据d映射一个lens shading gain,映射曲线类似抛物线的形状,每个像素根据自己的d,乘以相应的gain。
 
Lens shading Gain
这个Gain在lens中心点(d=0)为1,d越大gain也越大,有些lens在最远的角落可能达到3倍。正是有些Lens shading gain很大,导致了整幅图像中四周的Noise明显比中心大很多。这条曲线的形状受lens和sensor特性不同而差异很大,对不同波长的光线衰减程度也不一样,R/G/B三个分量分别需要各自的映射曲线,我们一般采用分段线性插值的方式来模拟这三条曲线,如figure(右)。
要进行LSC运算,需要知道三个信息:一是lens 中心坐标(Cx,Cy),二是三条曲线形状,三是像素到(Cx,Cy)的距离d。首先我们回顾一下ISP 构架图figure 0.1,可以看到LSC的位置很靠前,仅在BLC之后,在bayer pattern domain。我们先要拍摄一张bayer pattern的图片,要保证整幅画面的亮度是一致的:一种方法是拍摄内容为纯白色或者灰色,这需要绝对的光照均匀;另一种方法是用亚克力板遮住sensor拍白色光源。然后对这张图片进行用一定的方法计算,找到最亮的位置就是lens中心坐标(Cx,Cy), 然后找出到lens中心距离相同距离d(i)的点的集合,计算这个集合内像素平均亮度和中心像素亮度的比例关系r(i),取r(i)的倒数就是LSC gain曲线上d=d(i)的gain值。在ISP中(Cx,Cy)和LSC gain curve是预先由tool计算好,作为参数写入到register中的。对于从左往右自上而下逐行传输的图像,任意一个pixel到lens 中心的距离d是需要计算的,如果用距离计算公式则用到平方根,计算速度较慢。不过任意两个相邻像素到lens中心的距离是有相互关联的,知道了左边像素的距离,可以通过简单的几步加法运算递推出右边像素的距离,有兴趣的同学可以尝试推导一下。

在实际使用中,由于周边Noise实在较大,我们不得不在四周亮度和Noise之间取一个平衡。在低光照条件下,通常会让四周的亮度达到中心亮度的70%~90%就可以了。环境色温的差异,也会导致计算出LSC gain curve有所差异,在调校IQ的过程中,会计算多种色温的LSC gain curve,然后在实际使用过程中动态的调整curve形状。
除了上述圆形的LSC以外,还有一种网格状(grid)的LSC方式。这种方式早期是用于纠正CMOS sensor由于制程漂移导致的局部色偏问题。Sesnor不同区域的像素滤光片性能不一致,导致图像局部偏色,这种偏色没有规律性,于是只好用grid的方式来补偿。每个网格内需要有一组rgb gain,Grid数量越多,所消耗的资源也越大。对任意一个像素,找出其四周的4组rgb gain,用双线性插值可以计算出自身的gain。当grid足够密集的话,就可以取代圆形的补偿方法,代价是成本较高。

Grid LSC
|