【问题标题】:Keypoints detection in OpenCV with SIFT使用 SIFT 在 OpenCV 中进行关键点检测
【发布时间】:2018-03-24 12:46:48
【问题描述】:

我在 OpenCV 中对图像进行关键点检测时遇到问题。 例如,如果我有一个 SIFT 检测器,当它检测到图像时,它会检索 1000 个关键点,但是如果我将图像分成两个“子图像”,并且 foreach SIFT 检测到关键点,那么总和不是 1000,而是更少。 对我来说,关键点的总数可以不同但不会太多! 谢谢

【问题讨论】:

  • 欢迎来到 SO!为了获得一些帮助,您应该发布您的代码、错误所在以及您尝试修复它的原因。
  • 我检测到 Mat m 并且关键点转到 kp: sift.detect(m, kp);在我将 m 分成两个子矩阵之后: Mat m2 = m.submat(0,300, 0, 500).clone();垫 m3 = m.submat(300, 480, 500, 640).clone();但如果我现在检测到 sift sift.detect(m2, kp2);筛选。检测(m3,kp3); kp2和kp3之和不是kp!
  • 在您的问题中正确发布您的代码,请阅读this并清理您的问题
  • 因为原图分割线附近有一些关键点。分割成两个子区域后,关键点消失。

标签: opencv image-processing computer-vision sift


【解决方案1】:

这并不是一个真正的问题,但显然内心的问题是这样的:

为什么分离的两个图像具有不同数量的 SIFT 关键点(通常更少),而不是将它们连接成单个图像?

基本答案是特征可以很大,并且可以靠近两个子图像的边界。如果它们被拆分,这些功能将不再存在。确实,不应期望 SIFT 产生相同数量的关键点。如果您将特征严格地视为角落,那么可以肯定——无论哪种方式,您都应该得到大致相同的数量。但有些特征是梯度、粗糙的“斑点”等,很容易被分割图像截断,因此分割图像可以去除这些特征,并且可以类似地复制其他特征。

您通常可以通过仅检查两个子图像边界内的那些特征来验证这一点。如果您移除靠近图像边缘的特征,并仅检查组合图像的同一空间中的特征,您应该会看到两者之间的特征数量相似。

想象一下,如果您将图像分割过程发挥到了极致。图像中通常有 很多 个 SIFT 关键点。如果您将其分解为大量 2x2 图像,您认为您会得到相同数量的关键点吗?当然不是,因为 2x2 图像没有足够的信息来重新创建与完整图像相同的所有特征。

【讨论】:

    猜你喜欢
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多