博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV3 自动白平衡:灰度世界和完美反射算法
阅读量:6823 次
发布时间:2019-06-26

本文共 1890 字,大约阅读时间需要 6 分钟。

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

img_c08f57677bac0c2607881da75f29a5b3.png
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.结果分析

结果如下

img_6bede3d3ff7e0449d61f103a2d03bafe.png
原图像
img_2b8008cd0e763bf53afcd4fb9ccd581b.png
灰度世界
img_c7d9d12beefc7e588418a2ee7bf288e0.png
完美反射

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

References:

转载地址:http://ddlzl.baihongyu.com/

你可能感兴趣的文章
windows 2008 R2 64位系统杀毒软件
查看>>
我的友情链接
查看>>
netty学习笔记
查看>>
更改win7文件类型默认操作
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Webgoat 笔记总结 Web Services
查看>>
Linux Mysql安装部署
查看>>
多线程 概述
查看>>
Nagios达到阈值时发不出告警邮件问题总结
查看>>
互联网公司应该要有的技术人员配置和开发事项清单
查看>>
Android开发中如何改变RadioButton背景图片和文字的相对位置
查看>>
如何给Linux (Fedora Ubuntu等)安装字体
查看>>
MySQL大小写敏感问题和命名规范
查看>>
java 获取时间 和 转换时间
查看>>
Redis主从复制
查看>>
mysql-5.6.26 主主复制
查看>>
SpringMVC权限管理
查看>>
ET120以太网环回器介绍
查看>>
ActiveMQ快速入门
查看>>