Voxel / Image Data

navis lets you import neurons from a variety of local and remote sources. In this tutorial you will learn how to load voxel data from local data and - failing that - construct them from scratch. For loading remote data (e.g. the MICrONS, neuromorpho, Virtual Fly Brain or Janelia hemibrain datasets), navis has dedicated interfaces. See the example gallery for tutorials on these.

Voxel data (e.g. from confocal scans) is represented by the navis.VoxelNeuron class. At this point, navis supports reading just a single file format directly: .nrrd files via navis.read_nrrd() and navis.write_nrrd().

import navis

For this example I downloaded one of Janelia’s Fly Light confocal stacks (link) and converted it to nrrd using ImageJ.

# Open one of the Janelia confocals (I converted this to nrrd using ImageJ)
vxl = navis.read_nrrd('~/Downloads/JRC_SS86025_JRC_SS86025-20211112_49_B6.nrrd')
type navis.VoxelNeuron
name JRC_SS86025_JRC_SS86025-20211112_49_B6
units [0.5189161 micrometer, 0.5189161 micrometer, 1...
shape (1210, 563, 364)
dtype >u2

If push comes to shove you can construct navis.VoxelNeuron either from a dense 3-dimensional matrix or from sparse 2-dimensional voxel data:

import numpy as np

# Create an empty 7x7x7 matrix
dense = np.zeros((7, 7, 7))
# Fill the center voxel
dense[4, 4, 4] = 1

# Create the neuron
vxl = navis.VoxelNeuron(dense)
type navis.VoxelNeuron
name None
units 1 dimensionless
shape (7, 7, 7)
dtype float64
# Create an array with sparse x/y/z voxel coordinates
sparse = np.array([[4, 4, 4],
                   [4, 4, 5]])

# Construct neuron
vxl = navis.VoxelNeuron(sparse)
type navis.VoxelNeuron
name None
units 1 dimensionless
shape (5, 5, 6)
dtype int64

Hopefully the above has given you some entry points on how to load your data. Please see the docstring of navis.VoxelNeuron for details.

Also note that all navis neurons can be stored to disk using pickle - see the pickling tutorial. See also the I/O API reference api_io>.

Keep in mind that you can convert one neuron type into another - for example by meshing VoxelNeurons (see Converting neuron types).