在Python中从图像中提取连接的对象

时间:2013-06-05 10:09:42

标签: python image scipy

我有一个灰度png图像,我想从我的图像中提取所有连接的组件。 一些组件具有相同的强度,但我想为每个对象分配一个唯一的标签。 这是我的形象

enter image description here

我试过这段代码:

img = imread(images + 'soccer_cif' + str(i).zfill(6) + '_GT_index.png')
labeled, nr_objects = label(img)
print "Number of objects is %d " % nr_objects

但是我只使用了三个对象。 请告诉我如何获取每个对象。

2 个答案:

答案 0 :(得分:10)

J.F. Sebastian shows a way识别图像中的对象。但是,它需要手动选择高斯模糊半径和阈值:

import scipy
from scipy import ndimage
import matplotlib.pyplot as plt

fname='index.png'
blur_radius = 1.0
threshold = 50

img = scipy.misc.imread(fname) # gray-scale image
print(img.shape)

# smooth the image (to remove small objects)
imgf = ndimage.gaussian_filter(img, blur_radius)
threshold = 50

# find connected components
labeled, nr_objects = ndimage.label(imgf > threshold) 
print "Number of objects is %d " % nr_objects

plt.imsave('/tmp/out.png', labeled)
plt.imshow(labeled)

plt.show()

enter image description here

使用blur_radius = 1.0,它会找到4个对象。 使用blur_radius = 0.5,找到了5个对象:

enter image description here

答案 1 :(得分:2)

如果对象的边框完全清晰,并且你有一个img的二进制图像,你可以避免高斯过滤,只需这一行:

labeled, nr_objects = ndimage.label(img)