The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
This vignette shows how to:
resample_to() /
resample()).downsample()).reorient()).We’ll use the example NIfTI that ships with the package:
demo_path <- system.file("extdata", "global_mask_v4.nii", package = "neuroim2")
vol <- read_vol(demo_path) # 3D NeuroVol
vec4 <- read_vec(demo_path) # 4D NeuroVec
sp <- space(vol)
dim(vol)
#> [1] 64 64 25
spacing(vol)
#> [1] 3.5 3.5 3.7resample_to() is a convenience wrapper around the S4
resample() methods that accepts human‑readable
interpolation names.
You specify a target grid (NeuroSpace or
NeuroVol) and choose "nearest",
"linear", or "cubic" interpolation:
# Create a target space with 2× smaller voxels in each dimension
sp_fine <- NeuroSpace(
dim = sp@dim * 2L,
spacing = sp@spacing / 2,
origin = sp@origin,
trans = trans(vol)
)
vol_fine_lin <- resample_to(vol, sp_fine, method = "linear")
dim(vol_fine_lin)
#> [1] 128 128 50
spacing(vol_fine_lin)
#> [1] 1.75 1.75 1.85Typical patterns:
"nearest" when resampling label or mask
images."linear" or "cubic" for continuous
data (e.g. intensities, statistics).You can also call
resample(source, target, interpolation = 0/1/3) directly if
you prefer numeric codes.
When you want fewer voxels (e.g. to speed up analysis or plotting)
but don’t need arbitrarily defined target grids, use
downsample() on a NeuroVec or
NeuroVol.
# Downsample by a factor of 0.5 in each spatial dimension
vec_down_factor <- downsample(vec4, factor = 0.5)
dim(vec4)
#> [1] 64 64 25 4
dim(vec_down_factor)
#> [1] 32 32 12 4
spacing(vec4)
#> [1] 3.5 3.5 3.7
spacing(vec_down_factor)
#> [1] 7.00000 7.00000 7.70833You can also specify a target spacing or output dimensions:
# Target spacing (mm)
vec_down_spacing <- downsample(vec4, spacing = c(4, 4, 4))
# Target spatial dimensions
vec_down_outdim <- downsample(vec4, outdim = c(32, 32, 16))
#> Warning in calculate_downsample_dims(current_dims, current_spacing, spacing, :
#> Output dimensions do not preserve aspect ratios. Using uniform scaling based on
#> smallest dimension.Exactly one of factor, spacing, or
outdim must be supplied. The current implementation uses a
simple box‑averaging scheme in space.
reorient() updates the mapping between voxel indices and
physical coordinates without changing the raw data array. This is
helpful when you want a canonical orientation (e.g. RAS) or need to
match another dataset’s axis directions.
For NeuroSpace, you supply three axis codes:
sp_lpi <- sp # assume input is LPI‑like
sp_ras <- reorient(sp_lpi, c("R", "A", "S"))
sp_lpi
#>
#> NeuroSpace Object
#>
#> >> Dimensions
#> Grid Size: 64 x 64 x 25
#> Memory: 5.9 KB
#>
#> >> Spatial Properties
#> Spacing: 3.50 x 3.50 x 3.70 mm
#> Origin: 112.00 x -108.00 x -46.20 mm
#>
#> >> Anatomical Orientation
#> X: Right-to-Left | Y: Posterior-to-Anterior | Z: Inferior-to-Superior
#>
#> >> World Transformation
#> Forward (Voxel to World):
#> -3.500 0.000 -0.000 112.000
#> 0.000 3.500 -0.000 -108.000
#> 0.000 0.000 3.700 -46.200
#> 0.000 0.000 0.000 1.000
#> Inverse (World to Voxel):
#> -0.286 0.000 0.000 32.000
#> 0.000 0.286 0.000 30.857
#> 0.000 0.000 0.270 12.486
#> 0.000 0.000 0.000 1.000
#>
#> >> Bounding Box
#> Min Corner: -108.5, -108.0, -46.2 mm
#> Max Corner: 112.0, 112.5, 42.6 mm
#>
#> ==================================================
sp_ras
#>
#> NeuroSpace Object
#>
#> >> Dimensions
#> Grid Size: 64 x 64 x 25
#> Memory: 5.9 KB
#>
#> >> Spatial Properties
#> Spacing: 3.50 x 3.50 x 3.70 mm
#> Origin: -112.00 x 108.00 x 46.20 mm
#>
#> >> Anatomical Orientation
#> X: Right-to-Left | Y: Posterior-to-Anterior | Z: Inferior-to-Superior
#>
#> >> World Transformation
#> Forward (Voxel to World):
#> 3.500 0.000 0.000 -112.000
#> 0.000 -3.500 0.000 108.000
#> 0.000 0.000 -3.700 46.200
#> 0.000 0.000 0.000 1.000
#> Inverse (World to Voxel):
#> 0.286 0.000 0.000 32.000
#> 0.000 -0.286 0.000 30.857
#> 0.000 0.000 -0.270 12.486
#> 0.000 0.000 0.000 1.000
#>
#> >> Bounding Box
#> Min Corner: -112.0, -112.5, -42.6 mm
#> Max Corner: 108.5, 108.0, 46.2 mm
#>
#> ==================================================For NeuroVol / NeuroVec, you typically
reorient via their space:
vol_ras <- NeuroVol(as.array(vol), sp_ras)
dim(vol_ras)
#> [1] 64 64 25
spacing(vol_ras)
#> [1] 3.5 3.5 3.7Note that reorient() preserves physical positions; it
only changes how grid indices are interpreted in space. Coordinate
transforms (coord_to_grid, grid_to_coord)
automatically respect the new orientation.
Common combinations:
resample_to() when you need to match a specific
template grid (e.g. MNI space or another subject’s image).downsample() when you just want fewer voxels while
preserving overall FOV and orientation.reorient() when you want a consistent anatomical
convention (RAS/LPI) across images without resampling.These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.