gb | b |
r | gr |
[bl_r, bl_gr, bl_gb, bl_b, alpha, beta]=[0, 0, 0, 0, 0, 0]
众所周知,CMOS传感器采集的信息经过一系列转换,最后生成原始RAW格式数据,RAW数据每个像素点只有一种颜色信息,只是RGB的一个,但是由于sensor对绿色光的频率基本可以全部通过,故RAW data数据里边,有两个G一个R,一个B。我们要想得到RGB数据就必须利用已有的信息来得到缺失的信息,这个处理后面专门介绍。这里接着黑电平校正说。
我们知道图像数据一般为0--255,但sensor在出厂的时候,厂家一般会设置图像数据输出范围如5-250等,反正最低电平不为零。因此我们就需要对图像数据范围进行调整,使其最小值为零,这就是黑电平校正。
黑电平校正有两种方法:一种是直接在RAW data数据上减去一个值,可以RGB减的值一样,也可以不一样,目前大多数厂家如,安霸,海思等基本都是采用这一做法。一种是利用一次函数,这个比较麻烦,就不介绍了。
PS:这个是ISP里面最简单做法,以后会详细介绍一些其他复杂的算法。
for y in range(0, raw_h-1, 2):
for x in range(0, raw_w-1, 2):
if self.bayer_pattern == 'rggb':
r = self.img[y,x] + bl_r
b = self.img[y+1,x+1] + bl_b
gr = self.img[y,x+1] + bl_gr + alpha * r / 256
gb = self.img[y+1,x] + bl_gb + beta * b / 256
blc_img[y,x] = r
blc_img[y,x+1] = gr
blc_img[y+1,x] = gb
blc_img[y+1,x+1] = b