neuroim2 gives you a small set of data structures for 3D
and 4D neuroimaging data, plus the spatial tools you need to move
between file I/O, coordinate systems, regions of interest, and
resampling. The package is broad, so this overview is intentionally
narrow: it shows the first objects and workflows to learn, then points
you to the focused vignettes that carry the rest.
Start by reading one image and inspecting its spatial metadata.
img <- read_vol(system.file("extdata", "global_mask2.nii.gz", package = "neuroim2"))
dim(img)
#> [1] 64 64 25
spacing(img)
#> [1] 3.5 3.5 3.7
origin(img)
#> [1] 112.00 -108.50 -46.25The most important thing to notice is that a NeuroVol is
not just an array. It also carries a NeuroSpace, which
tracks voxel spacing, origin, and affine transforms.
The recommended path through the package is:
vignette("ChoosingBackends", package = "neuroim2") for
dense, sparse, mapped, file-backed, and hyper-vector backends.vignette("coordinate-systems", package = "neuroim2")
for voxel, grid, and world-coordinate conversions.vignette("VolumesAndVectors", package = "neuroim2") for
the core manipulation story.vignette("Resampling", package = "neuroim2") for
resample(), downsample(),
reorient(), and deoblique().vignette("AnalysisWorkflows", package = "neuroim2") for
ROIs, searchlights, and map-reduce style analyses.If you only read one follow-on article after this overview, make it
vignette("VolumesAndVectors", package = "neuroim2").
Most work in neuroim2 starts with three ideas:
NeuroVol for 3D images such as anatomical volumes,
masks, and single summary maps.NeuroVec for 4D data such as fMRI time-series or
stacked volumes.ROI objects for region-based extraction and local
analyses.Here is the smallest possible example of each.
mask <- img > 0
sum(mask)
#> [1] 29532
vec <- read_vec(system.file("extdata", "global_mask_v4.nii", package = "neuroim2"))
dim(vec)
#> [1] 64 64 25 4
roi <- spherical_roi(space(vec), c(45, 45, 20), radius = 4)
length(roi)
#> [1] 7That is the core mental model for the package:
The next common step is to move from a 4D image to a region-level summary.
roi_ts <- series_roi(vec, roi)
roi_mat <- values(roi_ts)
mean_ts <- rowMeans(roi_mat)
stopifnot(
nrow(roi_mat) == dim(vec)[4],
ncol(roi_mat) == length(roi),
all(is.finite(mean_ts))
)
head(mean_ts)
#> [1] 0 0 0 0This is a deliberately small example, but it shows the typical
neuroim2 workflow:
For broader ROI and searchlight patterns, move directly to
vignette("AnalysisWorkflows", package = "neuroim2").
Once you are comfortable reading data and extracting values, the next important layer is spatial transformation.
img_down <- downsample(img, spacing = c(2, 2, 2))
dim(img)
#> [1] 64 64 25
dim(img_down)
#> [1] 112 112 46
spacing(img_down)
#> [1] 2.00000 2.00000 2.01087For the full story, including orientation handling and affine-aware transforms, use:
vignette("coordinate-systems", package = "neuroim2")vignette("Resampling", package = "neuroim2")You do not need a special backend to start. Use the default dense path first, then switch when the workload demands it.
big_vec <- read_vec(
system.file("extdata", "global_mask_v4.nii", package = "neuroim2"),
mode = "filebacked"
)
series(big_vec, 45, 45, 20)The details and tradeoffs belong in
vignette("ChoosingBackends", package = "neuroim2").
vignette("ChoosingBackends", package = "neuroim2")vignette("coordinate-systems", package = "neuroim2")vignette("VolumesAndVectors", package = "neuroim2")vignette("Resampling", package = "neuroim2")vignette("AnalysisWorkflows", package = "neuroim2")vignette("ImageVolumes", package = "neuroim2")vignette("NeuroVector", package = "neuroim2")vignette("regionOfInterest", package = "neuroim2")vignette("clustered-neurovec", package = "neuroim2")vignette("pipelines", package = "neuroim2")vignette("slice-visualization", package = "neuroim2")vignette("Cookbook", package = "neuroim2")The package becomes much easier to navigate if you treat this
overview as a map, not a manual. Learn NeuroVol,
NeuroVec, and ROI extraction here, then move into the
focused workflow vignettes for backend choice, spatial transforms, and
analysis patterns.