What is WB(white balance)?

人的视觉和神经系统在看到白色物体的时候,基本不受环境的变化而出现严重的错觉。比如阴天,晴天,室内,室外,日光灯,白炽灯等的环境下,人依然会将白纸视作白纸。

但是imagesensor这种电子器件没有心理和神经作用。受制于环境色温的影响。拍出的照片会出现偏色的情况。

色温的定义:一个黑体加热之后,随着温度的升高,黑体会先发出红色,然后越来越亮,变成黄光,在变成白光,直至蓝光,这个温度就是色温。

下面看几组照片:

   

7700k                   5100k                      3500k

对在其色温下出现白色偏色的图片的修正就是白平衡。比如:7700 ,3500 的图片通过对sensor四通道数字增益达到5100k时的状态就可以实现白平衡。

why go to WB?

为让拍出的图片不受环境色温的影响,接近人眼感受,拍出白色物体不至于受到色温影响偏色。

how to go to wb?

说白了就是调节R,G,B的比例。调节到正常51000K时r;g;b的1:1:1的状态。下面的对角矩阵就是增益。

那么这个对角增益矩阵如何确定呢?

1.可以在不同的色温光源下分别拍图,计算r/g,b/g,gr/gb的比值。以5100k(拍出的白纸视为白色)作为标准色温。

2.通过计算Gain_r/g, Gain_b/g,Gain_gr/gb就有了。假设出现如下关系:

3.增益关系有了之后,我们再引进一个色温对应增益关系,如果知道色温就可以对原始图片进行白平衡了。例如:

上面的就是白平衡的原理了。

那么何为自动白平衡呢?

当然就是色温估计后根据色温增益曲线直接对图片进行白平衡了。

那么色温估计如何做呢?目前的算法如灰度世界法,白点法等等一系列改进的方法。我看了这些算法,总感觉很牵强。有各种各样的问题。

1 目前主流的色温估计方法是使用统计加权白点估计法。

选取图片roi. 分成N*M块. 计算每一块的r,g,b平均值,然后计算r_avr/g_avr  , b_avr/g_avr。然后将可能是白点的块保留,统计到色温曲线的距离,看哪些块距离色温曲线近且这样的块多,则认为就是目前的色温。如下图。

  

2 最新的色温估计直接使用色温传感器,预测的色温精准。这样就大大避开了估计算法的各种问题。例如,华为p20,传感器代替算法来估计色温的方法必将走向普及。

附一段灰度世界的白平衡方法(这个方法不需要模组厂进行wb calibration,方法简单,速度快,常用在车载镜头):


#include <highgui/highgui.hpp>
#include <imgproc/imgproc.hpp>

using namespace cv;

int main()
{
	Mat imageSource = imread("sunny123456.jpg");
	imshow("原始图像", imageSource);
	vector<Mat> imageRGB;

	//RGB三通道分离
	split(imageSource, imageRGB);

	//求原始图像的RGB分量的均值
	double R, G, B;
	B = mean(imageRGB[0])[0];
	G = mean(imageRGB[1])[0];
	R = mean(imageRGB[2])[0];

	//需要调整的RGB分量的增益
	double KR, KG, KB;
	KB = (R + G + B) / (3 * B);
	KG = (R + G + B) / (3 * G);
	KR = (R + G + B) / (3 * R);

	//调整RGB三个通道各自的值
	imageRGB[0] = imageRGB[0] * KB;
	imageRGB[1] = imageRGB[1] * KG;
	imageRGB[2] = imageRGB[2] * KR;

	//RGB三通道图像合并
	merge(imageRGB, imageSource);
	imshow("白平衡调整后", imageSource);
	waitKey();
}

sensor 插值后的图和白平衡后的图比较。(我同事的肖像,男版lena)

ISP PIPLINE (六) AWB的更多相关文章

  1. ISP PIPLINE (六) 3A 综述

    前言: 上一篇文章: ISP PIPLINE (五) Denoise 下一篇文章: (1)3A定义包括什么 Iris:自动光圈,根据环境自动调节光圈. 既然讲到光圈,就先看一下光圈是什么,以及它如何影 ...

  2. ISP PIPLINE(零) 知识综述预热

    本文为camera isp pipline概述 ISP,即image signal processing.为图像成型做的处理工作.适应不同光学环境下图像的还原. pipline流程如下: 光通过LEN ...

  3. ISP PIPLINE (十四) AE(自动曝光)

    自动曝光可以可以通过调节 模拟增益,数字增益,曝光时间,光圈大小来调剂曝光. 曝光在ISP PIPLINE的位置. (先介绍一个额外的知识点: ) gamma compression(也就是de-ga ...

  4. ISP PIPLINE (七) gamma

    what is the gamma? CCD.CMOS成像方式是通过像点中的"硅"感受光线的强弱而获得画面.而硅感光是物理成像,它真实地反应光线强度的变化,来多少就输出多少,因此它 ...

  5. ISP PIPLINE (一) BLC 以及 线性化

    what is the BlackLevel? 暗电流来源1.raw8为例,单个pixel的有效值是0~255,但是实际AD芯片的精度可能无法将电压值很小的一部分转换出来,芯片厂会刻意添加一个固定的偏 ...

  6. ISP PIPLINE (十五) AF

    主流的AF: CDAF, PDAF, laser assist AF(这个只是辅助,在微距或者拍摄纹理不明显的场景下好用). AF的大致原理就是检测图像锐度或者等价于锐度的参数,推动马达实现合焦或者对 ...

  7. ISP PIPLINE (九_2) Denoise 之 time domain denoise

    时域噪声是空域噪声在时间上波动的一种描述. 1.多帧平均去噪法 1.1 理论: 1.2 帧数增加,噪声减小: 1.3 IIR滤波器的效果 2.1中的两种方法在拍摄视频的时候,如果有运动物体,则会出现拖 ...

  8. ISP PIPLINE (九_1) Denoise 之 space domain denoise

    1.空间域噪声类型 1.gauss+possion 2.椒盐噪声(dpc处理已经处理了) 去除空域噪声有哪些方法? 空域噪声一般的思想是对某pixel邻域的pixels进行加权平均. 比如 1.高斯降 ...

  9. ISP PIPLINE (十三) CSM/CSC(color space matrix/convert)

    1.RGB为何要转换为YCbCr,历史遗留问题! 一般一个技术如果为了保证原有的设备可以继续使用,就需要兼容以前的技术.黑白电视到彩色电视的进化就是转换为YCbCr的原因,同时YCbCr比RGB传输占 ...

随机推荐

  1. [SHOI2014]三叉神经树

    题目描述 计算神经学作为新兴的交叉学科近些年来一直是学术界的热点.一种叫做SHOI 的神经组织因为其和近日发现的化合物 SHTSC 的密切联系引起了人们的极大关注. SHOI 组织由若干个 SHOI ...

  2. Mock8 moco框架如何返回一个cookie信息

    还是用之前的startupWithCookies.json这个文件,直接往里面添加上面的一个代码: [ { "description":"这是一个会返回cookies信息 ...

  3. org.hibernate.ObjectNotFoundException: No row with the given identifier exists解决办法

    hibernate-取消关联外键引用数据丢失抛异常的设置@NotFound hibernate项目里面配了很多many-to-one的关联,后台在查询数据时已经作了健全性判断,但还是经常抛出对象找不到 ...

  4. 第二十三节: EF性能篇(三)之基于开源组件 Z.EntityFrameWork.Plus.EF6解决EF性能问题

    一. 开篇说明 EF的性能问题一直以来经常被人所吐槽,究其原因在于“复杂的操作在生成SQL阶段耗时长,且执行效率不高”,但并不是没有办法解决,从EF本身举几个简单的优化例子: ①:如果仅是查询数据,并 ...

  5. 对评分矩阵进行分解,SVD与LSI

    摘自 推荐系统 https://www.cnblogs.com/lzllovesyl/p/5243370.html 一.SVD奇异值分解 1.SVD简介 SVD(singular value deco ...

  6. Concurrent下的线程安全集合

    1.ArrayBlockingQueue ArrayBlockingQueue是由数组支持的线程安全的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序.这是一个典型的“有界缓存区”,固定 ...

  7. MySQL学习7 - 外键的变种 三种关系

    一 介绍 二 如何找两张表之间的关系 三 表的三种关系 1.书和出版社 2.作者和书籍的关系 3.用户和博客 本节的重点 如何找出两张表之间的关系 表的三种关系 一 介绍 因为有foreign key ...

  8. 基于89C51/52单片机的红外线遥控驱动

    目录 说明 IR.h IR.c 说明 编码格式:NEC IR.h /************************************************************ * @Pr ...

  9. Python 概念小屋

     Python 中的 if __name__ == '__main__' 该如何理解 python多进程的理解 multiprocessing Process join run      

  10. gitlab+PHP 自动部署设计方案

    2018-9-26 14:00:39 星期三 场景: 由于某种情况, 不能使用Jenkins, so......只有自己实现了 看图: webUI 设计方案, - 文件夹A, 用来存放git分支- 文 ...