在非平面上应用单应性

时间:2015-06-04 14:01:44

标签: opencv object-detection homography

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

  1. List item
  2. List item
  3. 在此link中,您可以看到代码。我使用它只是更新图像的名称,所以我们正在做的是以下内容:

    1. 使用SURF从2张图片中获取关键点
    2. 使用SURF描述符描述关键点
    3. 尝试匹配2张图片之间的关键点
    4. 使用匹配关键点列表计算Homography矩阵。
    5. 获取对象角点的坐标。
    6. 应用perspectiveTransform以获取场景图像中的对应项
    7. 在结果点之间画线。
    8. 请注意,图像中大圆圈内绘制的绿线是绘制的线条,代表结果点。

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

      编辑: 这是另一个例子: enter image description here

      我在对象和黄色框上应用了单应性,黄色框只包含我需要的乐器。结果甚至更糟,因为现在它在某种程度上是一个点,你可以在红色圆圈包围的绿点中看到。 此外,我不能从场景中拍摄物体的图像,因为我有很多视频,所以我正在做的是为每个乐器拍摄单独的图像并尝试在场景视频中找到它们。

2 个答案:

答案 0 :(得分:4)

严格地说,你是对的,单应性只映射平面物体的观察。在你的帖子中不是很清楚,但我猜你所展示的匹配是findHomography找到的内部匹配。正如您所说,这种方法适用于平面物体。如果是非平面但刚性的对象,则相当于findFundamentalMat找到的内部匹配(请参阅OpenCV docWikipedia page)。

实际上,使用单应法至少应该提供近似解决方案

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

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

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

[1]:Vondrick,Carl,et al。 “Hoggles:可视化对象检测功能。”计算机视觉(ICCV),2013年IEEE国际会议。 IEEE,2013。(link

答案 1 :(得分:0)

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

根据您的需要尝试以下不同选项:

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

(2)尝试在没有任何背景的情况下裁剪对象图像,但并不总是成功,但即使角度发生变化也能正常工作。

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