【问题标题】:Applying homography on non planar surface在非平面上应用单应性
【发布时间】:2015-08-19 04:31:11
【问题描述】:

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

在这个link,你可以看到代码。我使用它只是更新图像的名称,所以我们正在做的事情如下:

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

请注意,图中大圆圈内画的绿线是代表结果点的线。

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

已编辑: 这是另一个例子:

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

【问题讨论】:

    标签: opencv object-detection homography


    【解决方案1】:

    严格来说,您是对的,单应性仅映射对平面对象的观察。您的帖子中不是很清楚,但我猜您显示的匹配是findHomography 找到的内部匹配。正如您所说,这种方法适用于平面对象。在非平面但刚性对象的情况下,等效的将是由findFundamentalMat 找到的内部匹配项(请参阅OpenCV docWikipedia page)。

    不过,在实践中,使用单应性至少应该提供一个近似解

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

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

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

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

    【讨论】:

    • 感谢您的贡献。为什么它不适用于非平面对象?
    • 简单地说,单应性是将图像中看到的平面映射到另一个平面的变换模型。对于非平面对象,您应该使用基本矩阵,它代表另一种类型的变换。
    • 谢谢..因为你的回答是我收到的最好的..我会给你赏金..
    • 好的,谢谢。如果仍有不清楚的地方(与此主题相关),请不要犹豫,表达您的疑问。或许你可以看看this tutorial on homographies
    • 谢谢..看起来很有趣..会研究一下。
    【解决方案2】:

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

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

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

    (2)尝试在没有任何背景的情况下裁剪物体图像,并不总是成功,但即使角度改变也可以。

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

    【讨论】:

    • 感谢您的贡献。我的想法是我必须检测场景中出现的乐器列表,因此我为每个乐器拍摄了图像并尝试检测它们。
    • 您的场景图像如何?它们是从固定相机位置拍摄的一系列图像吗?
    • 您可以尝试从场景图像中裁剪单个对象,然后将它们与场景图像进行比较吗?这很有帮助,它也适用于其他场景。
    • @Maystro 你有没有找到任何特征检测方法来为你的项目获得成功的结果?我也有一个类似的项目要做。谢谢。
    • 还没有。。我没有解决这种问题。
    猜你喜欢
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 2015-10-04
    • 2018-05-21
    • 1970-01-01
    • 2021-10-09
    相关资源
    最近更新 更多