在Python中拆分包含多个不规则形状图像的图像

时间:2015-05-17 18:46:25

标签: python image image-processing connected-components

鉴于图像包含几个不规则大小和形状的图像(为简单起见,此处显示为圆圈):

image with images

......我怎么能:

  1. 检测子图像
  2. 将子图像拆分并保存为单独的文件?
  3. enter image description here

    理想情况下,我正在寻找一个python解决方案。我已尝试过连接组件分析"算法和质心测量,但第一次分解给出的非均匀图像,我不知道如何应用第二种来提取单独的图像。

    请注意,我并没有要求将图像分割成大小相同,均匀的部分,这些部分已在SO上被多次询问和回答。

    感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:2)

如果我们可以假设背景是均匀的并且与子图像不同,则以下方法应该有效:

  1. 通过简单地屏蔽背景颜色来执行背景减法(同样,如果子图像的内部部分可以包含背景颜色,则泛洪填充算法在这里可以更好地工作)。

  2. 执行连通组件分析。

  3. 以下是上面给出的图像的python示例:

    from scipy import ndimage
    import matplotlib.pyplot as plt
    
    # Load
    img = ndimage.imread("image.png")
    
    # Threshold based on pixel (0,0) assumed to be background
    bg = img[0, 0]
    mask = img != bg
    mask = mask[:, :, 0]  # Take the first channel for RGB images
    
    # Connected components
    label_im, nb_labels = ndimage.label(mask)
    
    # Plot
    plt.figure(figsize=(9, 3))
    plt.subplot(131)
    plt.imshow(img, cmap=plt.cm.gray)
    plt.axis('off')
    plt.subplot(132)
    plt.imshow(mask, cmap=plt.cm.gray)
    plt.axis('off')
    plt.subplot(133)
    plt.imshow(label_im, cmap=plt.cm.spectral)
    plt.axis('off')
    plt.subplots_adjust(wspace=0.02, hspace=0.02, top=1, bottom=0, left=0, right=1)
    plt.show()
    

    和图像的结果(具有任意形状): enter image description here

    现在,剩下的任务是根据label_im值保存/存储每个子图像。