Extract a matrix from a time-series image after applying a mask where each row is a space-time vector

timeserieswindow2matrix(
  timeseriesmatrix,
  mask,
  eventlist,
  timewindow,
  zeropadvalue = 0,
  spacing = NA
)

Arguments

timeseriesmatrix

Input timeseriesmatrix from timeseries2matrix

mask

Input mask of type 'antsImage' ... the mask will be replicated into a 4D image of length timewindow + zeropadvalue.

eventlist

time indices for the events to extract

timewindow

n-timepoints around each event, forward in time.

zeropadvalue

pads the mask by this amount fwd and bwd in time.

spacing

optional 4d spacing vector that will impact smoothing parameters

Value

Success – an R matrix of dimensions ntimewindow*sizeofnonzerovaluesinmask*nevents

Author

Avants BB

Examples


img <- makeImage(c(10, 10, 10, 50), 0)
mask <- as.antsImage(array(1, dim(img)[1:3]))
mat <- timeseries2matrix(img, mask)
mat <- timeserieswindow2matrix(mat, mask, c(1, 4, 5), 2, 0)
print(dim(mat$eventmatrix))
#> [1]    3 2000
print(dim(mat$mask4d))
#> [1] 10 10 10  2

##### another approach
dim4 <- c(20, 30, 10, 100)
i1 <- 10:15
i2 <- 11:18
i3 <- 4:8
i4 <- 10:90
arr3d <- array(data = 0, dim = dim4[1:3])
arr3d[i1, i2, i3] <- 1
arr <- array(data = 0, dim = dim4)
for (t in i4) arr[, , , t] <- t
nois <- which(arr > 0)
noisv <- rnorm(length(nois))
arr[nois] <- arr[nois] + noisv * 0.0
msk <- as.antsImage(arr3d)
img <- as.antsImage(arr)
mat <- timeseries2matrix(img, msk)
eanat <- sparseDecom(mat, msk, sparseness = 0.1, z = 0.5, nvecs = 2, 
its = 5, cthresh = 0, mycoption = 1)
eanat2 <- sparseDecom(mat, sparseness = 0.1, z = 0.5, nvecs = 2, 
its = 5, cthresh = 0, mycoption = 1)
enomask <- eanat2$eigenanatomyimages[1, ]
emask <- eanat$eigenanatomyimages[1, ]
print(enomask[31:40])
#>  [1]  0.03987620  0.03343536  0.07381637 -0.07219767  0.04771875  0.14776873
#>  [7] -0.14532009 -0.02779675  0.02243894  0.02661600
print(emask[31:40])
#>  [1]  0.03987620  0.03343536  0.07381637 -0.07219767  0.04771875  0.14776873
#>  [7] -0.14532009 -0.02779675  0.02243894  0.02661600

# same thing with event matrices ....
ttt <- timeserieswindow2matrix(mat, msk, c(20, 40, 60, 70), 6, 0)
tte <- ttt$eventmatrix
eanat <- sparseDecom(tte, ttt$mask4d, sparseness = -0.9, z = 0.5, 
nvecs = 2, its = 5, cthresh = 0, mycoption = 1)
eanat2 <- sparseDecom(tte, sparseness = -0.9, z = 0.5, nvecs = 2, 
its = 5, cthresh = 0, mycoption = 1)
enomask <- eanat2$eigenanatomyimages[, 1]
# back to timematrix
tmat <- matrix(enomask, nrow = 6)
# back to image
eimg <- antsImageClone(msk)
eimg[msk == 1] <- tmat[1, ]
# convert image space to evec space
emat <- eanat2$eigenanatomyimages
# convert emat to events FIXME this does not currently work
# eavent<-timeserieswindow2matrix( data.matrix(emat) , msk, 1 , 6, 0 )
# emask<-eavent$eventmatrix[1,]
#############################