2014-01-06 8 views
2

У меня есть изображение, как это:Как я могу подсчитать количество черных пространств в изображении scikit или mahotas?

star

после того как я скелетирую его функции скелетируют scikit Изображения в

from skimage import morphology 
out = morphology.skeletonize(gray>0) 

enter image description here

Существует способ для подсчета количества черных пространств ? (на этом рисунке шесть), кроме фона в scikit-изображении или mahotas?

ответ

5

С этим входом:

enter code here

Вы можете сделать:

>>> from skimage import morphology 
>>> import numpy as np 
>>> from scipy.misc import imread 
>>> im = imread("Bju1h.png") 
>>> im = im > 0 
>>> np.unique(morphology.label(im)) 
array([0, 1, 2, 3, 4, 5, 6, 7]) 
>>> num_components = len(np.unique(morphology.label(im))) - 2 
>>> num_components 
6 

Я вычтите 2 игнорировать фоновый компонент и компонент переднего плана/линии. С вашего исходного изображения вы можете пропустить шаг скелета и просто запустить его с помощью im = gray > 0, так как широкий передний план/линия по-прежнему будет помечен как один компонент.

+0

scipy.ndimage Есть ли у вас какие-либо предложения, почему я получаю: [0 1], num_components: 2; Я пробовал также с другими изображениями. Я скелетонировал изображение, потому что он мне нужен для других вещей. – postgres

+0

Он работает как вы, если я не скелетонизирую. – postgres

+0

Я не понимаю, что вы подразумеваете под «У вас есть какие-либо предположения, почему я получаю: [0 1], num_components: 2;». – YXD

2

Раствор с монотерапией

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

star = nd.imread('/home/jeanpat/Images/star.jpg') 
star = star[:,:,0] 
thr = star < 120 
anti = star >119 
mask = nd.morphology.binary_fill_holes(thr) 

lab, n = nd.label(anti*mask) 
plt.title(str(n)+' objects detected') 
plt.imshow(lab) 
plt.show() 

enter image description here