CMT跟踪算法学习笔记(一)
关于这个算法,已经有网友写出笔记。
这位网友用画图的方式总结出了算法的各个流程,并总结了源码中的各个类:http://blog.csdn.net/roamer_nuptgczx/article/details/47953357#plain
这篇博文分析了聚类算法:http://blog.csdn.net/simplelove17/article/details/45116177
这位博主写了四篇博文来分析:http://blog.csdn.net/songrotek/article/details/47662617
http://blog.csdn.net/songrotek/article/details/47775131
http://blog.csdn.net/songrotek/article/details/47830463
http://blog.csdn.net/songrotek/article/details/48022597
这个算法尤其是理论方面,看完后还是有很多不理解,但我想记录下自己能够得到那些启发,这就够了。
在CMT::initialize这个函数中:(1)如何得到前景特征点和背景特征点。(2)为了更好的跟踪,计算特征点的相对中心位置(这个可用于尺寸变化,如何用还不知道)。
还有一点很重要的是,给每个特征点一个编号。实际上,背景点的编号都是-1,前景点顺序编号,这在以后的匹配跟踪融合中都会用到。
在track中,根据前后向光流法得到跟踪到的关键点(可在其他跟踪法中试试这种方法)。
在matchGlobal中,关键点的全局匹配,将当前帧中检测器得到的所有关键点的特征描述与database进行knnMatch匹配(k=2),
每个特征描述子在database寻找最佳的2个匹配结果,并把不符条件的特征点排除。(这个也可以与其他特征结合)
在preferFirst中,融合跟踪和匹配到的点(这个也可以试,不过可能计算量会较大)。
用融合后的点来做旋转和缩放评估,为什么能这样做还不能理解。
在findConsensus中,用聚类的方法来得框内点的中心(还不理解)
在matchLocal中,比较当前帧中检测得到的每一个关键点与第一帧中经过旋转和尺度变换之后的所有前景关键点之间的欧氏距离,小于阈值20则该前景关键点是有
可能匹配上的,将这些可能的前景关键点构造成一个特征描述库database_potential; 将当前帧中检测得到的每一个关键点的特征描述与database_potential进行knnMatch匹配,
每个特征描述子在database_potential寻找最佳的2个匹配结果,排除不稳定的关键点的策略与matchGlobal类似。
再一次融合,将局部匹配的特征点与框内关键点融合,得到最终的关键点。