Hello!距这个小ISP的软件实现大概过去两年了,一直没有打起精神来将连载写完。但是我们绝不烂尾,绝不!
Image Signal Processing-第四章-LSC, CC的原理和软件实现
- 1. Lens Shading Correction (LSC)
-
- 1.1 LSC原理
- 1.2 LSC软件实现
- 1.3 LSC效果
- 2. Color Correction (CC)
-
- 2.1 CC原理
- 2.2 CC软件实现
- 2.3 CC效果
连载:
Image Signal Processing(ISP)-第一章-ISP基础以及Raw的读取显示
Image Signal Processing(ISP)-第二章-Demosaic去马赛克以及BMP软件实现
Image Signal Processing(ISP)-第三章-BCL, WB, Gamma的原理和软件实现
Image Signal Processing(ISP)-第四章-LSC, CC的原理和软件实现
Github:
BoyPao/ImageSignalProcessing-ISP
上文我们介绍了BLC,WB,Gamma三种基础的优化操作,并对图像数据进行了这几种基础矫正,图片的效果向人眼真实感受靠近。但明显的是,与商用isp处理的效果有非常大的差距,所以同志们要继续努力呀。
让我们先回顾一下上文结束时的修改效果以及图片仍然存在的问题吧。
如上图,光学镜头一般采用镜片组实现对外界光的采集,由于CMOS的尺寸一般较小,镜片组对光路的导向总体上需要是集中的。因此大部分光将打到CMOS的中间区域,而四周的光强会相对小一些。对于手机镜头,安防镜头,无人机镜头等这类小镜头来说,这种显现更为明显。
1.1 LSC原理
Lens Shading Correction(LSC)就是处理 lens shading 这种亮度不均的一种矫正方法。当然了,原理是非常简单的,我们只需将成像的四周进行相应的增益计算,就可以使四周亮度看起来和中央亮度近似了。

上图表示的是存在lens shading现象的镜头对白色卡片或墙面拍照输出图片的最中间的一行以及任意某行的亮度分布。对这两行的中央较亮的像素点,设置增益趋近于1,让他们尽量保持这个像素值,而对于两侧较暗的像素,逐渐增大增益以提高矫正后的像素值。用这样的方法,来解决lens shading。
说到Shading,还有一种叫color shading的现象。指的是由于镜片对不同频率的光折射率不同造成各种颜色的光的lens shading 程度轻重不同的现象。也就是说对同一镜片组来说折射率大的色光,其lens shading更严重一些。为解决这个问题,我们的方法也很简单,就是对各种颜色通道采取不同的增益,来分而治之。
这里需要强调的是,我们对各通道采取不同的增益并不意味着我们是在改变色调,因为事实上各通道的增益都是中间小四周大的,差异值是非常小的数字。而亮度值就是各个通道像素值经过加权平均所得,因此此处对各色彩通道采用略有差异的增益,实质上是希望改变整体亮度,而不是色调的。
1.2 LSC软件实现
以下贴出软件实现。
上面的函数写了很多行,但其实前面大部分代码是支持各种Bayer排布的代码,主要是最后调用了LSCInterpolation()来获取每个像素点的增益,再乘上像素点的值来实现矫正。
LSCInterpolation()是一个增益插值函数。为啥需要这个函数呢面说到了对不同颜色需要分而治之,那么在bayer域做 lsc 就需要4个 lut (lut是啥上一章介绍过) 来支持 4个颜色通道,这会造成数据量变得庞大。所以采取将图片划分为少量几块,每一块用一个lut值,最后每个像素通过临域块的 lut 值插值得到该像素 lsc增益的方法来降低 lut 的数据量。
用到的LSCInterpolation() 函数如下。
其lsc的部分lut如下。
LSC_PARAM LSCPARM_1920x1080_D65_1000Lux = { //bGain {{ 2.934418, 2.6059866, 2.220798, 1.94021428, 1.74472368, 1.600148, 1.50334871, 1.4445
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!