在非平面表面上应用单应性

May*_*tro 4 opencv object-detection homography

据我所知,计算机视觉中的单应性(投影变换)可用于检测图像中的对象,但我所见过的所有示例都在平面对象上。单应性仅适用于平面物体吗?或者它可以检测任何类型的物体?我问是因为我试图找到下面的物体(它是一个非平面表面物体)但没有成功:

  1. 项目清单
  2. 项目清单

在此链接中,您可以看到代码。我使用它,因为它只是更新图像的名称,所以我们正在做的是以下内容:

  1. 使用 SURF 从 2 个图像中获取关键点
  2. 使用 SURF 描述符描述关键点
  3. 尝试匹配 2 个图像之间的关键点
  4. 使用匹配的关键点列表来计算单应矩阵。
  5. 获取对象角点的坐标。
  6. 应用透视变换在场景图像中得到它们的对应物
  7. 在结果点之间画线。

请注意,图像中大圆圈内绘制的绿线是用于表示结果点的线。

根据我上面展示的内容,在我看来,我对 Homography 的理解以及可以应用它的地方有些不清楚,因为这种示例非常简单并且不起作用。我目前正在研究 OpenCV 代码以准确了解他们如何估计它,但它不会很快。所以,有没有人知道 OpenCV 如何计算这种转换?或者任何可以在这种情况下提供帮助的参考资料?

编辑: 这是另一个例子: 在此处输入图片说明

我在对象和黄色盒子上应用了单应性,黄色盒子只包含我需要的仪器。结果更糟,因为现在它以某种方式成为一个点,正如您在被红色圆圈包围的绿点中看到的那样。此外,我无法为场景中的物体拍摄图像,因为我有很多视频,所以我所做的是为每个乐器拍摄单独的图像,并尝试在场景视频中找到它们。

BCo*_*nic 5

严格来说,你是对的,单应性只映射平面物体的观察。您的帖子中不是很清楚,但我的猜测是您显示的匹配项是findHomography. 正如您所说,这种方法适用于平面物体。在非平面但刚性物体的情况下,等效的将是由findFundamentalMat(参见OpenCV 文档维基百科页面)找到的内部匹配。

尽管如此,在实践中,使用单应性至少应该提供一个近似解

在我看来,你的问题更多地与糟糕的 SURF 匹配有关,而不是与单应变换的选择有关。在查看您显示的这对图像时,这一点非常清楚:只有几个点与您要检测的对象相匹配,而其中大部分与场景中的各种事物相匹配。

您选择的方法的主要问题之一是您处理的不是刚性物体,而是可变形物体:细丝的手柄可以移动,由于细丝内部的液体,外观会发生非线性变形,等等... 这种变形会使目标图像中提取的 SURF 描述子与参考图像中提取的描述子大不相同,因此无法匹配。看一看 [1],它们提供了关于为什么描述符碰巧匹配或不匹配的很好的见解。

对于您的问题,替代方法可能是局部匹配(例如使用小相关补丁)、颜色匹配、形状匹配、深度学习等。

[1]:冯德里克、卡尔等人。“霍格斯:可视化对象检测功能。” 计算机视觉 (ICCV),2013 年 IEEE 国际会议。IEEE,2013 年。(链接


小智 0

SURF 适用于任何类型的对象,我测试了您在我的图像上使用的相同代码,结果如下。据我了解,该算法并不总是支持在另一个场景中查找对象。如果从场景图像中提取对象图像,效果会很好

根据您的需要尝试这些不同的选项:

(1) 如果您有各种系列的源图像,您可以从场景图像中提取所需的对象并找到其在其他场景图像中的位置。

(2) 尝试裁剪没有任何背景的物体图像,这并不总是成功,但即使角度改变也会起作用。

(3) 有时更改 minHessian 值,并根据关键点计数,仅检测到较少的关键点,您将有机会检测到图像。