给定一个包含几个不规则大小和形状的图像的图像(为简单起见,此处显示为圆形):
...我怎样才能:
- 检测子图像
- 将子图像拆分并保存为单独的文件?
理想情况下,我正在寻找 python 解决方案。我已经尝试过“连接分量分析”算法和质心测量,但第一个会因为给定的不均匀图像而崩溃,我不确定如何应用第二个来提取单独的图像。
请注意,我不是在问关于将图像分割成大小相等、均匀的部分,这在 SO 上已被多次询问和回答。
谢谢你提供的所有帮助。
给定一个包含几个不规则大小和形状的图像的图像(为简单起见,此处显示为圆形):
...我怎样才能:
理想情况下,我正在寻找 python 解决方案。我已经尝试过“连接分量分析”算法和质心测量,但第一个会因为给定的不均匀图像而崩溃,我不确定如何应用第二个来提取单独的图像。
请注意,我不是在问关于将图像分割成大小相等、均匀的部分,这在 SO 上已被多次询问和回答。
谢谢你提供的所有帮助。
如果我们可以假设背景是统一的并且与子图像不同,那么以下方法应该有效:
通过简单地掩盖背景颜色来执行背景减法(另外,如果子图像的内部部分可以包含背景颜色,则洪水填充算法在这里会更好地工作)。
执行连通分量分析。
这是上面给出的图像的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 值保存/存储每个子图像。