Learn R Programming

ANTsR (version 0.3.3)

aslDenoiseR: WIP: data-driven denoising for ASL MRI

Description

Denoises regression based reconstruction of CBF from arterial spin labeling

Usage

aslDenoiseR(boldmatrix, targety, covariates = NA, selectionthresh = 0.1, maxnoisepreds = 2:12, polydegree = "loess", crossvalidationgroups = 4, scalemat = F, noisepoolfun = max, usecompcor = F, verbose = F)

Arguments

boldmatrix
input bold matrix
targety
target to predict
covariates
motion or other parameters / nuisance variables
selectionthresh
e.g. 0.1 take 10 percent worst variables for noise estimation
maxnoisepreds
integer search range e.g 1:10
polydegree
eg 4 for polynomial nuisance variables or 'loess'
crossvalidationgroups
prior defined or integer valued
scalemat
boolean
noisepoolfun
function to help select noise pool e.g. max
usecompcor
boolean
verbose
boolean

Value

matrix is output

Examples

Run this code

# asl<-antsImageRead( getANTsRData("pcasl") )
set.seed(1)
nvox <- 10*10*10*20
dims <- c(10,10,10,20)
asl <- makeImage( dims , rnorm( nvox )+500 )
aslmean <- getAverageOfTimeSeries( asl )
aslmask <- getMask( aslmean  )
aslmat<-timeseries2matrix( asl, aslmask )
for ( i in 1:10 ) aslmat[,i*2]<-aslmat[,i*2]*2
asl<-matrix2timeseries( asl, aslmask, aslmat )
tc<-as.factor(rep(c("C","T"),nrow(aslmat)/2))
dv<-computeDVARS(aslmat)
dnz<-aslDenoiseR( aslmat, tc, covariates=dv, selectionthresh=0.1,
  maxnoisepreds=c(1:2), polydegree=2, crossvalidationgroups=2 )
## Not run: 
# # a classic regression approach to estimating perfusion
# # not recommended, but shows the basic idea.
# # see ?quantifyCBF for a better approach
# perfmodel<-lm( aslmat ~ tc + dnz$noiseu  )
# perfimg<-antsImageClone(aslmask)
# perfimg[ aslmask == 1 ]<-bigLMStats( perfmodel )$beta[1,]
# m0<-getAverageOfTimeSeries(asl)
# ctl<-c(1:(nrow(aslmat)/2))*2
# m0[ aslmask==1 ]<-colMeans(aslmat[ctl,])
# pcasl.parameters<-list( sequence="pcasl", m0=m0 )
# cbf <- quantifyCBF( perfimg, aslmask, pcasl.parameters )
# 
# # default mode network example
# 
# if ( ! exists("bold") )
#   {
#   bold = antsImageRead( getANTsRData("rsbold") )
#   meanbold = getAverageOfTimeSeries( bold )
#   boldmask = getMask(  meanbold )
#   # map to mni
#   mni = antsImageRead( getANTsRData("mni") )
#   mniaal = antsImageRead( getANTsRData("mnia") )
#   mymap = antsRegistration( meanbold * boldmask, mni, typeofTransform='SyNBold',
#    verbose=1 )
#   aalimg = antsApplyTransforms( meanbold, mniaal, mymap$fwdtransforms,
#     interpolator='NearestNeighbor')
#   data("aal",package="ANTsR")
#   timeselect<-10:dim(bold)[4]
#   if ( ! exists("moco") )
#     {
#     moco = antsMotionCalculation( bold, boldmask )
#     }
#   sbold = smoothImage( moco$moco_img , 3.0 )
#   antsImageWrite( boldmask, 'boldmask.nii.gz' )
#   antsImageWrite( meanbold, 'boldmean.nii.gz' )
#   antsImageWrite( aalimg, 'boldaal.nii.gz' )
#   boldmask = boldmask * thresholdImage( aalimg, 1, Inf )
#   }
# postcing<-aal$label_num[ grep( "Cingulum_Post", aal$label_name ) ]
# postCingMask = maskImage( boldmask, aalimg,
#   level = as.numeric(postcing), binarize=T )
# mpostCingMask= antsImageClone( postCingMask ) * 0
# mpostCingMask[ postCingMask == 0 ] = 1
# boldmat = timeseries2matrix( sbold, boldmask*mpostCingMask )
# boldmat = boldmat[timeselect,]
# boldmat = frequencyFilterfMRI( boldmat, tr=antsGetSpacing(bold)[4], opt='trig' )
# dmnvec<-( timeseries2matrix(  sbold, postCingMask )[timeselect,] )
# dmnvec = rowMeans(
#   frequencyFilterfMRI( dmnvec, tr=antsGetSpacing(bold)[4], opt='trig' ) )
# dmnmat = matrix( dmnvec, ncol=1)
# mocpar = moco$moco_params[ timeselect , 3:14 ]
# dnz<-aslDenoiseR( boldmat, dmnvec, covariates=mocpar, selectionthresh=0.2,
#   maxnoisepreds=c(2:10),  polydegree='loess',
#   crossvalidationgroups=8 )
# boldmat<-timeseries2matrix(sbold, boldmask)
# boldmat<-boldmat[timeselect,]
# boldmat = frequencyFilterfMRI( boldmat, tr=antsGetSpacing(bold)[4], opt='trig' )
# mdl<-bigLMStats( lm( boldmat ~ dmnvec + dnz$covariates + dnz$noiseu ), 0.001 )
# betas<-mdl$beta.t[1,]
# betaImg = makeImage( boldmask, betas )
# antsImageWrite( betaImg, 'dmnBetas.nii.gz' )
# # this should give default mode network around beta = 12
# ## End(Not run)

Run the code above in your browser using DataLab