JDB*_*nes 9 opencv computer-vision
我有兴趣使用OpenCV制作动作跟踪应用程序,并且在线提供了大量信息.然而,使用诸如Lucas-Kanade之类的稀疏光流算法,我在特征匹配和跟踪特征之间有点混淆.考虑到这一点,我有以下问题:
如果我指定要跟踪的像素区域,那么两者(特征匹配和光流)之间的主要区别是什么?我对实时跟踪不感兴趣,如果这有助于澄清任何假设.
另外,由于我没有进行实时跟踪,使用密集光流(Farneback)来跟踪我指定的感兴趣区域中的像素是否更好?
谢谢.
Tob*_*nst 17
我想补充一些关于这个主题的想法,因为我发现这也是一个非常有意义的问题.如上所述,特征匹配是一种基于以下方面的技术:
功能检测步骤,返回一组所谓的特征点.这些特征点位于具有显着图像结构的位置,例如,如果您使用SIFT或SURF,则在使用FAST或blob类结构时会出现类似边缘的结构.
第二步是匹配.从两个不同图像中提取的特征点的关联.匹配基于局部视觉描述符,例如梯度或二进制模式的直方图,其在特征位置周围被局部提取.描述符是特征向量,并且关联的特征点对是最小特征向量距离对.
大多数特征匹配方法是尺度和旋转 不变的,并且对于照明的变化(例如由阴影或不同的对比度引起)是鲁棒的.因此,这些方法可以应用于图像序列,但更常用于对齐从不同视图或不同设备捕获的图像对.特征匹配方法的缺点是难以定义特征匹配的位置和特征对(在图像序列中是运动矢量)通常非常稀疏.此外,匹配方法的子像素精度非常有限,因为大多数检测器被精细分级到整数位置.
根据我的经验,特征匹配方法的主要优点是它们可以计算非常大的运动/位移.
OpenCV提供了一些功能匹配方法,但是有很多更新,更快,更准确的在线方法,例如:
相反,光流方法依赖于亮度恒定性的最小化和附加约束,例如平滑等.因此,它们基于一系列连续帧的空间和时间图像梯度来导出运动矢量.因此,它们更适合于图像序列, 而不是从非常不同的视点捕获的图像对.用光学流向量估计运动的主要挑战是大运动,遮挡,强烈的照明变化以及物体外观的变化和mostyl 低运行时间.然而,光流方法可以是高度精确的并且计算密集的运动场,其尊重共享场景中的对象的运动边界.
然而,不同光流方法的准确性是非常不同的.诸如PLK(Lucas Kanade)之类的局部方法通常不太准确,但是仅允许计算预先选择的运动矢量,因此可以非常快.(近年来,我们已经做了一些研究来提高本地方法的准确性,请参阅此处以获取更多信息).
主要的OpenCV主干提供全局方法,例如Farnback.但这是一种安静的过时方法.尝试OpenCV contrib trunk,这是更多的方法.但为了更好地了解最新方法,请查看公共光流基准.在这里,您将找到代码和实现,例如:
但是从我的观点来看,我不会在早期阶段拒绝特定的方法匹配或光流.尽可能多地尝试在线实施,看看什么是最适合您的应用程序.
特征匹配使用特征描述符在特征描述符空间中使用最近邻居搜索来匹配特征(通常).基本思想是你有描述符向量,并且两个图像中的相同特征应该在描述符空间中彼此靠近,所以你只需匹配那种方式.
光流算法不会查看描述符空间,而是查看要素周围的像素块并尝试匹配这些块.如果你熟悉密集的光流,那么稀疏的光流就会产生密集的光流,但是在特征点周围的小片图像上.因此,光流假设亮度恒定,即像素亮度在帧之间不变化.此外,由于您正在查看相邻像素,因此您需要假设您的要素的相邻点与您的要素的移动方式类似.最后,由于它在小补丁上使用密集流算法,因此它们移动的点在原始特征位置的图像中不会很远.如果是,则建议使用金字塔分辨率方法,在此之前缩小图像,然后执行此操作,以便曾经是16像素的平移现在是2像素平移,然后您可以使用找到的变换向上扩展你的先前.
因此,当使用比例不完全相同的模板,或者图像和模板中存在透视差异,或者转换是否很大时,特征匹配算法总体上要好得多.但是,您的匹配仅与您的特征检测器完全一样好.在光流算法上,只要它在正确的位置看,转换就可以非常精确.它们的计算成本都很高; 光流算法是一种迭代方法,因此它们很昂贵(虽然您认为金字塔方法可以通过运行更多图像来消耗更多成本,但实际上它可以在某些情况下使其更快以达到所需的精度),并且最近邻居搜索也很昂贵.光流算法OTOH在变换很小时可以很好地工作,但如果你的场景中的任何东西与你的光线混淆或者你得到一些不正确的像素(比如说,即使是轻微的遮挡)也可以真正地将其抛弃.
使用哪一个肯定取决于项目.对于我使用卫星图像进行的项目,我使用了密集的光流,因为我正在使用的沙漠地形图像没有足够精确的特征(位置),并且不同的特征描述符看起来相对相似,所以搜索特征空间不是给了很多很棒的比赛.在这种情况下,光流是更好的方法.但是,如果您在城市的卫星图像上进行图像对齐,而建筑物可能会遮挡部分场景,则会有许多功能保持匹配并提供更好的效果.
在OpenCV的卢卡斯,金出武雄教程不给一大堆的洞察力,但应该让你的代码在朝着正确的方向与上述的初衷.
| 归档时间: |
|
| 查看次数: |
6335 次 |
| 最近记录: |