ISP PIPLINE (六) AWB
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的更多相关文章
- ISP PIPLINE (六) 3A 综述
前言: 上一篇文章: ISP PIPLINE (五) Denoise 下一篇文章: (1)3A定义包括什么 Iris:自动光圈,根据环境自动调节光圈. 既然讲到光圈,就先看一下光圈是什么,以及它如何影 ...
- ISP PIPLINE(零) 知识综述预热
本文为camera isp pipline概述 ISP,即image signal processing.为图像成型做的处理工作.适应不同光学环境下图像的还原. pipline流程如下: 光通过LEN ...
- ISP PIPLINE (十四) AE(自动曝光)
自动曝光可以可以通过调节 模拟增益,数字增益,曝光时间,光圈大小来调剂曝光. 曝光在ISP PIPLINE的位置. (先介绍一个额外的知识点: ) gamma compression(也就是de-ga ...
- ISP PIPLINE (七) gamma
what is the gamma? CCD.CMOS成像方式是通过像点中的"硅"感受光线的强弱而获得画面.而硅感光是物理成像,它真实地反应光线强度的变化,来多少就输出多少,因此它 ...
- ISP PIPLINE (一) BLC 以及 线性化
what is the BlackLevel? 暗电流来源1.raw8为例,单个pixel的有效值是0~255,但是实际AD芯片的精度可能无法将电压值很小的一部分转换出来,芯片厂会刻意添加一个固定的偏 ...
- ISP PIPLINE (十五) AF
主流的AF: CDAF, PDAF, laser assist AF(这个只是辅助,在微距或者拍摄纹理不明显的场景下好用). AF的大致原理就是检测图像锐度或者等价于锐度的参数,推动马达实现合焦或者对 ...
- ISP PIPLINE (九_2) Denoise 之 time domain denoise
时域噪声是空域噪声在时间上波动的一种描述. 1.多帧平均去噪法 1.1 理论: 1.2 帧数增加,噪声减小: 1.3 IIR滤波器的效果 2.1中的两种方法在拍摄视频的时候,如果有运动物体,则会出现拖 ...
- ISP PIPLINE (九_1) Denoise 之 space domain denoise
1.空间域噪声类型 1.gauss+possion 2.椒盐噪声(dpc处理已经处理了) 去除空域噪声有哪些方法? 空域噪声一般的思想是对某pixel邻域的pixels进行加权平均. 比如 1.高斯降 ...
- ISP PIPLINE (十三) CSM/CSC(color space matrix/convert)
1.RGB为何要转换为YCbCr,历史遗留问题! 一般一个技术如果为了保证原有的设备可以继续使用,就需要兼容以前的技术.黑白电视到彩色电视的进化就是转换为YCbCr的原因,同时YCbCr比RGB传输占 ...
随机推荐
- [SHOI2014]三叉神经树
题目描述 计算神经学作为新兴的交叉学科近些年来一直是学术界的热点.一种叫做SHOI 的神经组织因为其和近日发现的化合物 SHTSC 的密切联系引起了人们的极大关注. SHOI 组织由若干个 SHOI ...
- Mock8 moco框架如何返回一个cookie信息
还是用之前的startupWithCookies.json这个文件,直接往里面添加上面的一个代码: [ { "description":"这是一个会返回cookies信息 ...
- org.hibernate.ObjectNotFoundException: No row with the given identifier exists解决办法
hibernate-取消关联外键引用数据丢失抛异常的设置@NotFound hibernate项目里面配了很多many-to-one的关联,后台在查询数据时已经作了健全性判断,但还是经常抛出对象找不到 ...
- 第二十三节: EF性能篇(三)之基于开源组件 Z.EntityFrameWork.Plus.EF6解决EF性能问题
一. 开篇说明 EF的性能问题一直以来经常被人所吐槽,究其原因在于“复杂的操作在生成SQL阶段耗时长,且执行效率不高”,但并不是没有办法解决,从EF本身举几个简单的优化例子: ①:如果仅是查询数据,并 ...
- 对评分矩阵进行分解,SVD与LSI
摘自 推荐系统 https://www.cnblogs.com/lzllovesyl/p/5243370.html 一.SVD奇异值分解 1.SVD简介 SVD(singular value deco ...
- Concurrent下的线程安全集合
1.ArrayBlockingQueue ArrayBlockingQueue是由数组支持的线程安全的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序.这是一个典型的“有界缓存区”,固定 ...
- MySQL学习7 - 外键的变种 三种关系
一 介绍 二 如何找两张表之间的关系 三 表的三种关系 1.书和出版社 2.作者和书籍的关系 3.用户和博客 本节的重点 如何找出两张表之间的关系 表的三种关系 一 介绍 因为有foreign key ...
- 基于89C51/52单片机的红外线遥控驱动
目录 说明 IR.h IR.c 说明 编码格式:NEC IR.h /************************************************************ * @Pr ...
- Python 概念小屋
 Python 中的 if __name__ == '__main__' 该如何理解 python多进程的理解 multiprocessing Process join run
- gitlab+PHP 自动部署设计方案
2018-9-26 14:00:39 星期三 场景: 由于某种情况, 不能使用Jenkins, so......只有自己实现了 看图: webUI 设计方案, - 文件夹A, 用来存放git分支- 文 ...