我正在研究这个领域以实时获得物体检测。
视频示例:
但他们怎样才能提取筛选关键点并快速匹配它们呢? SIFT提取通常需要第二次
答案 0 :(得分:4)
我是一名OpenIMAJ开发人员,负责制作第一个视频。
我们没有做任何特别想要在该视频中快速匹配的事情,并且SIFT检测和提取是在每一帧的整个过程中进行的。事实上,在我们进行任何优化之前,视频已经完成;该演示的当前版本更加顺畅。我们还有一个带有混合KLT跟踪器的版本,无需在每一帧上执行SIFT,工作速度更快。
正如@Mario所建议的那样,图像大小对提取速度有很大影响,因此处理较小的帧可以带来巨大的成功。其次,在Lowe在SIFT论文中提出的高斯兴趣点定位差异的原始描述中,建议输入图像的大小首先加倍以增加特征的数量。通过不执行这种双倍大小调整,您可以获得较大的性能提升,但代价是可以匹配更少的功能。
代码是开源的(BSD许可证),您可以通过http://www.openimaj.org上的链接获取它。如视频描述中所述,图像处理代码是纯Java;唯一的本机代码是网络摄像头的瘦接口。 current tutorial pdf document中的第7号教程介绍了在OpenIMAJ中使用SIFT的过程。通过执行以下操作可以禁用双倍大小:
DoGSIFTEngine engine = new DoGSIFTEngine();
engine.getOptions().setDoubleInitialImage(false);
答案 1 :(得分:2)
SIFT可以通过多种方式加速:
如果你能买得起近似值,那么你可以得到一个叫做SURF的关键点,它更快(对大多数任务使用积分图像)
您可以在CPU级别使用并行实现(例如OpenCV使用Intel的TBB),也可以在GPU级别使用(google for sift gpu for related code and doc)。
无论如何,Java中没有这些可用(AFAIK),因此您必须使用Java包装器来打开或自行解决。
答案 2 :(得分:2)
一般和第一个想法:询问视频上传者。我们可以假设做了什么或做了什么。它也可能有助于了解您到目前为止所做的工作(例如您的视频分辨率,处理能力,图像准备等)。
我没有特别使用过SIFT,但是在过去的几年里我做了很多物体/运动追踪,所以这更常见。你可能已经尝试了一些观点,我不知道。