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

Split image containing multiple, irregularly shaped images in Python

给定一个图像,其中包含多个不规则大小和形状的图像(为简单起见,此处显示为圆圈):

...我怎样才能:

  1. 检测子图像
  2. 拆分子图像并将其另存为单独的文件?

理想情况下,我正在寻找 python 解决方案。我已经尝试了 "connected component analysis" 算法和质心测量,但第一个算法对于像给定的那些不均匀图像进行了分解,我不确定如何应用第二个算法来提取单独的图像。

注意,我不是在问将图像分割成大小相同、统一的部分,这个问题已经在 SO 上被问过和回答过很多次了。

感谢您提供的任何帮助。

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

  1. 通过简单地屏蔽背景颜色来执行背景减法(另外,如果子图像的内部可以包含背景颜色,flood-fill算法在这里会更好)。

  2. 执行连通分量分析。

下面是 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()

你的图像结果(任意形状):

现在,剩下的任务是 save/store 每个子图像基于 label_im 个值。