在OpenCV 2.4.3的参考手册中, KeyPoint::class_id
被描述为"object id that can be used to clustered keypoints by an object they belong to" .
由于缺乏我对'keypoint'的充分了解,我无法理解 class_id
的目的是什么 .
我的另一个问题是,通过使用特征检测器,描述符和匹配器,我们可以检测训练图像中查询对象的匹配关键点 . 但是如何在训练图像中分割出查询对象 . 我们可以使用抓取或分水岭算法吗?如果有,怎么样?
回答任何一个问题都会有所帮助 .
提前致谢...
2 回答
实际上,
class_id
成员字段可用于存储您发现对每个关键点有用的任何信息 . 正如文档所述,您可以存储检测到的对象的id .例如,你有一个图像,从中提取关键点(例如使用SURF),运行一些具有这些功能的对象检测器,结果是每个输入要素现在包含在
class_id
中相应对象的id,如果它们是-1,则为-1没有任何对象 . 我实际上并不知道这个字段是否被某些OpenCV函数填充,或者只是供您使用 .关于第二个问题,匹配功能可能不足以分割您的对象,因为功能可以位于对象内部,因此您无法获得有关轮廓的任何信息 . 但是,如果您有关于该对象的更多信息,这是一个很好的起点 . 例如,如果您知道对象是平面(墙上的海报),则可以使用要素匹配来计算输入和训练图像之间的单应性 . 这会给你一个大纲 . 或者,例如,大量紧密匹配的特征可以指示对象的存在 . 由此,您可以尝试其他颜色分割,边缘匹配等 .
我找到了一个关键点的
class_id
的简短描述 .OpenCV说:
class_id
是对象ID,可用于通过它们所属的对象对关键点进行聚类 .这是link.
希望这会有所帮助 .