Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有挑战性的图像分割:背景和对象相似_Python_Image_Image Processing_Image Segmentation_Scikit Image - Fatal编程技术网

Python 具有挑战性的图像分割:背景和对象相似

Python 具有挑战性的图像分割:背景和对象相似,python,image,image-processing,image-segmentation,scikit-image,Python,Image,Image Processing,Image Segmentation,Scikit Image,我不熟悉图像分割,但我需要这样做来为机器学习分类器获取一个数据库 基本上,我有一个类似于此图像的视频: 我的工作是识别前景中的奶牛,或者至少是任何奶牛。我意识到有一个遮挡问题,但对于初学者,我想正确地分割一头孤独的奶牛,就像一头周围有红色矩形的奶牛(手绘) 在较不具挑战性的问题中,例如,我通过为每个像素添加一个阈值来进行区分,该阈值对于对象变为(0,0,0),对于背景变为(255255): 然后我用相同的值标记像素以获得类,并获得足够大的“blob”的矩形 对于上面的图像,这种方法将不起作用

我不熟悉图像分割,但我需要这样做来为机器学习分类器获取一个数据库

基本上,我有一个类似于此图像的视频:

我的工作是识别前景中的奶牛,或者至少是任何奶牛。我意识到有一个遮挡问题,但对于初学者,我想正确地分割一头孤独的奶牛,就像一头周围有红色矩形的奶牛(手绘)

在较不具挑战性的问题中,例如,我通过为每个像素添加一个阈值来进行区分,该阈值对于对象变为(0,0,0),对于背景变为(255255):

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


对于上面的图像,这种方法将不起作用,因为对象和背景相似+有很多阴影、侧面照明等,所以我不确定如何接近它。欢迎提出任何建议

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


希望有帮助

我意识到这是一个古老的思路,但我想提出一种解决此类问题的方法

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

看看图像的纹理能量特征是根据Laws的技术定义的

这里是用Python实现的laws技术。它的工作原理是定义用于提取图像中不同特征的二维核,例如边缘、涟漪、斑点及其组合。下面的函数返回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)))

你是否考虑过使用边缘检测器?你需要研究语义分割非常困难的问题。你有很多图片可以用来制作一个大的培训系统并使用深度学习吗?看看这样的作品,例如,或者感谢@Shai,这就是它的工作原理)