白平衡自己主动(AWB)算法---2,颜色计算
本文说明了白平衡算法估计当前场景的色温过程.
色温计算的原理并不复杂,但要做到,还是一道,认真做好每一步,这需要大量的测试,和算法一直完好.
关于该过程首先简要:
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,颜色计算的更多相关文章
- 【VS开发】【图像处理】自动白平衡(AWB)算法---色温曲线
原文地址:http://blog.csdn.net/wzwxiaozheng/article/details/38434391 白平衡算法---色温曲线 本文大体讲解了白平衡的算法流程,适用于想了解和 ...
- PHP树生成迷宫及A*自己主动寻路算法
PHP树生成迷宫及A*自己主动寻路算法 迷宫算法是採用树的深度遍历原理.这样生成的迷宫相当的细,并且死胡同数量相对较少! 随意两点之间都存在唯一的一条通路. 至于A*寻路算法是最大众化的一全自己主动寻 ...
- LK光流算法:提高计算精度和增加搜索范围
LK光流算法:提高计算精度和增加搜索范围 关于LK算法的基本理论,见:http://www.cnblogs.com/dzyBK/p/4960630.html 这里主要阐述如何提高LK算法的计算精度和在 ...
- 算法笔记_155:算法提高 概率计算(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 生成n个∈[a,b]的随机整数,输出它们的和为x的概率. 输入格式 一行输入四个整数依次为n,a,b,x,用空格分隔. 输出格式 输出一行 ...
- Shader 中的颜色计算
下面介绍 Shader 中 gl_FragColor 的计算与转换: 一.颜色计算 1. 加 这里要讲讲三原色和三基色:三原色一般指的是红.绿.蓝三种,简称 RGB,这是加色系.就是光源只含有特定的波 ...
- Java实现 蓝桥杯 算法训练 天数计算
试题 算法训练 天数计算 问题描述 编写函数求某年某月某日(**** ** **)是这一年的第几天 .提示:要考虑闰年,闰年的2月是29天(闰年的条件:是4的倍数但不是100的倍数,或者是400的倍数 ...
- Java实现 蓝桥杯 算法提高 概率计算
算法提高 概率计算 时间限制:1.0s 内存限制:256.0MB 问题描述 生成n个∈[a,b]的随机整数,输出它们的和为x的概率. 输入格式 一行输入四个整数依次为n,a,b,x,用空格分隔. 输出 ...
- Java实现 蓝桥杯 算法提高 日期计算
算法提高 日期计算 时间限制:1.0s 内存限制:256.0MB 问题描述 已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况.尤其是逢百年不闰,逢400年闰的情 ...
- Java实现 蓝桥杯VIP 算法训练 薪水计算
算法训练 薪水计算 时间限制:1.0s 内存限制:512.0MB 提交此题 问题描述 编写一个程序,计算员工的周薪.薪水的计算是以小时为单位,如果在一周的时间内,员工工作的时间不超过40 个小时,那么 ...
随机推荐
- XML输出到浏览器报错
在使用Firefox浏览器测试我编写的xml文件时,遇到如下错误:我的xml源代码如下: <?xml version="1.0" encoding="UTF-8&q ...
- thinkphp,onethink,thinkox验证码不显示
使用验证码的时候,一开始正常,后来不显示了 网上说是utf-8的编码问题,什么bom去掉,转化为无bom的格式 我都试了,没用 后来知道是在调用验证码的地方 写上 Public function v ...
- HTTPS和SSL/TLS协议
要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...
- 【p091】多项式输出
一元 n 次多项式可用如下的表达式表示: 其中,aixi 称为i次项,ai称为i次项的系数.给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式: 多项式中自变量为x,从左到右按照 ...
- cocos2d-x win8下的环境配置和建立项目
cocos2dx 跨平台.可是看网上说开发最合适还是在vs2010中,基本是编完后再移植到安卓. 1.去官网下载源代码2.2.3版本号的. 2.然后运行根文件夹下的build-win32.bat(须要 ...
- hibernate框架简单步骤
Demo.java package com.itheima.test; import org.hibernate.Session; import org.hibernate.SessionFactor ...
- Ajax基础与Json应用(二)
九.jQuery 实现Ajax应用 1.使用load()方法异步请求数据 使用load()方法通过Ajax请求加载服务器中的数据,并把返回的数据放置到指定的元素中,它的调用格式为: load(url, ...
- Android BlueDroid(一):BlueDroid概述
关键词:bluedroid bluez作者:xubin341719(欢迎转载,请注明作者,请尊重版权,谢谢!)欢迎指正错误.共同学习.共同进步!! 一.名词解释:(实用信息添加中--) BTI F: ...
- 王立平--TableLayout
效果: <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android= ...
- 第六章:任务执行——Java并发编程实战
任务:通常是一些抽象的且离散的工作单元.大多数并发应用程序都是围绕"任务执行"来构造的,把程序的工作分给多个任务,可以简化程序的组织结构便于维护 一.在线程中执行任务 任务的独立性 ...