opencv用shi-Tomasi角点检测实现目标追踪

本篇博客主要介绍一下基于shi-tomasi角点检测的追踪算法。应用场景是摄像头固定物体移动的情况下。

首先我们来介绍一下角点:

特征检测与匹配是Computer Vision 应用总重要的一部分,这需要寻找图像之间的特征建立对应关系。
点,也就是图像中的特殊位置,是很常用的一类特征,点的局部特征也可以叫做“关键特征点”(keypoint feature),或“兴趣点”(interest point),或“角点”(conrner)。

角点的描述:

一阶导数(即灰度的梯度)的局部最大所对应的像素点;
两条及两条以上边缘的交点;
图像中梯度值和梯度方向的变化速率都很高的点;

角点处的一阶导数最大,二阶导数为零,指示物体边缘变化不连续的方向

在介绍Shi-Tomasi角点检测之前先介绍一下Harris角点检测的原理

当一个窗口在图像上移动,在平滑区域如图(a),窗口在各个方向上没有变化。在边缘上如图(b),窗口在边缘的方向上没有变化。在角点处如图(c),窗口在各个方向上具有变化。Harris角点检测正是利用了这个直观的物理现象,通过窗口在各个方向上的变化程度,决定是否为角点。


将图像窗口平移[u,v]产生灰度变化E(u,v):


采用泰勒展开:


代入:



计算M矩阵的特征值lambda1,2


定义角点响应函数 R 为:


其中K为系数在0.04~0.06之间,如果R>threshold 则定义为角点。

Harris 角点检测效果:


Shi-Tomasi角点检测:

由于Harris算法的稳定性和k值有关,Shi-Tomasi发现,角点的稳定性和矩阵M的较小特征值有关,改进的Harris算法即直接计算出矩阵M的特征值,用较小的特征值与阈值比较,大于阈值的即为强特征点。

Shi-Tomasi 角点检测效果:


LK跟踪算法:

KLT角点跟踪算法全称Kanade-Lucas-Tomasi Tracking,又称LK跟踪算法。是经典的角点跟踪算法。算法假设目标在视频流中,只产生一致性的小位移,并且目标的灰度变化不大。那么算法必须是在以下3个假设成立的前提下发挥良好的效果。

(1)亮度恒定。
(2)时间连续或者运动位移小。

(3)空间一致性,邻近点有相似运动,保持相邻。

这么假设的理由是如果判断一个视频的相邻两帧I、J在某局部窗口w上是一样的,则在窗口w内有:I(x, y, t) = J(x‘, y’, t+τ),

亮度恒定的假设(假设1)即为了保证其等号成立不受亮度的影响,假设2是为了保证KLT能够找到点,假设3则为对于同一个窗口中,所有点的偏移量都相等。定义同一目标出现在两帧图像i、j中,如果图像中两点匹配,那么以这两点为中心,w为窗口存在极小的灰度平方差,定义为


将上式改为对称的形式


这个式子的含义,即找到两副图像中,在W窗口中,I、J的差异,其中I以x-d/2为中心,J以x+d/2为中心,w/2为半径的一个矩形窗口间的差异。函数ε(d)要取得最小值,这个极值点的导数一定为0,即:


泰勒展开式:




代入问题转化为


其中g等于:



即可以看做

Zd=e



其中Z为2*2的一个矩阵,在这里shi-tomasi提出了一种Good Features的角点。他们认为上式中的对称矩阵Z包含了噪声和良好条件,当矩阵Z的两个特征值较小时,意味着以该点为中心W为窗口内是平坦的;一大一小的两个特征值,对应无方向的纹理特征;两个较大的特征值代表了当前点是角点或者椒盐纹理。所以,当两个特征值大于一定阈值时,选择这个点作为角点。

   公式推理部分结束

    由于大而连贯的运动是普遍存在的情况,所以LK光流正因为这个原因在实际中的跟踪效果并不是很好。我们需要大的窗口来捕获大的运动,而大窗口往往违背运动连贯的假设!而图像金字塔可以解决这个问题,于是乎,金字塔Lucas-Kanade就提出来了。 金字塔Lucas-Kanade跟踪方法是:在图像金字塔的最高层计算光流,用得到的运动估计结果作为下一层金字塔的起始点,

重复这个过程直到到达金字塔的最底层。这样就将不满足运动的假设可能性降到最小从而实现对更快和更长的运动的跟踪。

代码的实现流程:


实验的效果,把U盘从左边移动到右边,绿色线为移动的轨迹:


猜你喜欢

转载自blog.csdn.net/xiexu911/article/details/80328953