白平衡自己主动(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被推断成低色温白块的情况.

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


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

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


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

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

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


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

 

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



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

转载于:https://www.cnblogs.com/gcczhongduan/p/4678283.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机房收费系统】多么痛的领悟

这次机房收费系统&#xff0c;是全部的项目中&#xff0c;自己完毕的最不惬意的了。 时间之长。效率之慢。一開始。就感觉无从下手&#xff0c;但总会相信自己能慢慢的进入状态。最终有机会自己练练手了。也自觉得之前自己设计模式学的还不错。也最终有机会能自己想想设计模式了…

linux(windows)之svn重定向地址

1、问题 svn下载的项目路径需要换&#xff0c;也就是下面的URL:SVN:// 需要修改 2、解决办法 linux平台 svn switch --relocate oldSvnPath newSvnPath windows平台 右击项目 TortoiseSVN->Relocate 然后修改就行

简单的邮箱格式校验方式

简单的邮箱格式校验方式Intro前段时间有一个验证邮箱格式的小需求&#xff0c;然后突然发现了一种非常简单的邮箱格式判断方式Implement直接来看实现public static bool IsEmailAddress(string email) {if (string.IsNullOrWhiteSpace(email))return false;var symbolIndex em…

Ubuntu14.04LST安装weblogic11g

1:下载链接http://download.oracle.com/otn/nt/middleware/11g/wls/1036/wls1036_generic.jar 2:进行安装&#xff08;前提已经安装好JDK&#xff09; yy:~/my_download$ java -d64 -Xmx1024m -jar wls1036_generic.jar Extracting 0%.......................................…

服务器连接不稳定fifa,fifa服务器链接异常

fifa服务器链接异常 内容精选换一换获取登录密码Windows操作系统在创建时只能选择密钥登录&#xff0c;需要先将密钥文件解析为密码&#xff0c;参考链接&#xff1a;获取Windows裸金属服务器的密码Windows操作系统在创建时只能选择密钥登录&#xff0c;需要先将密钥文件解析为…

并发编程总结4-JUC-REENTRANTLOCK-2(公平锁)

内容包括&#xff1a;1、ReentrantLock函数分析2、ReentrantLock公平锁源码&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#…

Android之项目全部能正常登录但是部分资源没有显示成功的解决办法

1、问题 自己写的项目&#xff0c;PC端没有问题&#xff0c;移动端有问题 第一个问题 部分能登录&#xff0c;一部分不能登录 第二个问题 解决第一个问题后&#xff0c;全部能登录&#xff0c;但是登录之后部分资源显示不成功&#xff0c;部分可以 2、原因 第一个问题的原…

ASP.NET Core 6 的性能改进

受到 由Stephen Toub 发布的关于 .NET 性能的博客的启发&#xff0c;我们正在写一篇类似的文章来强调ASP.NET Core 在6.0 中所做的性能改进。基准设置我们整个过程中大部分的实例使用的是BenchmarkDotNet。在此链接上提供了repo&#xff0c;其中包括本文中使用的大多数基准。Be…

(转载)在服务器上排除问题的头5分钟

尽可能搞清楚问题的前因后果 不要一下子就扎到服务器前面&#xff0c;你需要先搞明白这台服务器有多少已知的情况&#xff0c;还有故障的具体情况&#xff0c;不然你很有可能是在无的放矢必须要搞清楚的问题&#xff1a;故障的表现是什么&#xff1f;无响应&#xff1f;报错&am…

wikioi 1034 家 实时动态的网络流量(费用流)

因为随着时间的推移。网络侧变得&#xff0c;因此&#xff0c;常见的网络流量也解决不了这个问题&#xff0c;。如果T毕竟运输时间。为此。我们可以基于时间分割点&#xff0c;所有的点将被分割为T点。 对于每一个点&#xff0c;下一次甚至一个容量为本人INF边缘&#xff0c;费…

华为服务器只显示一个下划线,华为官方解释:为什么鸿蒙系统logo下面会有一条下划线...

HarmonyOS 的 Logo 中为什么有一横&#xff1f;为什么这一横偏偏是蓝色&#xff1f;HarmonyOS 的字体设计又藏着什么奥秘&#xff1f;6月10日晚&#xff0c;华为官方微博对鸿蒙系统LOGO设计寓意&#xff0c;作出了官方科普。下面就来为你一一解答在现代汉语中“旦”字与鸿蒙OS中…

Android之jni出现JNIEnv has no member named ‘GetMehtodID‘解决办法

1、问题 ndk-build提示 JNIEnv has no member named GetMehtodID 2、原因 我把那个函数写错了 3、解决办法 复制上面正常的函数&#xff0c;把函数改为 env->GetMethodID

ORACLE利用STANDBY端RMAN备份进行数据恢复

这里记录一下流程&#xff0c;有我和同事问心进行测试 dataguard主库和物理备库主要是controlfile文件有区别&#xff0c;用restore可以查看含有primary,standby关键字 RMAN> restore ; RMAN-00571: RMAN-00569: ERROR MESSAGE STACK FOLLOWS RMAN-00571: RMAN-00558: e…

腾讯急招多名.NET Core,5年30k!

金三银四跳槽季&#xff0c;腾讯急招5年左右.NET Core高级开发岗&#xff0c;基本月薪能到30k&#xff0c;心动吗&#xff1f;这里推荐个.NET跳槽大厂交流群&#xff0c;有技术交流&#xff0c;有面经分享&#xff0c;还有内推通道&#xff0c;据说有一定几率降低学历要求&…

【BZOJ】1679: [Usaco2005 Jan]Moo Volume 牛的呼声(数学)

http://www.lydsy.com/JudgeOnline/problem.php?id1679 水题没啥好说的。。自己用笔画画就懂了 将点排序&#xff0c;然后每一次的点到后边点的声音距离和(n-i)*(a[i1]-a[i])之前同样操作所得的的sum 然后答案就是累加后2 #include <cstdio> #include <cstring> #…

perl学习笔记——目录操作

在目录书中移动 chdir 操作副改变当前的工作目录。它和shell中cd命令类似&#xff1a; chdir ‘/etc’ or die “cannot chdir to /etc:$1”; 注意&#xff1a;工作目录不能更改的&#xff0c;也就是说Perl程序返回后一定会回到所在的工作目录。 如果调用chdir时不加参数&#…

凌动服务器系列,凌动也能造服务器?超微又出怪异新品

【IT168 专稿】上月初举行的英特尔春季IDF上&#xff0c;记者看到超微展示了采用独特设计的2U Twin系列高密度Nehalem服务器&#xff0c;该服务器采用了全冗余设计&#xff0c;包括主板在内的所有部件都有两个互为备份。可以说超微一直以来都以自身独特的设计理念和大胆的实践拓…

C语言——关于数据在内存中存储的练习

大家好&#xff0c;我是残念&#xff0c;希望在你看完之后&#xff0c;能对你有所帮助&#xff0c;有什么不足请指正&#xff01;共同学习交流 本文由&#xff1a;残念ing原创CSDN首发&#xff0c;如需要转载请通知 个人主页&#xff1a;残念ing-CSDN博客&#xff0c;欢迎各位→…

LeetCode之字符串(C++)的切割简单实现

1、问题 C++字符串的切割 2、代码 #include <iostream> #include <string> #include <vector>std::vector<std::string> splite(const std::string &value, const std::string &pattern) {std::vector<std::string> result;if (value …

Avalonia跨平台入门第九篇之控件置顶和置底

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果;今天趁着有时间接着对拖放到Canvas上的控件进行置顶和置底切换的效果,最终实现的效果如下图:关于置顶和置底的实现代码:接下来的文章中我会再来分享在Canvas上控件的锁定效果;…