免责声明:我根本不精通 scikit 图像库,但我使用 MATLAB 解决了类似的问题,因此我在 scikit 中搜索了等效方法,希望下面的发现对您有所帮助。
首先,您可以使用返回 的skimage.measure.labellabel_image
,即所有连接区域都标有相同数字的图像。我相信您应该调用此函数,background=255
因为根据您的描述,图像中的背景似乎是 while 区域(因此值为 255)。
这本质上是一个图像,其中background
像素被分配了值0
,构成每个(连接的)点的像素被分配了一个整数标签的值,因此一个点的所有像素都将被标记为 value 1
,另一个点的像素点将标有值2
,依此类推。下面我将交替提及“斑点”和“标记区域”。
然后,您可以调用skimage.measure.regionprops,它将label_image
上一步中获得的数据作为输入。此函数返回一个列表RegionProperties
(每个标记区域一个),它是标记区域属性的摘要。
取决于你的定义
目标是找到彼此靠近的所有黑点。
RegionProperties
您可以使用不同的字段来帮助解决您的问题:
bbox
为您提供包含该标记区域的边界框的坐标集,
centroid
为您提供该标记区域的质心像素的坐标,
local_centroid
为您提供相对于边界框的质心bbox
(请注意area
,bbox_area
您还可以使用一些属性来决定是否丢弃您可能不感兴趣的非常小的点,从而在比较每对点的接近度时减少计算时间)
如果您正在寻找粗略比较,那么比较每对标记区域之间的centroid
or可能就足够了。local_centroid
否则,您可以使用bbox
坐标来测量任何两个区域的外部边界之间的确切距离。
如果您想根据彼此最接近的每对区域的像素之间的精确coords
距离做出决定,那么您可能必须使用该属性。