【问题标题】:Extract each object after edge detection using sobel filter使用 sobel 滤波器进行边缘检测后提取每个对象
【发布时间】:2017-02-26 08:58:29
【问题描述】:

Sobel 边缘检测:

原图:

我使用 sobel 边缘检测技术来识别给定图像中每个对象的边界。如何使用这些边界提取原始图像中的对象。我们可以忽略像素数较小的对象。

【问题讨论】:

  • 这很难。最好的事情是你尝试找到适合边缘的矩形,或者类似的东西。另外,我个人更喜欢Canny,你不妨试试
  • 使用 Sobel 不足以解决您的问题。请参阅 Yves Daoust 的回答。

标签: python opencv image-processing image-segmentation scikit-image


【解决方案1】:

您所追求的称为图像分割。由于家具元素之间的低对比度以及纹理和阴影,您的案例看起来特别困难。

您还将意识到您需要定义所谓的“对象”,并且您会意识到在这个场景中隔离家具几乎是不可能的。

另一个坏消息:Sobel 和 Canny 都不足以解决这个问题,因为真正的边缘在某些地方会不连续,并且会有很多错误的响应。

在我看来,目前的技术水平无法解决您的问题。

【讨论】:

    【解决方案2】:

    什么

    您想将cv2.findContours()hierarchy enabled 一起使用。试试 retr_ccomp。

    为什么

    这将尝试找到可以填充的区域。或者更准确地说,是封闭轮廓中的孔。由于 sobel 滤波器返回软边缘,我们想要检测软边缘之间的闭合轮廓,这将只是边缘本身。 是对象。

    如何

    您将同时获得 contours(点列表)和 hierarchy(元组列表)。如果 hierarchy[i][3] 为正,则 contours[i] 有父级,因此是一个洞,因为 ccomp 只允许 2 个级别。

    我应该指出,我们已经研究图像分割问题 50 年了,但没有人有很好的解决方案。你会发现这种方法对于任意场景往往是不可靠的。

    【讨论】:

      猜你喜欢
      • 2016-04-01
      • 1970-01-01
      • 2020-10-21
      • 2018-12-12
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多