鉴于图像包含几个不规则大小和形状的图像(为简单起见,此处显示为圆圈):
......我怎么能:
理想情况下,我正在寻找一个python解决方案。我已尝试过连接组件分析"算法和质心测量,但第一次分解给出的非均匀图像,我不知道如何应用第二种来提取单独的图像。
请注意,我并没有要求将图像分割成大小相同,均匀的部分,这些部分已在SO上被多次询问和回答。
感谢您提供任何帮助。
答案 0 :(得分: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值保存/存储每个子图像。