1.光流
参考:https://blog.csdn.net/lanbing510/article/details/40451317
光流的概念是Gibson在1950年首先提出来的。它是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。一般而言,光流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。其计算方法可以分为三类:
A | b |
---|---|
(1) | 基于区域或者基于特征的匹配方法; |
(2) | 基于频域的方法; |
(3) | 基于梯度的方法; |
1.1 光流基于光度不变假设,具体来说分成三个假设
A | b |
---|---|
(1) | 亮度恒定,前后帧观测到的对应点的灰度值一样。 |
(2) | 时间连续或者运动位移小。 |
(3) | 空间一致性:邻近点有相似运动,同一子图像的像素点具有相同的运动。 |
1.2 这里有两个概念需要解释:
- 运动场,其实就是物体在三维真实世界中的运动;
- 光流场,是运动场在二维图像平面上的投影。
1.3光流法用于目标检测的原理:
给图像中的每个像素点赋予一个速度矢量,这样就形成了一个运动矢量场。在某一特定时刻,图像上的点与三维物体上的点一一对应,这种对应关系可以通过投影 来计算得到。根据各个像素点的速度矢量特征,可以对图像进行动态分析。如果图像中没有运动目标,则光流矢量在整个图像区域是连续变化的。当图像中有运动物体时,目标和背景存在着相对运动。运动物体所形成的速度矢量必然和背景的速度矢量有所不同,如此便可以计算出运动物体的位置。
1.3.1需要提醒的是,利用光流法进行运动物体检测时,计算量较大,无法保证实时性和实用性。
目标跟踪流程(需要结合目标检测算子)
(1)对一个连续的视频帧序列进行处理;
(2)针对每一个视频序列,利用一定的目标检测 方法,检测可能出现的前景目标;(例如SURF算子)
(3)如果某一帧出现了前景目标,找到其具有代表性的关键特征点(可以随机产生,也可以利用角点来做特征点);
(4)对之后的任意两个相邻视频帧而言,寻找上一帧中出现的关键特征点在当前帧中的最佳位置,从而得到前景目标在当前帧中的位置坐标;
(5)如此迭代进行,便可实现目标的跟踪;
对于二维的运动场,单靠一个像素无法确定其运动矢量。根据假设三, 我们可以使用当前像素的邻域像素添加更多约束条件;如经典的Horn-Schunck光流法所加的运动平滑约束。
同时,对于二维运动场,只需包含两条或以上边缘则可以解系统方程,因此在进行光流法时,先选择好跟踪的特征点,如harris角点。
KLT是一种非常知名的光流方法。
近年来研究跟踪的方法很多,各种算法几乎层出不齐,主要可将其分为两类目标跟踪算法,一类是传统的目标跟踪算法,一类是基于深度学习的跟踪方法,而基于传统的目标跟踪算法比较经典的有粒子滤波(pf)、Mean Shift目标跟踪算法以及KLT的跟踪算法又或者叫做Lucas光流法,这些方法各有优缺点:
粒子滤波(pf):能够比较好的在全局搜索到最优解,但其求解速度相对较慢,由于其是基于颜色直方图的计算,对颜色相近的物体不太能够区别开来。
Mean Shift算法:很容易陷入局部最优,但其跟踪的速度很快。
基于以上两种算法各自的优缺点,常常有人将Mean Shift和pf做结合,恰好在很多方面能够达到互补的效果。
二、 KLT跟踪算法
查看本博客另外一篇文章:局域不变特征的目标跟踪,SURF算子,KLT算子
https://blog.csdn.net/djfjkj52/article/details/104433936
举个5*5图像的例子
假设对像素点来说,周围的像素点都保持相同的移动距离假设窗口大小为5*5,则对于25个窗口内的像素点来说,就会如下等式成立:
得到下面的过约束等式:
即:
采用最小二乘法求解
:
这样我们就得到了KLT光流等式与该窗口的Hessian矩阵:
Hessian矩阵的特征值
和
都很大的时候才能满足空间一致性的条件,所以:
在这里shi-tomasi提出了一种Good Features的角点。他们认为,对称矩阵Z包含了噪声和良好条件,当矩阵Z的两个特征值较小时,意味着以该点为中心W为窗口内是平坦的;一大一小的两个特征值,对应无方向的纹理特征;两个较大的特征值代表了当前点是角点或者椒盐纹理。所以,当两个特征值大于一定阈值时,选择这个点作为角点。
我们回想一下一张图中有的三种点:
1,边缘;2,团块;3,角点。
参考:https://zhuanlan.zhihu.com/p/88033287
O.0尝试
尝试1:Face Detection and Tracking Using the KLT Algorithm
参考地址:https://ww2.mathworks.cn/help/vision/examples/face-detection-and-tracking-using-the-klt-algorithm.html
pointTracker = vision.PointTracker('MaxBidirectionalError', 2);
最近热播《大主宰》,就把欧阳娜娜拿出来实验。
尝试2:good features to track
Kanade–Lucas–Tomasi (KLT) feature tracker is a famous algorithm in computer vision to track detected features (corners) in images.
尝试3:http://cecas.clemson.edu/~stb/klt/
人脸跟踪检测
。。。需要时间消化
详见:https://blog.csdn.net/qq_43409984/article/details/89606194