最近加入了一个无人机团队,任务是参加第六届国际无人机飞行器创新大奖赛(UAVGP)。由于需要跑视觉算法,团队买了块英伟达的TX2(壕...)。我做的方案是用色域分割,但是室外环境变化可能会比较大(冷暖,亮暗),所以需要用到白平衡算法让图片直方图保持正常。

TX2

1.算法原理

灰度世界算法假定图片具有大量的色彩变化,于是RGB分量趋近于同一个值K。一般令 K = (Raver+Gaver+Baver)/3,其中Raver,Gaver,Baver分别表示红、 绿、 蓝三个通道的平均值。第二步是计算各通道的增益,如Kr=K/Raver,最后图像中每一个像素点Rnew = R * Kr。意思大概就是如果某个通道平均强度大于三通道的平均强度,就令这个通道的整体强度按比例降低,反之亦然。

另一个算法完美反射算法假设图片中最亮的点就是一面镜子,完美地反射了外部光照,并根据这些白点进行白平衡。它定义为R+G+B的最大值。让这些白点的RGB三个通道按照比例拉伸到255,并将其他的点的三个通道按照同样比例拉伸,超过255的设为255,是一个归一化过程。opencv中的完美反射大概是将白点的比例设为1%,改了个名字叫simpleWB,这样用户就不用调参数了。

2.算法实现

调用opencv中的白平衡算法十分简单(前提是安装了扩展包),只需要创造一个opencv封装好的智能指针,然后再调用相应的create方法,就可以使用了。

/****************************************************************

* WBexample.cpp

* Created by 杨帮杰 on 9/20/18.

* Right to use this code in any way you want without warranty,

* support or any guarantee of it working

* E-mail: yangbangjie1998@qq.com

* Assication: SCAU 华南农业大学

*****************************************************************/

#include

#include

#include

using namespace cv;

using namespace std;

#define PATH "/home/jacob/WBexample/testImage.jpg"

int main()

{

Mat inputImage = imread(PATH);

Mat grayWBImage = Mat::zeros(inputImage.size(),inputImage.type());

Mat simpleWBImage = Mat::zeros(inputImage.size(),inputImage.type());

//灰度世界算法

Ptr grayWB = xphoto::createGrayworldWB();

grayWB->balanceWhite(inputImage, grayWBImage);

//完美反射算法

Ptr simpleWB = xphoto::createSimpleWB();

simpleWB->balanceWhite(inputImage, simpleWBImage);

imshow("inputImage",inputImage);

imshow("grayWBImage",grayWBImage);

imshow("simpleWBImage",simpleWBImage);

waitKey();

return 0;

}

3.结果分析

结果如下

原图像

灰度世界

完美反射

完美反射算法的结果还是不错的,灰度世界嘛。。。咳咳。两个算法都有一定的局限性,后者比较好但速度会慢一点。顺带给自己挖个坑,下面链接中的有一个算法opencv没有实现,网上也没有找到比较好的开源代码。等哪天编程能力上去了,一定把这个算法实现一遍。

python白平衡-OpenCV3 自动白平衡:灰度世界和完美反射算法相关推荐

  1. 基于灰度世界、完美反射、动态阈值等图像自动白平衡算法

    文章目录 一.灰度世界算法 二.完美反射算法 三.动态阈值算法 一.灰度世界算法 C++ 算法: 灰度世界 灰度世界算法(Gray World)是以灰度世界假设为基础的,该假设认为对于一幅有着大量色彩 ...

  2. 基于灰度世界、完美反射、动态阈值等图像自动白平衡算法的原理、实现及效果...

    原文:http://www.cnblogs.com/Imageshop/archive/2013/04/20/3032062.html 白平衡是电视摄像领域一个非常重要的概念,通过它可以解决色彩还原和 ...

  3. 白平衡之完美反射算法

    一.算法背景   白平衡是图像处理比较常见的一个概念,在采集图像的过程中,相机的感光元件或者镜头会对原始色彩造成影响,而白平衡技术通常可以用来校正这种光线和镜头对颜色影响.所以现在先记录一个白平衡算法 ...

  4. JavaCV - 白平衡(完美反射算法)

    一.效果图 如图所示,左侧为原图,右侧是白平衡处理后的图片 二.实现原理 白平衡的意义在于,对在特定光源下拍摄时出现的偏色现象,通过加强对应的补色来进行补偿,使白色物体能还原为白色. 完美反射算法是白 ...

  5. 自动白平衡之完美反射算法原理及C++实现

    自动白平衡之完美反射算法原理及C++实现 原文:https://blog.csdn.net/just_sort/article/details/85982871 算法原理 https://www.cn ...

  6. OpenCV-白平衡(完美反射算法)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 实现原理 白平衡的意义在于,对在特定光源下拍摄时出现的偏色现象,通过加强对应的补色来进行补偿,使 ...

  7. 白平衡算法简单原理以及灰色世界、完美反射实现

    这篇文章是一次课程作业,发到网上以供参考,由于时间有点紧张导致有些部分不够详尽以及有些方法没有实现,之后如果有机会再进行补充. 作业要求 以下两题任选一道完成,自选合适的测试图象,提交代码.实验结果和 ...

  8. 九大神招,让Python里数据分析神器Jupyter,完美升华

    九大神招,让Python里数据分析神器Jupyter,完美升华 Notebook作为一款经典的交互式编辑器,在视图数据等实时展示方面有其特有的优势,但是相比pycharm.sublime等编辑工具,J ...

  9. Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示

    Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示 第一章:霍夫变换检测圆 ① 实例演示1 ② 实例演示2 ③ 霍夫变换函数解析 第二章:Python + openc ...

  10. 聚类 python 代码_不足 20 行 Python 代码,高效实现 k-means 均值聚类算法

    下载好向圈APP可以快速联系圈友 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 不足 20 行 Python 代码,高效实现 k-means 均值聚类算法-1.jpg (143.81 KB, ...

最新文章

  1. 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用
  2. 如何在vsc上选择远程miniconda特定的虚拟环境中的Python解释器(4步)
  3. 人群计数--Switching Convolutional Neural Network for Crowd Counting
  4. mysql 多个if_mysql if else 多条件
  5. 数据结构_队列_mindmap
  6. c语言千位数字,C语言怎样提取一个数的十位个位百位千位?
  7. caffe模型weightsfeatureMap 可视化(c++)
  8. ABAP的一个新关键字 - How does FROM lookup_tab work
  9. 第三课《让简历有点色彩》
  10. RUNOOB python练习题31 根据已输入的字符判断星期几
  11. C#学习记录3上——类的封装,继承,多态
  12. 韩春雨要“翻案”?最新研究发现NgAgo具有DNA编辑能力
  13. css设置字体颜色、文本对齐方式、首行缩进、文本装饰、列表样式、鼠标样式、禁止文本域拖拽、轮廓线、块级元素对齐方式、文字溢出设置
  14. TypeScript泛型接口
  15. vue cli3 一键 build 区分测试环境和正式环境
  16. php MySQLDB类
  17. c51单片机跑马灯汇编语言,单片机的跑马灯简单汇编程序
  18. 平面杆系结构有限元分析C++程序设计思路
  19. 4.2.4 Kafka高级特性解析(物理存储、稳定性:事物,控制器,可靠性,一致性,_consumer_offsets、延时队列、自定义重试队列)
  20. 多元有序logistic回归分析_多元Logistic_回归分析解析.ppt

热门文章

  1. linux 函数式编程,理解函数式编程_Linux编程_Linux公社-Linux系统门户网站
  2. ASP.NET 实现简单的注册界面(使用asp控件)
  3. 你的 Mac 用对了吗?推荐一些 Mac 上比较好用的软件
  4. 程序员5种编程入门方法,如何快速学会一门编程语言?
  5. 深度学习经历过程(caffe学习过程)
  6. 计算机图形学:中点划线法(任意斜率)
  7. vue获取facebook用户邮箱、头像并登录
  8. WIN10系统的ghost备份还原的详细步骤
  9. 计算机相关的外文参考文献,计算机英文参考文献
  10. win8.1安装密钥