opencv - 为什么KeyPoint "detector"和 "extractor"是不同的操作?

标签 opencv sift surf

基本上你必须先做一个:

SurfFeatureDetector surf(400);
surf.detect(image1, keypoints1);

然后是:

surfDesc.compute(image1, keypoints1, descriptors1);

为什么检测和计算是两种不同的操作?
检测后计算不会产生冗余环路?

我自己发现 .compute 在我的应用程序中是最昂贵的。

.detect 

0.2 秒

内完成
.compute

需要 ~1 秒。有什么方法可以加快 .compute 的速度吗?

最佳答案

关键点的检测只是在图像中选择被认为是“好的特征”的点的过程。

这些关键点的描述符的提取是一个完全不同的过程,它编码该特征的属性,例如与邻居的对比等,因此它可以与来自不同图像、不同场景和方向的其他关键点进行比较。

您描述关键点的方式对于成功匹配可能至关重要,而这确实是关键因素。您描述关键点的方式也决定了匹配速度。例如,您可以将其描述为 float 或二进制序列。

关于opencv - 为什么KeyPoint "detector"和 "extractor"是不同的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129015/

相关文章:

opencv - 固定数量的关键点用于类似图像检测

opencv - 从索贝尔确定图像梯度方向?

opencv - pkg-config --cflags opencv : No such file or directory

image-processing - SIFT预测

objective-c - 我将如何在 objC 中实现 SURF?

iphone - 在iPhone ios 4上显示来自opencv的关键点

opencv - 在MacOS Mojave上使用Python3.9安装OpenCV时出错

c++ - 特殊标牌标注字符

python - OpenCV 将角对齐到网格

c++ - SIFT detectAndCompute 抛出 ipp 异常