如何在python中获得voronoi边缘图

问题描述 投票:0回答:1

我想为点注释(核位置的二进制图像)创建一个voronoi边缘图。我使用here中的代码创建voronoi边缘图,但结果显示在图像shown here中。我只需要voronoi边缘。以下是代码

Voronoi边缘图

def viro(img):
 label_point=img
 h, w = label_point.shape
 points = np.argwhere(label_point>0)
 vor = Voronoi(points)
 regions, vertices = voronoi_finite_polygons_2d(vor)
 box = Polygon([[0, 0], [0, w], [h, w], [h, 0]])
 region_masks = np.zeros((h, w), dtype=np.int16)
 edges = np.zeros((h, w), dtype=np.bool)
 count = 1
 masks= np.zeros((h, w), dtype=np.bool)
 for region in regions:
            polygon = vertices[region]
            # Clipping polygon
            poly = Polygon(polygon)
            poly = poly.intersection(box)
            polygon = np.array([list(p) for p in poly.exterior.coords])
            mask = poly2mask(polygon[:, 0], polygon[:, 1], (h, w))            
            edge = mask * (~morphology.erosion(mask, morphology.disk(1)))
            edges += edge
            region_masks[mask] = count
            count += 1

 # fuse Voronoi edge and dilated points
 label_point_dilated = morphology.dilation(label_point, morphology.disk(1))
 label_vor = np.zeros((h, w, 3), dtype=np.uint8)
 label_vor[:, :, 0] = (edges > 0).astype(np.uint8) * 255
 label_vor[:, :, 1] = (label_point_dilated > 0).astype(np.uint8) * 255

 return label_vor    
python voronoi
1个回答
0
投票

我碰巧发现了这个问题。实际上,问题出在二进制图像上,因为它是具有3个像素半径的原子核位置的基本事实,因此它不是获取一个原子核(单个像素)的单个坐标,而是因为每个原子核位置具有3个像素半径而检索了三个坐标值,因此给出最终的图像。

© www.soinside.com 2019 - 2024. All rights reserved.