Image processing 如何计算scikit图像或Mahota中的黑色空间数?

Image processing 如何计算scikit图像或Mahota中的黑色空间数?,image-processing,numpy,scikit-image,mahotas,Image Processing,Numpy,Scikit Image,Mahotas,我有这样一个形象: 在我使用scikit image的骨架化功能对其进行骨架化之后 from skimage import morphology out = morphology.skeletonize(gray>0) 有没有一种方法可以计算黑色空间的数量?(在这张图中为六)除了scikit图像中的背景还是mahotas 使用此输入: 你可以做: >>> from skimage import morphology >>> import nump

我有这样一个形象:

在我使用scikit image的骨架化功能对其进行骨架化之后

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

有没有一种方法可以计算黑色空间的数量?(在这张图中为六)除了scikit图像中的背景还是mahotas

使用此输入:

你可以做:

>>> 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运行此步骤,因为宽前景/线条仍将标记为单个组件。

仅使用scipy.ndimage的解决方案

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()
从scipy导入ndimage作为nd
从matplotlib导入pyplot作为plt
star=nd.imread('/home/jeanpat/Images/star.jpg'))
星=星[:,:,0]
thr=星<120
反=star>119
掩模=nd.形态.二元填充孔(thr)
实验室,n=nd.标签(防*遮罩)
plt.title(str(n)+“检测到的对象”)
plt.imshow(实验室)
plt.show()

你有什么建议吗?为什么我得到[0 1],数量:2;我还尝试了其他图像。我对图像进行了骨架化,因为我需要它用于其他内容。我不明白你所说的“你有什么建议为什么我得到:[0 1],num_components:2;”是什么意思。我不明白为什么在骨架化之后,我总是得到[0 1],num_components:2,而且在它正常工作之前!我需要骨骼化后的组件编号!里格布特。问题在于像素连接。如果查看如何决定像素是否连接,如果选择8个连接的区域,它将溢出薄锯齿边界,如果选择4个连接的区域,则会得到太多的区域,因为前景将有多个标签。这个问题没有出现在我上面使用的输入中,因为图像最初是放大和jpeg压缩的。我可以发布一个软糖来解决这个问题,但是……你应该在骨骼化操作之前数一数组件,以避免麻烦。