什么是光流?
光流就是物体和观测者之间的互相运动,亮度变化的速度矢量,下图两张图片表示了光流的原理。
光流的算法有几个基本不变的假设:
1,光强不变假设;
一元的n阶泰勒公式:
在这里插入图片描述只要前面的一阶,不要后面的,拓展到多元的话,就是图二所呈现的公式。
两边同时除以delta_t,就得到了下面的公式:
u是x方向的速度,v是y方向的速度。
光流算法分类
稀疏光流算法(Sparse optical flow)
对图片中的一些特征比较明显的像素点,角点,边进行跟踪。
稀疏光流算法是H-S算法,它的原理如下图:
稠密光流算法(Dense optical flow)
对图片中所有像素点进行计算。
计算量比较大,也比较慢,但是不存在跟踪的问题。比较重要的是L-K算法,依旧遵循的是光强不变原理I_x·u+I_y·v+I_t=0。
相邻像素点中光流是一样的,即相邻小窗格中所有像素点光流是一样的。
L-K算法
在物体运动很快的情况下,或者有遮挡的情况,会出现跟踪不准的(跟丢)。
“遮挡,旋转,光照不准”会出现错误或不准确。
速度很快的情况,两帧图片之间像素格位置偏差比较大,那么光强不变假设就不成立了。用一种图像金字塔的方法,去使图片满足光强不变假设。(将原来分辨率很大的图片,将它的分辨率不断缩小,直至相邻,就可以用光强不变假设了。)
在最小尺度上,用L-K算法(像素相邻情况)算出一个光流出来。计算出来的光流与上一层计算出的光流组合起来,给上上层用。最终得到一个结合多尺度的最终光流。
这个方法可以比较好的解决速度快的问题。
Farneback算法
不存在跟踪的问题。(对所有的点进行光流,所以它不存在跟踪,遮挡之后也不会存在跟丢的情况)
用到的基本假设是:光流强度不变假设。
光流的应用
1,人体姿态检测;
2,飞行器壁障;(图片扫描时,速度越大,光流越大,越亮,要避开)
3,交通检测,测速;(相似三角形,计算速度)
4,视频补帧,视频减震等。
一些存在的问题
1,自然现象,如烟,火,云,浪花等——光流复杂,计算难度大
2,镜面反射(没有运动意义)
3,光照变化,光源移动或暗光环境(光强小,光流计算复杂)
4,不重要运动,如叶子的摆动(不重要运动占用计算资源)
5,快速运动小物体
6,训练集较小,训练数据难以获取和标记等(深度学习,数据集很难标记)