This function averages arterial spin labeling (ASL) functional MRI tag-control image pairs to estimate perfusion.

aslAveraging(
  asl,
  mask = NULL,
  tc = NA,
  nuisance = NA,
  method = "regression",
  ...
)

Arguments

asl

input asl image

mask

in which to calculate perfusion

tc

vector indicating which images are tagged and which are controls. Strongly recommended if using regression or bayesian methods.

nuisance

nuisance covariates to include in regression

method

method to use for computing average. One of sincSubtract, simpleSubtract, cubicSubtract, surroundSubtract, regression, or bayesian. See Details.

...

additional parameters to pass to ASL averaging functions. See Details.

Details

Two major types of methods are available for ASL signal averaging:

  • Subtraction: All the subtraction methods are based on subtracting the tag from control images and averaging the result. simple subtracts adjacent tag and control images. The other methods use interpolation to obtain a subtracted time-series. Sinc subtraction may be marginally more accurate than cubic interpolation, but takes much longer. Surround subtraction uses linear interpolation and is fast.

  • Regression: Regression regresses the time-series on a vector of alternating tag-control dummy variables. Regression can incorporate nuisance covariates. Bayesian regression incorporates regularization in the regression to encourage all voxels of the same tissue type to have similar perfusion values.

For bayesian, two more arguments are required:

  • segmentation: a segmentation image

  • tissuelist: a list of tissue probability images

These would be as output from atropos; see Examples for a sample usage.

Author

Kandel BM, Avants BB

Examples

set.seed(1)
nvox <- 8 * 8 * 8 * 10
dims <- c(8, 8, 8, 10)
voxvals <- array(rnorm(nvox) + 500, dim = dims)
asl <- makeImage(dims, voxvals)
tc <- rep(c(-0.5, 0.5), dims[4] / 2)
avg <- aslAveraging(asl, tc = tc)
testthat::expect_equal(mean(avg), 0.00739, tolerance = .1)
slice <- extractSlice(asl, 4, 4)
mask <- getMask(slice)
seg <- atropos(d = 3, a = slice, x = mask, i = "kmeans[6]", m = "[0.0,1x1x1]")
perfSurr <- aslAveraging(asl, mask = NULL, method = "surroundSubtract")
bayesAvg <- aslAveraging(asl,
  tc = tc, method = "bayesian",
  segmentation = seg$segmentation, tissuelist = seg$probabilityimages
)
#> 
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |============                                                          |  17%
  |                                                                            
  |=======================                                               |  33%
  |                                                                            
  |===================================                                   |  50%
  |                                                                            
  |===============================================                       |  67%
  |                                                                            
  |==========================================================            |  83%
  |                                                                            
  |======================================================================| 100%