概述
个人理解:BLC(BlackLevel Correction)简单来说就是对全黑状态下对各通道不为0值的矫正(全黑状态下各通道值应该为0)
那么,要了解Black Leve Correction,首先了解为什么会需要Black Leve Correction。
以下为黑电平产生原理和Sensor端矫正的原理:
Camera Sensor的工作原理为:接收光信号,再将光信号转换为模拟信号,再通过A/D转换成数字信号。
而A/D转换成数字信号的过程中,A/D转换器无法将过暗的信号给转换成数字信号,就会使得生成的图像的暗部的细节丢失。
再由于Black Level 的产生也和Sensor硬件电路有关,Sensor本身就会存在暗电流,暗电流再CMOS芯片通过光电二极管将光信号转换成模拟信号的时候,光电二极管受到温度、电压稳定性等因素的影响,导致全黑状态下的电平不一样为0,而信号的不稳定还会导致部分图像的偏色。
因此,Sensor生产时一般会在 AD转换之前的输入之前加上一个固定的偏移量,使输出的pixel value在5(非固定)~255之间,目的是为了让暗部的细节完全保留,当然同时也会损失一些亮部细节,由于对于图像来说,人们相比亮部区域更注重暗部区域的细节,人们也对暗部细节更加敏感,并且ISP后面会有很多增益模块(LSC、AWB、Gamma等),因此略微减少一些亮部细节对观感影响不大。
此次学习主要分析的是为ISP端的BLC,所以Sensor端的BLC就只做一个大概的了解。
以下是我在阅读和学习各大佬前辈的算法文章做出的总结。
这是最常用的ISP端BLC方法:固定值
固定值的ISP端的算法是通过一副黑帧RAW图,然后对RAW图进行操作。
其操作过程为:
- 对黑帧的RAW图进行采集,分为R,GR,GB,B四个通道值。
- 分别对四个通道值求平均值,得出R_mean,Gr_mean,Gb_mean,B_mean四个通道平均值。
- 再用 ▲CR=R-R_mean , ▲CGr=GR- Gr_mean , ▲CGb=GB- Gb_mean , ▲CB=B-B_mean
- 最后再将原图通道值更改成求出的▲C值:(CR,CGr,CGb,B)
- 不过由于所有通道值都减少了▲C,所以通道值都变成了255-▲C,所以为了保持通道值值范围为0-255,所以需要利用公式算法来增加Gr和Gb的范围到0~255,而不是0~255-▲C,所以就需要让Gr和Gb进行归一化。
- 所用的公式:gin x 255 / (255-▲C) ,此算法需要用在校正后的Gr和Gb通道,让其恢复通道值的范围0~255,以此便算完成了一次BLC矫正。
(其中▲C便设置为固定值,在BLC矫正过程中都是以各个通道的参数减去平均值来矫正的。)
由于Sensor的电路本身会存在暗电流,导致在没有光线照射的时候,像素单位也有一定的输出电压,暗电流这个东西跟曝光时间和gain都有关系,不同的位置也是不一样的,在gain增大的时候,电路的增益增大,暗电流也会增强,所以很多ISP会选择在不同gain下减去不同的bl的值。
RK端便采用的是ISO联动的方式来进行BLC。
RK平台的ISP端BLC矫正需要我们采集1x 2x 4x.. 不同增益的拍摄raw图,来进行BLC矫正,这也是为了让图像可以在不同增益下能采用不同的矫正值,来确保矫正的准确性,原理如下:
由于每个增益下的所产生的颜色参数不同,所以每个增益下都需要经过一次上述的操作流程来获取不同增益下的▲C值,这才能够使在不同增益下都能有更准确的矫正。
所以理论上来说,需要每个增益下都配置一个▲C值才能使得在正常模式下的每个光照情况的显示都正常,不存在暗电流的情况。
最好得情况就是将每一个Gain值拍摄出来得Raw图求出的▲C作为一个梯度,然后再进行平均,这就可以获取到最准确得BLC矫正值。
这其实就是所谓的ISO联动,通过Gain值和ExpoureTime联动,其实主要是通过Gain的联动来确定每一个Gain下的▲C值。因为ExpoureTime值得变动会使得设备温度变热亦或者之后的AE调试都会对其有所影响,这是不可控的,所以主要调整Gain值,对各个Gain值所拍摄的图片求出合适的▲C值,最后再平均求出最终的▲C值。
上述内容便是我对RK平台的BLC的全部过程和理解。
最后
以上就是靓丽缘分为你收集整理的ISP BLC(BlackLevel Correction) -ISP端 BLC 黑电平矫正的学习理解的全部内容,希望文章能够帮你解决ISP BLC(BlackLevel Correction) -ISP端 BLC 黑电平矫正的学习理解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复