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

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

关于该过程首先简要:

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. 使用ionic3快速开发webapp(一)

    Ionic可以让我们使用web技术快速构建接近原生体验的跨平台移动应用. 一.安装ionic 1.需要先安装 Node.js(版本8.x之上): 2.安装cordova 和 ionic: $ npm ...

  2. Web系统自动化部署脚本

    Web开发的项目,除了在本地直接运行外,还可能经常需要在服务器上部署. 写了个自动化部署的脚本,仅供参考. 不少地方需要配置路径,个人建议使用绝对路径,不用依赖执行脚本时所在的路径. #!/bin/s ...

  3. Oracle 字符集的查看和修改 分类: H2_ORACLE 2013-06-19 16:52 316人阅读 评论(0) 收藏

    一.什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库 ...

  4. MouseGestureL.ini shift up/down/left/right edge

    MouseGestureL.ini [ShiftPress]Icon=C:\Windows\System32\explorer.exe,6Custom=GetKeyState("Shift& ...

  5. 超级简单的Android Studio jni 实现(无需命令行)

    1.配置Anroid Studio(这步是关键) 使用[command+,] 打开Preferences,选择External Tools,点击加号框如下图: Paste_Image.png 点击+号 ...

  6. php中的foreach如何使用?

    php中的foreach如何使用? 一.总结 1.foreach (array_expression as $value) 2.foreach (array_expression as $key =& ...

  7. 【b803】传纸条

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行 ...

  8. 详细回复某个CSDN网友,对我的文章和技术实力以及CSDN的吐槽

    貌似被大学生鄙视了,我也是醉了,现在的大学生水平和信心,都这么高了~ 看来,我得加把劲了~ o(︶︿︶)o 电子商务系列文章,是我闲来无事,分享自己的一些业余实践经验的文章.其中关于数据库设计的这一篇 ...

  9. 要求两个异步任务都完成后, 才能回到主线程:dispatch_group_t

    需求:两个异步任务都完成后, 回到主线程 /** 1.下载图片1和图片2 2.将图片1和图片2合并成一张图片后显示到imageView上 思考: * 下载图片 : 子线程 * 等2张图片都下载完毕后, ...

  10. 【项目积累】对JSON数据的处理

    [项目简述]         接触.NET项目非常长一段时间了,前台用的都是MVC框架.不知道大家是否想过一个问题.我们是怎样将数据显示到前台的,换句话说,MVC能够识别怎么样的数据形式?答案非常ea ...