Как получить вороной граничную диаграмму в python - PullRequest
0 голосов
/ 12 февраля 2020

Я хочу создать диаграмму ребер 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    

1 Ответ

0 голосов
/ 15 февраля 2020

Я выяснил проблему. На самом деле проблема была с двоичным изображением, так как оно представляет собой основную правду положения ядер с радиусом в 3 пикселя, поэтому вместо получения одной координаты для одного ядра (одиночного пикселя) было получено три значения координат из-за радиуса в 3 пикселя для каждого положения ядер, таким образом давая результирующее изображение.

...