色温曲线

本文大体讲解了白平衡的算法流程,适用于想了解和学习白平衡原理的筒子们.

一般情况下要实现AWB算法需要专业的图像和算法基础,本文力图通过多图的方式,深入浅出,降低初学者理解上的门槛,让大家都理解到白平衡算法流程.

看到这里还在继续往下瞄的同学,一定知道了色温的概念,并且知道sensor原始图像中的白色如果不经AWB处理,在高色温(如阴天)下偏蓝,低色温下偏黄,如宾馆里的床头灯(WHY!OTZ) (如下图).

下面这个T恤的图片非常经典,怎么个经典后续再说,不过大体可以看出有偏黄和偏蓝的情况.虽然如此,却已经是AWB矫正以后的效果.

所以,为了眼前的女神白富美在镜头里不变成阿凡达和黄脸婆,这时就需要白平衡来工作了.

流程原理很简单:

1,在各个色温下(2500~7500)拍几张白纸照片,假设拍6张(2500,3500…7500),可以称作色温照.

2,把色温照进行矫正,具体是对R/G/B通道进行轿正,让偏色的白纸照变成白色,并记录各个通道的矫正参数.

实际上只矫正R和B通道就可以,这样就得到了6组矫正参数(Rgain,Bgain).

3,上面是做前期工作,爱思考的小明发现,只要知道当前场景是什么色温,再轿正一下就可以了.事实上也就是如此.

所以,AWB算法的核心就是判断图像的色温,是在白天,晚上,室内,室外,是烈日还是夕阳,还是在阳光下的沙滩上.或者是在卧室里”暖味”的床头灯下.

之前拍了6张色温照以及6组矫正参数.可是6够么,当然不够, 插值一下可以得到无数个值,我们把点连成线, 得到了一个神奇的曲线------色温曲线.大概是下面这个样子.

上面提到了三个值(RG,BG,色温),这应该是个三维的.没关系,我们再来一条RG跟色温的曲线,这样只要知道色温,就知道RG,知道RG,就知道BG,知道RG,BG就能轿正了,yes!

至此,我们的前期工作已经全部做完了, 并得到了AWB的色温曲线,下一步只要计算得到当前色温,顺藤摸瓜就能得到当前的矫正参数(Rgain,Bgain),那白平衡的工作就作完了.(放心,当然没这么简单)

第一部分先到这里,下一部分将讲解AWB算法的核心------计算图像色温.

涉及到的知识点大致有图像分块, 判断白区, 根据色温曲线划分不同光源, 对不同光源加权平均得到实际色温.

色温计算

首先简单说一下流程:

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部分中色温曲线).

第二步 计算当前色温

这个比较复杂, 大自然绚丽多彩,景色万千.

上一步中统计的”白色点”难免会有失误的地方,比较常见的如黄色皮肤容易被误判为低色温下的白点,淡蓝色的窗帘,容易被误判为高色温下的白点,一张图中既

有白色,也有黄色,也有蓝色的时候,是不是感觉情况有点复杂,其它的大家可继续脑补.

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

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

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

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

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

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

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

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

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

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

总结一下:第一次做白平衡,感觉理论很简单,不用什么基础也能看懂.实际算法调试时,可谓差之毫厘,失之千里.总是感觉不由自主就走上歪路.中间参

考了大量资料,比如网上有许多基于色温/灰度世界/白点检测的白平衡算法,实际个人感觉应该把它们都结合起来,让算法强壮,健康才是我们想要的.

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

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

awb数据怎么计算_自动白平衡(AWB)算法相关推荐

  1. awb数据怎么计算_白平衡自己主动(AWB)算法---2,颜色计算

    本文说明了白平衡算法估计当前场景的色温过程. 色温计算的原理并不复杂,但要做到,还是一道,认真做好每一步,这需要大量的测试,和算法一直完好. 关于该过程首先简要: 1, 取的图像数据,并划分MxN块, ...

  2. ssm插入数据时候栈溢出_程序员算法与数据结构基础中的基础,栈与递归

    在此之前,我们介绍了动态规划.深度优先搜索等基础算法,但是,有部分好友评论说,难度太难了,我们知道动态规划的自顶向下跟深度优先搜索一般都用递归实现,今天我们就先来讲讲算法与数据结构中,基础中的基础递归 ...

  3. 真彩色图像数据量 计算_军职在线大学计算机基础(自主模式)

    第一章 单选题 电子计算机的发展已经经过了4代,4代计算机的主要元器件分别是(b) a.电子管,晶体管,中小规模集成电路,激光器件 b.电子管,晶体管,中小规模集成电路,大规模或超大规模集成电路 c. ...

  4. python 均线斜率怎么计算_高频交易算法研发心得--均线算法

    今天来探讨一下常见的均线算法的应用.在各种交易软件中,我们常常可以见到MA指标,EMA指标以及SMA指标. 首先说明SMA的二义性,如果您在百度直接搜索SMA指标,指的是带加权的指数平均值:然而,再去 ...

  5. python降维之时间类型数据的处理_【Python算法】数据降维概述

    数据降维概述 1.数据降维概述 所谓的数据降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中,可以解决大规模特征下的数据显示问题,使得数据集更易使用,降低后续算法的计算,消除噪声影 ...

  6. 如何写python脚本抓取数据并计算_【小工具】利用Python脚本从Gaussian计算结果中提取信息...

    1.前言 高斯(Gaussian)是一个功能强大的量子化学综合软件包,所有从事计算化学相关领域的科研工作者应该都使用或者了解过这个软件.它的输出文件(.log文件)是一个文本文件,可以利用文本工具打开 ...

  7. 真彩色图像数据量 计算_计算机基础:图形、图像相关知识笔记

    1.图形.图像的基础知识 图形:由称为矢量的数学对象所定义的直线和曲线等组成. 图像:也称为栅格图像,由点阵图或位图图像.用像素来代表图像.每一个像素都被分配一个特点的位置和颜色值. 图形和图像之间在 ...

  8. 用C/C++实现输入IQ数据,计算时差(IQ数据互相关),完成TDOA定位(Chan算法)

    文末贴源码链接 需求:已知接收机IQ数据,根据IQ数据做互相关,求信号时差,最终通过TDOA(Chan算法)定位发射机坐标.输入输出坐标均为经纬度坐标,而在TDOA计算中,需要笛卡尔坐标系坐标,涉及坐 ...

  9. 模型算法_数据分析师,要懂多少算法模型?

    随着数据分析岗位招聘越来越内卷,问"你用过/建过什么模型"的也越来越多.这个问题很容易给人"面试造航母,工作拧螺丝"的感觉.实际工作中,真的要搞那么多模型??? ...

  10. 《数据密集型计算和模型》第三章_内存计算复习

    <数据密集型计算和模型>第三章的有关内容.主要有内存计算的概念.内存计算的硬件结构.内存计算的系统软件.内存数据库等相关内容. 文章目录 一.内存计算的概念 1. 为什么需要内存计算? 2 ...

最新文章

  1. 如何查看linux版本
  2. caxa画图怎么倒角_16个底部含圆弧倒角的宽槽编程案例
  3. iOS工程中创建pch文件
  4. UI设计干货素材|动态交互插画模板
  5. [Swift]LeetCode593. 有效的正方形 | Valid Square
  6. java 7 collection 详解(一)
  7. 一周技术学习笔记(第58期)-如何突破第四章障碍
  8. el-form 表单的校验
  9. html粘性导航原理,position:sticky粘性定位
  10. 设置.md文件默认用Typora打开
  11. 项目管理PV、EV、AC、BAC、EAC、ETC等计算
  12. Socks5代理IP技术详解:如何选择和使用最佳IP代理服务
  13. js点击下载文件的几种情况
  14. Linux学习06---shell基础
  15. 生信识图之 点图进阶-4 (PCA下篇)
  16. 中国共享汽车进军俄罗斯;华为在印度当地推进5G技术;传博通千亿美元收购高通丨价值早报
  17. Android基础入门教程——8.3.18 Canvas API详解(Part 3)Matrix和drawBitmapMash
  18. rk3588对npu的再探索,yolov5使用rknn模型推理教程
  19. scanner用法详解
  20. springboot 加密解密

热门文章

  1. IMAC双系统WIN下截屏快捷键
  2. 亚控科技工作中的编程知识小积累
  3. 【白皮书】以太坊 (Ethereum ):下一代智能合约和去中心化应用平台
  4. 15-mysql数据事务语言DTL
  5. spell拼音码的写法及语句
  6. Mysql 基准测试
  7. Kotlin相关博客资源
  8. 《强化学习周刊》第3期:深度强化学习如何提升鲁棒性和性能
  9. ubuntu18.04系统无法正常连接网络解决办法
  10. Python 豆瓣TOP250 电影爬取