在 OpenCV 2.4.3 的参考手册中KeyPoint::class_id
被描述为“对象 ID,可用于通过它们所属的对象来聚集关键点”。
由于我对“关键点”缺乏足够的了解,我无法理解class_id
.
我的另一个问题是,通过使用特征检测器、描述符和匹配器,我们可以检测训练图像中查询对象的匹配关键点。但是如何在训练图像中分割出查询对象。我们可以使用grabcut或分水岭算法吗?如果是,如何?
任何一个问题的答案都会有所帮助。
提前致谢...
在 OpenCV 2.4.3 的参考手册中KeyPoint::class_id
被描述为“对象 ID,可用于通过它们所属的对象来聚集关键点”。
由于我对“关键点”缺乏足够的了解,我无法理解class_id
.
我的另一个问题是,通过使用特征检测器、描述符和匹配器,我们可以检测训练图像中查询对象的匹配关键点。但是如何在训练图像中分割出查询对象。我们可以使用grabcut或分水岭算法吗?如果是,如何?
任何一个问题的答案都会有所帮助。
提前致谢...
在class_id
实践中,成员字段可用于存储您认为对每个关键点有用的任何信息。正如文档所说,您可以存储例如检测到的对象的 id。
例如,您有一张图像,从中提取关键点(例如,使用 SURF),使用这些特征运行一些对象检测器,结果是每个输入特征现在都包含在class_id
相应对象的 id 中,或者如果它们是 -1不依附于任何物体。我实际上不知道该字段是否由某些 OpenCV 函数填充,还是仅供您使用。
关于您的第二个问题,匹配特征可能不足以分割您的对象,因为特征可以位于对象内部,因此您无法获得有关轮廓的任何信息。不过,如果您有关于该对象的更多信息,这是一个很好的起点。例如,如果您知道您的对象是平面的(墙上的海报),您可以使用特征匹配来计算输入图像和训练图像之间的单应性。这会给你一个大纲。或者,例如,大量紧密匹配的特征可能是对象存在的指示。从那,你可以尝试一些其他的颜色分割,边缘匹配等。