【发布时间】:2023-04-04 19:35:01
【问题描述】:
我正在研究这个领域以实时获得物体检测。
视频示例:
但是他们怎么能如此快地提取筛选关键点并匹配它们呢?
SIFT提取一般需要一秒
【问题讨论】:
标签: java c++ image-processing opencv
我正在研究这个领域以实时获得物体检测。
视频示例:
但是他们怎么能如此快地提取筛选关键点并匹配它们呢?
SIFT提取一般需要一秒
【问题讨论】:
标签: java c++ image-processing opencv
我是一名 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);
【讨论】:
SIFT 可以通过多种方式加速:
如果你能负担得起近似值,那么你可以推导出一个称为 SURF 的关键点,它的速度要快得多(对大多数任务使用积分图像)
您可以在 CPU 级别(例如 OpenCV 使用 Intel 的 TBB)或 GPU 级别(谷歌搜索 sift gpu 以获取相关代码和文档)使用并行实现。
无论如何,这些在 Java 中都不可用(AFAIK),因此您必须使用 Java 包装器来打开 CV 或自己解决。
【讨论】:
一般和第一个想法:询问视频上传者。我们可以假设完成了什么或如何完成。了解您到目前为止所做的工作也可能会有所帮助(例如,您的视频分辨率、处理能力、图像准备等)。
我没有专门使用过 SIFT,但在过去几年里我做了很多对象/运动跟踪,所以这更笼统。你可能已经尝试了一些点,我不知道。
【讨论】: