def voronoi_expand(labels, return_line=False): dist = distance_transform_edt(labels) vor = skiwatershed(-dist, markers=labels) if not return_line: return vor else: mask = skiwatershed(-dist, markers=labels, watershed_line=True) lines = mask == 0 return vor, lines
def label_watershed(labels, regmax): # Since there are non-unique values for dist, add very small numbers. This will separate each marker by regmax at least. dist = distance_transform_edt(labels) + np.random.rand(*labels.shape)*1e-10 labeled_maxima = label(peak_local_max(dist, min_distance=int(regmax), indices=False)) wshed = -dist wshed = wshed - np.min(dist) markers = np.zeros(wshed.shape, np.int16) markers[labeled_maxima > 0] = -labeled_maxima[labeled_maxima > 0] wlabel = skiwatershed(wshed, markers, connectivity=np.ones((3,3), bool), mask=labels!=0) wlabel = -wlabel wlabel = labels.max() + wlabel wlabel[wlabel == labels.max()] = 0 all_label = label(labels + wlabel) return all_label