in libs/apls/skeletonize.py [0:0]
def remove_small_terminal(G, weight='weight', min_weight_val=30,
pix_extent=1300, edge_buffer=4, verbose=False):
'''Remove small terminals, if a node in the terminal is within edge_buffer
of the the graph edge, keep it'''
deg = dict(G.degree())
terminal_points = [i for i, d in deg.items() if d == 1]
if verbose:
print("remove_small_terminal() - N terminal_points:", len(terminal_points))
edges = list(G.edges())
for s, e in edges:
if s == e:
sum_len = 0
vals = flatten([[v] for v in G[s][s].values()])
for ix, val in enumerate(vals):
sum_len += len(val['pts'])
if sum_len < 3:
G.remove_edge(s, e)
continue
# check if at edge
sx, sy = G.nodes[s]['o']
ex, ey = G.nodes[e]['o']
edge_point = False
for ptmp in [sx, sy, ex, ey]:
if (ptmp < (0 + edge_buffer)) or (ptmp > (pix_extent - edge_buffer)):
edge_point = True
else:
continue
# don't remove edges near the edge of the image
if edge_point:
continue
vals = flatten([[v] for v in G[s][e].values()])
for ix, val in enumerate(vals):
if s in terminal_points and val.get(weight, 0) < min_weight_val:
G.remove_node(s)
if e in terminal_points and val.get(weight, 0) < min_weight_val:
G.remove_node(e)
return