Python skimage.morphology.medial_axis() Examples
The following are 4
code examples of skimage.morphology.medial_axis().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
skimage.morphology
, or try the search function
.
Example #1
Source File: image.py From perception with Apache License 2.0 | 6 votes |
def to_sdf(self): """ Converts the 2D image to a 2D signed distance field. Returns ------- :obj:`numpy.ndarray` 2D float array of the signed distance field """ # compute medial axis transform skel, sdf_in = morph.medial_axis(self.data, return_distance=True) useless_skel, sdf_out = morph.medial_axis( np.iinfo(np.uint8).max - self.data, return_distance=True) # convert to true sdf sdf = sdf_out - sdf_in return sdf
Example #2
Source File: segmentation.py From kraken with Apache License 2.0 | 5 votes |
def vectorize_lines(im: np.ndarray, threshold: float = 0.2, min_sp_dist: int = 10): """ Vectorizes lines from a binarized array. Args: im (np.ndarray): Array of shape (3, H, W) with the first dimension being probabilities for (start_separators, end_separators, baseline). Returns: [[x0, y0, ... xn, yn], [xm, ym, ..., xk, yk], ... ] A list of lists containing the points of all baseline polylines. """ # split into baseline and separator map st_map = im[0] end_map = im[1] sep_map = st_map + end_map bl_map = im[2] # binarize bin = im > threshold skel, skel_dist_map = medial_axis(bin[2], return_distance=True) elongation_offset = np.max(skel_dist_map) sp_can = _find_superpixels(skel, heatmap=bl_map, min_sp_dist=min_sp_dist) if not sp_can.size: logger.warning('No superpixel candidates found in network output. Likely empty page.') return [] intensities = _compute_sp_states(sp_can, bl_map, st_map, end_map) clusters = _cluster_lines(intensities) lines = _interpolate_lines(clusters, elongation_offset, bl_map.shape, st_map, end_map) return lines
Example #3
Source File: best_solution_in_the_wuuuuuuurld.py From HashCode with Apache License 2.0 | 5 votes |
def place_routers_on_skeleton(d, cmethod): wireless = np.where(d["graph"] == Cell.Wireless, 1, 0) # perform skeletonization skeleton = skeletonize(wireless) med_axis = medial_axis(wireless) skel = skeleton # skel = med_axis # get all skeleton positions pos = [] for i in range(skel.shape[0]): for j in range(skel.shape[1]): if skel[i][j]: pos.append((i, j)) budget = d['budget'] shuffle(pos) max_num_routers = min([int(d['budget'] / d['price_router']), len(pos)]) print("Num of routers constrained by:") print(" budget: %d" % int(int(d['budget'] / d['price_router']))) print(" skeleton: %d" % len(pos)) for i in tqdm(range(max_num_routers), desc="Placing Routers"): new_router = pos[i] a, b = new_router # check if remaining budget is enough d["graph"][a][b] = Cell.Router d, ret, cost = _add_cabel(d, new_router, budget) budget -= cost if not ret: break return d
Example #4
Source File: best_solution_in_the_wuuuuuuurld.py From HashCode with Apache License 2.0 | 5 votes |
def place_routers_on_skeleton_iterative(d, cmethod): budget = d['budget'] R = d['radius'] max_num_routers = int(d['budget'] / d['price_router']) coverage = np.where(d["graph"] == Cell.Wireless, 1, 0).astype(np.bool) pbar = tqdm(range(max_num_routers), desc="Placing Routers") while budget > 0: # perform skeletonization # skeleton = skeletonize(coverage) skeleton = medial_axis(coverage) # get all skeleton positions pos = np.argwhere(skeleton > 0).tolist() # escape if no positions left if not len(pos): break # get a random position shuffle(pos) a, b = pos[0] # place router d["graph"][a][b] = Cell.Router d, ret, cost = _add_cabel(d, (a, b), budget) if not ret: print("No budget available!") break budget -= cost # refresh wireless map by removing new coverage m = wireless_access(a, b, R, d['graph']).astype(np.bool) coverage[(a - R):(a + R + 1), (b - R):(b + R + 1)] &= ~m pbar.update() pbar.close() return d