findHomography使用opencv
findHomography usage opencv
我正在使用 opencv c++ 并且是新用户。我对对象检测问题很感兴趣。到目前为止,我已经研究并在静止 camera.After 尝试 k 均值和背景减法的视频中实现了稀疏光流(Lucas Kanade 方法)的使用,我决定转向一个更困难的问题,即移动相机。
到目前为止,我研究了一些文档,发现我可以使用 cv::findHomography 来查找视频帧序列中的异常值或异常值,然后从返回值中了解什么是运动由于相机运动和物体运动引起的。此外,我可以使用 SURF 功能来跟踪一些对象,然后确定其中哪些是好点。
但是,我想知道如何实现这个理论。例如,我是否应该使用第一帧作为基本事实并使用 SURF 检测某些特征,然后对视频的其余部分使用 findHomography 每一帧?欢迎任何 ideas/help !
从移动相机检测移动物体是一项非常具有挑战性的任务,需要对多视图几何有扎实的理解,此外,关于此主题的可用信息较少(例如,关于运动结构的信息),因此请注意!
无论如何,单应矩阵不是检测移动物体的好选择(除非你 100% 确定你的背景可以用一个平面足够准确地表示)。您可能应该使用基本矩阵或三焦点张量。
Fundamental matrix is computed from point correspondences between 2 frames. It associates points on one image with lines on other image (so called epipolar lines), and this way it is independent from scene structure. After you have obtained F matrix using some robust estimation method, like RANSAC or LMEDS(RANSAC似乎更适合这种任务),可以计算每个点的重投影误差。脱离场景独立运动的物体,F矩阵无法准确描述,误差较大。因此,从两帧图像匹配中计算出的 F 矩阵异常值可以被认为是移动物体。不过请注意 - 这种方法不会检测到沿对极线移动的物体,因为它们的视差也可以用某个深度级别来描述。
Trifocal tensor 对沿对极线移动的物体没有 depth/motion 的模糊性,但它更难估计并且不包含在 OpenCV 中。它可以从超过 3 帧的对应关系中计算出来,它的用法在概念上可以描述为从 2 个视图对一个点进行三角测量,然后在第三个视图上计算重投影误差。
至于匹配 - 我仍然认为 LK tracking 如果您使用视频序列,它会比 SURF 匹配更好,因为在那种情况下您不需要将非常远的点视为匹配,并且跟踪通常比检测+匹配更快。
我正在使用 opencv c++ 并且是新用户。我对对象检测问题很感兴趣。到目前为止,我已经研究并在静止 camera.After 尝试 k 均值和背景减法的视频中实现了稀疏光流(Lucas Kanade 方法)的使用,我决定转向一个更困难的问题,即移动相机。
到目前为止,我研究了一些文档,发现我可以使用 cv::findHomography 来查找视频帧序列中的异常值或异常值,然后从返回值中了解什么是运动由于相机运动和物体运动引起的。此外,我可以使用 SURF 功能来跟踪一些对象,然后确定其中哪些是好点。
但是,我想知道如何实现这个理论。例如,我是否应该使用第一帧作为基本事实并使用 SURF 检测某些特征,然后对视频的其余部分使用 findHomography 每一帧?欢迎任何 ideas/help !
从移动相机检测移动物体是一项非常具有挑战性的任务,需要对多视图几何有扎实的理解,此外,关于此主题的可用信息较少(例如,关于运动结构的信息),因此请注意!
无论如何,单应矩阵不是检测移动物体的好选择(除非你 100% 确定你的背景可以用一个平面足够准确地表示)。您可能应该使用基本矩阵或三焦点张量。
Fundamental matrix is computed from point correspondences between 2 frames. It associates points on one image with lines on other image (so called epipolar lines), and this way it is independent from scene structure. After you have obtained F matrix using some robust estimation method, like RANSAC or LMEDS(RANSAC似乎更适合这种任务),可以计算每个点的重投影误差。脱离场景独立运动的物体,F矩阵无法准确描述,误差较大。因此,从两帧图像匹配中计算出的 F 矩阵异常值可以被认为是移动物体。不过请注意 - 这种方法不会检测到沿对极线移动的物体,因为它们的视差也可以用某个深度级别来描述。
Trifocal tensor 对沿对极线移动的物体没有 depth/motion 的模糊性,但它更难估计并且不包含在 OpenCV 中。它可以从超过 3 帧的对应关系中计算出来,它的用法在概念上可以描述为从 2 个视图对一个点进行三角测量,然后在第三个视图上计算重投影误差。
至于匹配 - 我仍然认为 LK tracking 如果您使用视频序列,它会比 SURF 匹配更好,因为在那种情况下您不需要将非常远的点视为匹配,并且跟踪通常比检测+匹配更快。