【问题标题】:Challenging image segmentation: background and objects are similar具有挑战性的图像分割:背景和对象相似
【发布时间】:2016-06-03 04:29:34
【问题描述】:

我是图像分割的新手,但我需要这样做才能为机器学习分类器获取数据库。

基本上我有一个类似于这张图片的视频:

我的工作是识别前景中的奶牛,或者至少识别任何奶牛。我意识到存在遮挡问题,但首先我想正确分割一头孤独的母牛,就像它周围有红色矩形的那头(手绘)。

在诸如此类的不太具有挑战性的问题中,我通过为每个像素添加阈值来进行区分,该阈值对于对象变为 (0,0,0) 或对于背景变为 (255,255,255):

然后我用相同的值标记像素以获取类并获得足够大的“斑点”的矩形。

对于上面的图像,这种方法不起作用,因为对象和背景相似 + 有很多阴影、侧光等,所以我不知道如何处理它。欢迎任何建议。

【问题讨论】:

  • 您考虑过使用边缘检测器吗?
  • 你需要研究语义分割
  • 非常难的问题。您是否有很多图像来构建大型训练系统并使用深度学习?
  • 看看像this one或this这样的作品
  • 谢谢@Shai,结果就是这样)

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


【解决方案1】:

我意识到这是一个旧线程,但我想建议一种解决此类问题的方法。

您可以尝试使用基于纹理的分割,因为草地背景与牛的纹理不同。

查看this link,其中图像的纹理能量特征是根据 Laws 的技术定义的。

这是 Python 中的法律技术的实现。它通过定义用于提取图像中不同特征的 2D 内核来工作,例如边缘、波纹、斑点及其组合。下面的函数返回9张图片,可以从中提取纹理特征。

def laws(array):

    # Define the 1D kernels
    L5 = np.array([1,4,6,4,1]) # level
    E5 = np.array([-1,-2,0,2,1]) # edge 
    S5 = np.array([-1,0,2,0,-1]) # spot
    R5 = np.array([1,-4,6,-4,1]) # ripples

    # Generate 2D kernels
    L5E5 = np.outer(L5,E5)
    E5L5 = np.outer(E5,L5)

    L5R5 = np.outer(L5,R5)
    R5L5 = np.outer(R5,L5)

    E5S5 = np.outer(E5,S5)
    S5E5 = np.outer(S5,E5)

    S5S5 = np.outer(S5,S5)

    R5R5 = np.outer(R5,R5)

    L5S5 = np.outer(L5,S5)
    S5L5 = np.outer(S5,L5)

    E5E5 = np.outer(E5,E5)

    E5R5 = np.outer(E5,R5)
    R5E5 = np.outer(R5,E5)

    S5R5 = np.outer(S5,R5)
    R5S5 = np.outer(R5,S5)


    return (0.5*(correlate(array, L5E5) + correlate(array, E5L5)), \
            0.5*(correlate(array, L5R5) + correlate(array, R5L5)), \
            0.5*(correlate(array, E5S5) + correlate(array, S5E5)), \
            correlate(array, S5S5), \
            correlate(array, R5R5), \
            0.5*(correlate(array, L5S5) + correlate(array, S5L5)), \
            correlate(array, E5E5), \
            0.5*(correlate(array, E5R5) + correlate(array, R5E5)), \
            0.5*(correlate(array, R5S5) + correlate(array, S5R5)))

【讨论】:

    【解决方案2】:

    我会尝试拍两张照片。一张没有奶牛的“静态”背景照片,然后是第二张有奶牛的照片。然后你可以减去这两个图像。我对 python 不太熟悉,但 imagemagick 可以轻松区分图像(http://www.imagemagick.org/Usage/compare/)。理想情况下,“差异化”图像将隔离奶牛。从那里你可以得到幻想并尝试各种边缘检测算法等......

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-09-04
      • 2020-05-04
      • 2015-07-16
      • 1970-01-01
      • 2017-02-13
      • 2014-07-08
      • 2014-08-30
      • 1970-01-01
      • 2021-09-18
      相关资源
      最近更新 更多