【问题标题】:How to get voronoi edge diagram in python如何在python中获得voronoi边缘图
【发布时间】:2020-02-15 17:38:25
【问题描述】:

我想为点注释创建一个 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】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-04
      • 2021-12-17
      • 1970-01-01
      相关资源
      最近更新 更多