背景が均一でサブ画像とは異なると仮定できる場合、次のアプローチが機能するはずです。
背景色を単純にマスキングして背景減算を実行します (また、サブイメージの内部に背景色を含めることができる場合は、塗りつぶしアルゴリズムがうまく機能します)。
連結成分分析を実行します。
上記の画像の 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 値に基づいて各サブイメージを保存/保存することです。