用于增强现实的 SURF 和 SIFT 替代对象跟踪算法
在此处询问并尝试了 SURF 和 SIFT 后,它们都显得不够高效足够快地生成兴趣点以跟踪来自相机的流。
例如,SURF 需要大约 3 秒才能生成图像的兴趣点,这对于跟踪来自网络摄像头的视频来说太慢了,在手机上使用它时会更糟。
我只需要一个跟踪特定区域、其比例、倾斜等的算法,我可以在此基础上进行构建。
谢谢
After asking here and trying both SURF and SIFT, neither of them seams to be efficient enough to generate interest points fast enough to track a stream from the camera.
SURF, for example, takes around 3 seconds to generate interest points for an image, that's way too slow to track a video coming from a web cam, and it'll be even worse when using it on a mobile phone.
I just need an algorithm that tracks a certain area, its scale, tilt, etc.. and I can build on top of that.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
如果您想对想要跟踪的区域进行更严格的限制,则可以使用更简单的算法。您肯定知道,ARToolKit 速度相当快,但只能跟踪具有非常清晰的框架的黑白标记。
如果您想要一个(某种程度上)通用的跟踪器,您可能需要检查 PTAM。该网站 (http://www.robots.ox.ac.uk/~ gk/PTAM/)目前已关闭,但这里有一个在 iPhone 上运行的精彩视频 (http://www.youtube.com/watch?v=pBI5HwitBX4)
You can use a simpler algorithm if you would make stricter restrictions on the area you would like to be tracked. As you surely know, ARToolKit is pretty fast, but only tracks black and white markers with a very distinct frame.
If you want a (somewhat) general purpose tracker, you may want to check PTAM. The site (http://www.robots.ox.ac.uk/~gk/PTAM/) is currently down, but here's a snazzy video of it working on an iPhone (http://www.youtube.com/watch?v=pBI5HwitBX4)
正如其他人提到的,三秒似乎异常长。在 Mahotas 库中测试 SURF 实现时,我发现平均需要 0.36 秒,即使有一些相当大的图像(例如1024x768)。这是 Python 和 C 的混合,所以我想其他一些纯 C 实现会更快。
As others have mentioned, three seconds seems unusually long. While testing the SURF implementation in the Mahotas library, I found that it took on average 0.36sec, even with some fairly large images (e.g. 1024x768). And that's with a mix of Python and C, so I'd imagine some other pure-C implementations would be even faster.
我在 http://computer-vision-talks.com/2011/01/comparison-of-the-opencvs-feature-detection-algorithms-2/
看看。可能会有用!
根据该比较,并且正如mirror2image 也建议的那样,FAST 是最佳选择。但这取决于您真正想要实现的目标。
I found this nice comparison of each feature detection algorithms at http://computer-vision-talks.com/2011/01/comparison-of-the-opencvs-feature-detection-algorithms-2/
Have a look. It might be useful!
According to that comparison, and as mirror2image has also suggested, FAST is the best choice. But it depends on what you really want to achieve.
我在受限嵌入式系统中使用的一种选择是使用更简单的兴趣点检测器:例如 FAST 或 Shi-Tomasi。我使用 Shi-Tomasi,因为我的目标是 FPGA,并且可以轻松地以像素速率运行它,而不需要大量缓冲。
然后使用 SURF 生成识别特征周围图像块的描述符,并将其用于匹配和跟踪目的。
One option I've used in constrained embedded systems is to use a simpler interest point detector: FAST or Shi-Tomasi for example. I used Shi-Tomasi, as I was targetting an FPGA and could easily run it at pixel rate with no significant buffering required.
Then use SURF to generate the descriptors for the image patch around the identified features and use those for matching and tracking purposes.
我怀疑你的 SURF 用法可能需要一些改变?
这里是 MIT 论文的链接,该论文介绍如何使用 SURF 进行增强现实应用在移动设备上。
摘抄:
您可能还想研究 OpenCV 的算法,因为它们已经过尝试和测试。
根据应用程序的约束,您也许能够降低这些算法的通用性,以查找图像中的已知 POI 和标记。
跟踪 POI 的一部分是估计其从 2D 图像中的一个点到另一个点的矢量,然后选择性地确认它仍然存在于该处(通过像素特征)。可以使用相同的方法来跟踪(而不是重新扫描整个图像)POI 和 POI 组/对象透视和旋转变化。
网上有大量关于在 2D 投影上跟踪对象的论文(在许多情况下达到严重倾斜)。
祝你好运!
I suspect your SURF usage may need some alteration?
Here is a link to an MIT paper on using SURF for augmented reality applications on mobile devices.
Excerpt:
You might also want to look into OpenCV's algorithms because they are tried and tested.
Depending on the constraints of your application, you may be able to reduce the genericness of those algorithms to look for known POIs and markers within the image.
Part of tracking a POI is estimating its vector from one point in the 2D image to another, and then optionally confirming that it still exists there (through pixel characteristics). The same approach can be used to track (not re-scan the entire image) for POI and POI group/object perspective and rotation changes.
There are tons of papers online for tracking objects on a 2D projection (up to a servere skew in many cases).
Good Luck!
您应该尝试 FAST 检测器
http://svr-www.eng .cam.ac.uk/~er258/work/fast.html
You should try FAST detector
http://svr-www.eng.cam.ac.uk/~er258/work/fast.html
我们正在一个项目中使用 SURF,我们发现 OpenSURF 优于 OpenCV 的 SURF 实现在原始速度和性能方面。我们还没有测试重复性和准确性,但它的速度要快得多。
更新:
我只是想指出,您不必在每个帧中执行 SURF 匹配步骤,您可以简单地每隔一帧执行一次,然后在不执行 SURF 的帧中插入对象的位置。
We are using SURF for a project and we found OpenSURF to outmatch OpenCV's SURF implementation in raw speed and performance. We still haven´t tested repeatability and accuracy, but it is way faster.
Update:
I just wanted to point out that you needn't perform a SURF match step in each frame, you could simply do it every other frame and interpolate the position of the object in the frame you don't execute SURF on.