本文说明了白平衡算法估计当前场景的色温过程.

色温计算的原理并不复杂,但要做到,还是一道,认真做好每一步,这需要大量的测试,和算法一直完好.

关于该过程首先简要:

1, 取的图像数据,并划分MxN块,如果是25x25,并统计每一块的基本信息(,白色像素的数量及R/G/B通道的分量的均值).

2, 依据第1步中的统计值, 找出图像中全部的白色块,并依据色温曲线推断色温.

3, 至此,我们得出来了图像中全部的可能色温,假设是单一光源的话,能够取色温最多的,当作当前色温.

比方25x25=625 个块中,一共找出了100个有效白色块, 里面又有80个白色块代表了色温4500左右, 那当前色温基本就是4500.

依据4500色温得出的Rgain,Bgain来调整当前图像,就不会差(非常多!).

以下我们再具体解说一下,每一步中须要做的工作:

第1步, 计算每一块的基本信息.

关于白色像素统计,大家知道sensor原始图像是偏色的,怎么统计块中的白色点呢,那仅仅有设置一个颜色范围,仅仅要在范围中,就能够觉得是白色像素,范围见下图:

统计白色像素个数的用处是,1,假设块中的白色像素太少,能够抛弃掉. 2,假设白色像素太多,多到每个像素点都是,那也要抛弃掉,由于非常可能在该区域过曝了

接着把统计到的白色像素点R/G/B取均值, 并得到该block 的R/G,  B/G值

至此,我们得到了每一块的白点数目及R/G,B/G的值. (请自己主动相应第1部分中色温曲线).

第二步 计算当前色温

这个比較复杂, 大自然绚丽多彩,景色万千. 上一步中统计的”白色点”难免会有失误的地方,比較常见的如黄色皮肤easy被误判为低色温下的白点,淡蓝色的窗帘,easy被误判为高色温下的白点,一张图中既有白色,也有黄色,也有蓝色的时候,是不是感觉情况有点复杂,其他的大家可继续脑补.

这时我们须要一定的策略来正确的推断出到哪个才是真的白.

通常我们会把取到的白色块,计算一下到曲线的距离,再设置对应的权重.话不多说,上个图大家就都明确了.

如果有上面这样一幅图,该图是在没有开AWB的前提下截取的,能够看到左边白色地方略有偏绿,当前色温是室内白炽灯,大概4000~5000k左右.(请忽略颜色不正的问题,我们在讨论白平衡)

以下我们就依据之前的统计信息和測量好的色温曲线进行白平衡矫正.

首先要找出白区,例如以下图:

上面这个图中的数字标示出了检測到的白色区域,数字同样的表示一个白区,依据统计信息(白点数,rg/bg值)来区分的.能够看到有误判的地方,比方色卡左上第二块的肤色块.还有最右边从上面数第二块也是easy被推断成低色温白块的情况.

针对这样的误判的情况,对不同块依据统计信息进行权重设置,以求让误判的区域对终于结果影响小一些.

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd3p3eGlhb3poZW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

上面这个图标注了权重,基本是依据统计信息中白点数来确定的.能够看到图中一片白色被标识了高权重.其他情况被标识了低权重. 权重高低一是看块中白色点数量,二是看rg/bg到色温曲线的距离.

通过上面两个图,大家就能够明显的找到白色区,并依据曲线来矫正,即使不通过曲线矫正,把白色区的r/g,b/g值向1趋近,让r=g=b,也会得到很好的白平衡效果.例如以下图所看到的:

至此,白平衡的基本流程就讲完了,有图有真相,大家一定看着也方便.

总结一下:第一次做白平衡,感觉理论非常easy,不用什么基础也能看懂.实际算法调试时,可谓差之毫厘,失之千里.总是感觉情不自禁就走上歪路.中间參考了大量资料,比方网上有很多基于色温/灰度世界/白点检測的白平衡算法,实际个人感觉应该把它们都结合起来,让算法强壮,健康才是我们想要的.

还记得第一章中開始的那两张白色T恤的图么,算了,我再贴一下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd3p3eGlhb3poZW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

这张图能够理解为在多光源下的白平衡调整.阴影色温比阳光下色温要高一些,假设阳光下是5000k,阴影可能是7000k.有光就有影,它们常常出如今一个镜头里,对着当中一个色温调,还有一边就会偏色.为了总体效果好,要把翘翘板平衡起来,能够加一些策略在里面.

以下给出一幅<如何画马>,让大家体会一下流程.

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd3p3eGlhb3poZW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

版权声明:本文博客原创文章。博客,未经同意,不得转载。

白平衡自己主动(AWB)算法---2,颜色计算的更多相关文章

  1. 【VS开发】【图像处理】自动白平衡(AWB)算法---色温曲线

    原文地址:http://blog.csdn.net/wzwxiaozheng/article/details/38434391 白平衡算法---色温曲线 本文大体讲解了白平衡的算法流程,适用于想了解和 ...

  2. PHP树生成迷宫及A*自己主动寻路算法

    PHP树生成迷宫及A*自己主动寻路算法 迷宫算法是採用树的深度遍历原理.这样生成的迷宫相当的细,并且死胡同数量相对较少! 随意两点之间都存在唯一的一条通路. 至于A*寻路算法是最大众化的一全自己主动寻 ...

  3. LK光流算法:提高计算精度和增加搜索范围

    LK光流算法:提高计算精度和增加搜索范围 关于LK算法的基本理论,见:http://www.cnblogs.com/dzyBK/p/4960630.html 这里主要阐述如何提高LK算法的计算精度和在 ...

  4. 算法笔记_155:算法提高 概率计算(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 生成n个∈[a,b]的随机整数,输出它们的和为x的概率. 输入格式 一行输入四个整数依次为n,a,b,x,用空格分隔. 输出格式 输出一行 ...

  5. Shader 中的颜色计算

    下面介绍 Shader 中 gl_FragColor 的计算与转换: 一.颜色计算 1. 加 这里要讲讲三原色和三基色:三原色一般指的是红.绿.蓝三种,简称 RGB,这是加色系.就是光源只含有特定的波 ...

  6. Java实现 蓝桥杯 算法训练 天数计算

    试题 算法训练 天数计算 问题描述 编写函数求某年某月某日(**** ** **)是这一年的第几天 .提示:要考虑闰年,闰年的2月是29天(闰年的条件:是4的倍数但不是100的倍数,或者是400的倍数 ...

  7. Java实现 蓝桥杯 算法提高 概率计算

    算法提高 概率计算 时间限制:1.0s 内存限制:256.0MB 问题描述 生成n个∈[a,b]的随机整数,输出它们的和为x的概率. 输入格式 一行输入四个整数依次为n,a,b,x,用空格分隔. 输出 ...

  8. Java实现 蓝桥杯 算法提高 日期计算

    算法提高 日期计算 时间限制:1.0s 内存限制:256.0MB 问题描述 已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况.尤其是逢百年不闰,逢400年闰的情 ...

  9. Java实现 蓝桥杯VIP 算法训练 薪水计算

    算法训练 薪水计算 时间限制:1.0s 内存限制:512.0MB 提交此题 问题描述 编写一个程序,计算员工的周薪.薪水的计算是以小时为单位,如果在一周的时间内,员工工作的时间不超过40 个小时,那么 ...

随机推荐

  1. Linux system函数返回值

    例: status = system("./test.sh"); 1.先统一两个说法: (1)system返回值:指调用system函数后的返回值,比如上例中status为syst ...

  2. mac os 虚拟机安装

    https://blog.csdn.net/u011415782/article/details/78505422 感谢

  3. 命令行运行python模块时提示包找不到的问题

    庄稼人不是专职python开发的道友.尽管与python相识已多年,可惜相识不相知,仅仅是偶尔借助pydev写一些简单的小工具. 多年来.一直困惑于这样一个问题:相同的project.相同的代码,使用 ...

  4. php实现二叉树的镜像(二叉树就是递归)

    php实现二叉树的镜像(二叉树就是递归) 一.总结 二叉树就是递归 二.php实现二叉树的镜像 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / ...

  5. 【33.20%】【LA 4320】【Ping pong】

    [Description] N (3 ≤ N ≤ 20000) ping pong players live along a west-east street(consider the street ...

  6. Android 输入框弹出样式

    在androidMainfest.xml文件里 在Activity中设置 [A]stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置 [B]stateU ...

  7. 前端工具WebStorm好在哪里?(带详细破解教程)

    前端工具WebStorm好在哪里?(带详细破解教程) 一.总结 1.WebStorm对html特别是HTML5和JS的智能提示简直堪称大神. 2.WebStorm足够的轻量级. 3.WebStorm对 ...

  8. 【U014】热浪(前向星存储方法)

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 德克萨斯纯朴的民眾们这个夏天正在遭受巨大的热浪!!!他们的德克萨斯长角牛吃起来不错,可是他们并不是很擅 ...

  9. oracle表空间查询维护命令大全之中的一个(数据表空间)史上最全

          表空间是数据库的逻辑划分,一个表空间仅仅能属于一个数据库. 全部的数据库对象都存放在建立指定的表空间中.但主要存放的是表, 所以称作表空间.在oracle 数据库中至少存在一个表空间.即S ...

  10. sparksql json 合并json数据

    java public class Demo { private static SparkConf conf = new SparkConf().setAppName("demo" ...