【问题标题】:what is the meaning and use of class member class_id of class cv::KeyPoint in opencv?opencv中类cv::KeyPoint的类成员class_id的含义和用途是什么?
【发布时间】:2013-08-01 14:42:30
【问题描述】:

在 OpenCV 2.4.3 的参考手册中,KeyPoint::class_id 被描述为“对象 ID,可用于通过它们所属的对象来聚集关键点”。

由于我对“关键点”缺乏足够的了解,我无法理解class_id 的目的是什么。

我的另一个问题是,通过使用特征检测器、描述符和匹配器,我们可以检测训练图像中查询对象的匹配关键点。但是如何在训练图像中分割出查询对象。我们可以使用grabcut或分水岭算法吗?如果是,怎么做?

任何一个问题的答案都会有所帮助。

提前谢谢...

【问题讨论】:

    标签: opencv image-processing image-segmentation object-detection keypoint


    【解决方案1】:

    class_id 成员字段实际上可用于存储您认为对每个关键点有用的任何信息。正如文档所说,您可以存储例如检测到的对象的 id。

    例如,您有一张图像,从中提取关键点(例如使用 SURF),使用这些特征运行一些对象检测器,结果是每个输入特征现在在class_id 中包含相应对象的 id,或 -1 如果它们未连接到任何对象。我实际上不知道这个字段是由某些 OpenCV 函数填充还是仅供您使用。

    关于您的第二个问题,匹配特征可能不足以分割您的对象,因为特征可以位于对象内部,因此您无法获得有关轮廓的任何信息。不过,如果您有关于该对象的更多信息,这是一个很好的起点。例如,如果您知道您的对象是平面的(墙上的海报),您可以使用特征匹配来计算输入图像和训练图像之间的单应性。这会给你一个大纲。或者,例如,大量紧密匹配的特征可能是对象存在的指示。由此,你可以尝试一些其他的颜色分割、边缘匹配等。

    【讨论】:

    • @ChoronoTrigger 感谢您的帮助。但 class_id 对我来说还不是很清楚。您所说的“运行具有这些功能的对象检测器”是什么意思?
    • 我的意思是任何算法都可以将该字段用于信息目的。例如,我用 c++ 编写了一个对象检测算法,我告诉你,如果你给我一个关键点的集合,我会修改它们的 class_id 字段,告诉你每个关键点属于哪个对象。
    • 据我所知,KAZE 和 AKAZE 检测器使用关键点的class_id 字段来存储一些信息。这是在计算 KAZE/AKAZE 描述符时检索的。大多数(全部?)其他检测器将其设置为-1
    【解决方案2】:

    我找到了一些关于关键点 class_id 的简短描述。

    OpenCV 说:

    class_id 是对象 ID,可用于按所属对象对关键点进行聚类。

    这里是link.

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多