Skip to content

Latest commit

 

History

History
81 lines (58 loc) · 2.31 KB

README.md

File metadata and controls

81 lines (58 loc) · 2.31 KB

osteoid

Skeleton object used for representing neurons, adjacent cells, and organelles.

Osteoid is the Skeleton code from CloudVolume refactored into its own library.

Installation

pip install osteoid

Examples

import osteoid

skel = osteoid.load("skeleton.swc")
osteoid.save("skeleton.swc", skel)

from osteoid import Skeleton

skel = Skeleton(vertices, edges, radii=radii)

# you can specify a transform to e.g.
# convert the skeleton into a physical space
# with, in this example, 16x16x40 nm^3 resolution

matrix = np.array([
  [16, 0, 0, 0],
  [0, 16, 0, 0],
  [0, 0, 40, 0],
], dtype=np.float32)

skel = Skeleton(vertices, edges, radii=radii, transform=matrix)
skel = skel.physical_space() # applies transform to vertices
skel = skel.voxel_space() # removes transform from vertices

# skeleton functions

l = skel.cable_length() # physical length of the cable
comps = skel.components() # connected components
paths = skel.paths() # convert tree into a list of linear paths
skel = skel.downsample(factor) # factor must be a pos integer
skel = skel.average_smoothing(7) # smooths over a window of e.g. 7 vertices

G = skel.to_networkx() # converts edges to an nx.Graph()

binary = skel.to_precomputed() # Neuroglancer compatible format
swc = skel.to_swc() # Neuroglancer compatible format
skel = Skeleton.from_swc(swc)
skel = Skeleton.from_precomputed(binary, segid=1, vertex_attributes=[
      {
        'id': 'radius',
        'num_components': 1,
        'data_type': 'float32',
      },
])

# Cross-format transform from Navis. More efficient than 
# using SWCs as an interchange medium. Navis is more fully featured,
# and written with a lot of love by Philipp Schlegel and others.
# Consider using it and citing them: https://github.com/navis-org/navis
skel = Skeleton.from_navis(navis_skel)

# remove duplicate vertices and optionally disconnected vertices
skel = skel.consolidate() 
skel2 = skel.clone()

# visualize, requires either matplotlib or microviewer+vtk installed
skel.viewer() # select library automatically

skel.viewer(color_by='radius', library='matplotlib')
skel.viewer(color_by='cross_section', library='matplotlib')
skel.viewer(color_by='component', library='matplotlib')

# gpu accelerated, fewer features, colors by component
skel.viewer(library='vtk')