【问题标题】:Finding the Sky/Ground separation in OpenCV在 OpenCV 中寻找天/地分离
【发布时间】:2015-08-04 04:15:57
【问题描述】:

我正在尝试检测图像中的地平线,并返回天空的蒙版(或反转为地面)。虽然它似乎有很多用途,但我正在努力寻找一个好的解决方案。更糟糕的是,这似乎是一个如此简单的问题,大多数人在检测地平线方面都没有问题。

以下内容更难:

  • 在所使用的图像(山地景观)中,地平线很少是一条直线,因此边缘检测和霍夫线变换将不起作用。
  • 它需要在所有光照条件下工作。阈值处理(如 Otsu 阈值处理)有效,但在日出前等低对比度条件下效果不佳。固定值阈值不起作用,因为全天光线变化太大。

我现在尝试的是使用滤色器将其限制为低饱和度,然后找到轮廓并检测并填充最大的轮廓。在此之后,我用洪水填充轮廓上方的区域。这确实有效,但我仍然无法想象这个问题会如此困难。

我正在使用 OpenCV 包装器在 Delphi XE8 中编写代码,但欢迎使用任何其他语言的答案或想法!

【问题讨论】:

  • “我正在使用 OpenCV 包装器在 Delphi XE8 中编写代码” - 哦,这听起来很糟糕,因为您可能无法使用更高级的 c++ 功能,例如 CLAHE 或 bioinspired::retina用于照明归一化
  • most humans have NO issue in detecting the horizon - 大多数人在模式识别和场景理解方面都有一些自然或学习的经验。
  • 你可能已经用过谷歌了?给我一些链接和stackoverflow.com/questions/4705837/horizon-detection-algorithm(其中再次包含了一些谷歌链接)
  • 您能否提供一些提示,说明必须检测到 hoizons 的范围?例如展示一些您希望算法正确检测地平线的示例图像、一些边界情况和一些不需要检测地平线的图像。
  • 哇,这绝对不是我在谈论“地平线检测”时所期望的(它实际上只是天空检测,根本不是地平线)......你能假设图像总是对齐,所以天空在图像的顶部,地面在底部?

标签: opencv detection


【解决方案1】:

据我了解,您正在寻找一条水平线 - 如果存在的话 - 将专门的天空部分与其他部分分开。

我会逐行计算图像统计信息,因此是水平直方图或类似的。

它甚至可以基于全局阈值或自定义“天空”功能。以某种方式(强度、色调)决定像素是否是天空,并在扫描线内计算它们。

然后水平一半的图像,对两个部分的行值求和,并决定你的“水平线”应该移动的方向。这部分也减半并继续,直到你到达正确的行。通过这样的二分搜索,您应该能够提取哪条线将天空与前景分开。如果是第一行:没有天空,如果是最后一行:全是天空。

这个问题肯定有其他方法,所以我期待看到更多建议。

【讨论】:

    【解决方案2】:

    我的答案完全不同。您可以将 OpenCV 与磁罗盘链接,将天空与地面分开。

    您可以在 iOS 的 OpenCV 中执行此操作。将您的 OpenCV 项目与 iPhone 中的指南针链接。然后像指南针应用程序那样将天空与地面分开。

    http://imgur.com/bwLpaOC

    【讨论】:

    • 但是如果我理解你的意思,这意味着你正在分析的照片必须是用 iPhone 的相机拍摄的,据我所知,这不是 OP 想要的。不错的创意方法。
    • 我知道这有点挑战性。但它值得。
    【解决方案3】:

    您可以尝试卷积深度神经网络,例如http://mi.eng.cam.ac.uk/projects/segnet/,或者训练您自己的类似网络。

    【讨论】:

      猜你喜欢
      • 2012-01-16
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 2021-10-29
      • 2012-01-19
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      相关资源
      最近更新 更多