0

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

图像与图像

...我怎样才能:

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

在此处输入图像描述

理想情况下,我正在寻找 python 解决方案。我已经尝试过“连接分量分析”算法和质心测量,但第一个会因为给定的不均匀图像而崩溃,我不确定如何应用第二个来提取单独的图像。

请注意,我不是在问关于将图像分割成大小相等、均匀的部分,这在 SO 上已被多次询问和回答。

谢谢你提供的所有帮助。

4

1 回答 1

2

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

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

  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()

和您的图像的结果(具有任意形状): 在此处输入图像描述

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

于 2015-05-17T19:15:52.740 回答