转自:http://blog.csdn.net/dreamd1987/article/details/7907437 因为研究需要,仔细看了下代码,看看有什么可以利用的地方。 整体来说Kanade-Lucas-Tomasi Feature Tracker的方法就是首先找去特征点,之后用光流去跟踪的方法。 Opencv中已经有了example,大家可以运行下看效果,同时Homepage:http://www.ces.clemson.edu/~stb/klt/ 上有源码,整个的流程跟Opencv差不多。 我们以官网上的原程序中的example1进行分析:(剩下的几个例子整体流程都差不多,仅仅是目的不一样) 首先都是建立两个结构体: tc就是跟踪的中用到的一些参数在选特征点的时候也有用到。 fl就是我们说到的特征点了,包括了特征值和特征点在图像中的位置。 之后使用: 使用上面的函数选取特征点 使用这个函数在img2中寻找对应的特征点。 一次循环就可以实现跟踪了。 那么出现了一个问题:特征点是怎么定义的: 我们分析KLTSelectGoodFeatures这个函数: 函数中又使用了:
为什么要*3呢?其实pointlist中存放了图像中点的位置x,y和特征值的大小val。 特征值是什么呢?这个特征就是对应像素点的梯度值。 代码中的特征值取得时每个像素点临域梯度值的加权值。 之后程序来到了函数: 这里通过比较每个像素点val和对应阈值的大小来提取特征点: min_eigenvalue就是所使用的阈值,在tc中定义 那么程序的修改,我们需要根据自己的特征对这个阈值进行修改,同时对featurelist进行如上的修改,其实主要还是x,y,val三个值的修改。 不对的地方请大家指正。 (责任编辑:蚂蚁团队) |