def summarise(skelimage):
ndim = skelimage.ndim
g, counts, skelimage_labeled = skeleton_to_nx(skelimage)
coords = np.nonzero(skelimage)
ids = skelimage_labeled[coords]
sorted_coords = np.transpose(coords)[np.argsort(ids)]
tables = []
for i, cc in enumerate(nx.connected_component_subgraphs(g)):
stats = branch_statistics(cc)
if stats.size == 0:
continue
coords0 = sorted_coords[stats[:, 0].astype(int) - 1]
coords1 = sorted_coords[stats[:, 1].astype(int) - 1]
distances = np.sqrt(np.sum((coords0 - coords1)**2, axis=1))
skeleton_id = np.full(distances.shape, i, dtype=float)
tables.append(np.column_stack((skeleton_id, stats,
coords0, coords1, distances)))
columns = (['skeleton-id', 'node-id-0', 'node-id-1', 'branch-distance',
'branch-type'] +
['coord-0-%i' % i for i in range(ndim)] +
['coord-1-%i' % i for i in range(ndim)] +
['euclidean-distance'])
column_types = [int, int, int, float, int] + 2*ndim*[int] + [float]
arr = np.row_stack(tables).T
data_dict = {col: dat.astype(dtype)
for col, dat, dtype in zip(columns, arr, column_types)}
df = pd.DataFrame(data_dict)
return df
评论列表
文章目录