光流适用在连续的图像系列(视频流)中,描述本身或画面目标的运动状态;在目标跟踪、运动分析、甚至slam中都有广泛应用。
opencv里就有不少光流算法,其中很经典也是当前被调用最多的的Lucas-Kanade算法;参看
calcOpticalFlowPyrLK(...)
2006年,Edward Rosten在各种慢速角点检测中给出了一种快速角点检测方案,取名FAST;后续也有相关改进。
http://www.edwardrosten.com/work/fast.html
http://www6.in.tum.de/Main/ResearchAgast
可以参看opencv
FastFeatureDetector
FAST角点重点强调速度快,角点的质量不如Harris、SIFT、SURF等慢速角点;可是天下那啥,为快不破,于是火了,在各种实时系统中或追求速度的系统中,都有他的身影,甚至随后还发展了不少与之配套的二值特征描述ORB,BRIEF,BRISK等。
2014年,Matthieu Garrigues,Video Extruder A real-time semi dense point tracker,给出了一种基于FAST的光流方法,速度+性能很是惊艳。其中为每个FAST角点制定16维灰度描述,梯度下降搜索,以及块光流估计是其成功的亮点。不过他不关注角点分布。
Video%20Extruder%20A%20real-time%20semi%20dense%20point%20tracker
2017年CVPR,有篇文章JiaWang Bian,GMS: Grid-based Motion Statistics for Fast, Ultra-Robust Feature Correspondence;介绍如果更好的筛选匹配点。其中本质的思想就是局部刚体约束,处在同一局部的特征点要有一致性运动(光流),否则剔除;该方法在一些复杂运动目标,或孤立点对上,有局限性。
https://github.com/JiawangBian/GMS-Feature-Matcher
有了上面种种,在实际应用中,希望角点稀疏的同时,尽可能均匀分布在画面的各个区域(对SLAM特别有好处);于是设计如下方案:
1. 金字塔结构(有下往上匹配)-> 满足快速运动目标
2. FAST角点,网格滤波,尽量均匀分布 -> 稀疏,但均匀,可设定期望角度数,demo展示默认2048个
3. 16维梯度描述 + 梯度下降搜索 -> 相比Matthieu Garrigues,描述提取可以更简单
4. 局部方向一致性约束 -> 类GMS约束
5. 自动FAST角点补缺 -> 维持稀疏下的稠密度,保证有期望数目的种子点去做后续跟踪
Demo介绍:
运行程序,可以看到界面;
[V] - 快捷键,选择测试视频流
[C] - 快捷键,打开usb摄像头
选择测试数据,即可看到相关效果。
DEMO下载链接
http://pan.baidu.com/s/1bo203fx
如果运行出错,请自行安装VC_RedistInstaller.exe