Jump to content

SPM/Programming intro

From Wikibooks, open books for an open world
< SPM

This page is intended to provide a quick-start guide to writing your own MATLAB scripts and functions using SPM as a library. SPM programming can mean simply writing batch scripts to automate common pipelines, writing short helper scripts or functions to accomplish useful tasks, writing your own SPM extensions, or even modifying your local installation of SPM.

MATLAB

[edit | edit source]

MATLAB is a programming language developed by MathWorks.

Many MATLAB tutorials are available online:

There are also useful books:

MATLAB courses:

SPM functions

[edit | edit source]

Introduction

[edit | edit source]

SPM has extensive developer documentation in the headers of the source files. To view the documentation of a function either open the corresponding source file or call help function from the MATLAB command line. Make sure that the SPM folder is in MATLABs search path.

Reading image headers and data

[edit | edit source]
  • spm_vol – header information
  • spm_read_vols – for reading entire volumes (see also: spm_vol)
  • spm_slice_vol – for arbitrary planes
  • spm_sample_vol – any voxels
  • spm_get_data (spm_sample_vol) – any voxels from multiple volumes
  • spm_bsplins (spm_bsplinc) – NB spm_slice_vol and spm_sample_vol offer polynomial or sinc interpolation; these functions provide b-spline interp as used in spm_reslice

Writing data

[edit | edit source]
  • spm_write_vol (spm_vol)
  • spm_create_vol
  • spm_write_plane

Reading and writing data with the alternative NIfTI class library

[edit | edit source]
  • nifti (@nifti/Contents, @nifti/create)
  • file_array (@file_array/Contents)

Geometry, voxel-world mappings

[edit | edit source]
  • spm_get_space – get the voxel-world mapping matrix (a rigid or affine transform, in homogeneous coordinates)
  • spm_imatrix – convert above matrix to parametrised form
  • spm_matrix – convert parameter vector to affine matrix
  • spm_check_orientations

Linear (rigid/affine) registration and reslicing

[edit | edit source]
  • spm_realign
  • spm_coreg (spm_reslice)
  • spm_affreg
  • spm_reslice – needs reference image; see following for reslicing to specified geometry
  • reorient (resize_img) – available from John's Gems 2 and 3

Preprocessing, including segmentation and non-linear normalisation

[edit | edit source]
  • spm_preproc (spm_config_preproc, spm_prep2sn, spm_preproc_write) – SPM5's unified segmentation and normalisation
  • spm_normalise – the old pre-SPM5 non-unified spatial normalisation
  • spm_segment – the old pre-SPM5 non-unified tissue segmentation
  • spm_smooth

Processing

[edit | edit source]
  • spm_imcalc – perform arbitrary calculations on volumes (low level function)
  • spm_imcalc_ui – high level convenience wrapper for spm_imcalc

Statistics

[edit | edit source]
  • spm_ancova (spm_reml_ancova) – unused by SPM itself, but often useful for scripting or educational purposes

Viewing data

[edit | edit source]
  • spm_check_registration (spm_image, spm_orthviews) – the ubiquitous three orthogonal views
  • slover – slices through images, overlays of thresholded or raw statistics; see also slice_overlay
  • spm_mip_ui (spm_mip) – maximum intensity projections or glass brain images

Configuration

[edit | edit source]
  • spm_defaults
  • spm_get_defaults

Batch System

[edit | edit source]
  • spm_select
  • spm_jobman

Illustrative examples

[edit | edit source]

Reading and writing a volume (to replace NaNs with zeros)

[edit | edit source]

A simpler (but more memory-hungry) version of an old Gem. See the SPM8 version of gem for an example of plane-wise reading and writing.

fnm = spm_select(1, 'image');
[pth, bnm, ext] = spm_fileparts(fnm);
VI = spm_vol(fnm);
VO = VI; % copy input info for output image
VO.fname = fullfile(pth, [bnm '_zn' ext]);
img = spm_read_vols(VI);
img(isnan(img)) = 0; % use ~isfinite instead of isnan to replace +/-inf with zero
spm_write_vol(VO,img);
[edit | edit source]

See also: