#' Split time series image into k distinct images
#'
#' Uses clustering methods to split a time series into similar subsets.
#'
#'
#' @param mat input time series matrix
#' @param krange k cluster range to explore
#' @param nsvddims eg 2
#' @param criterion for clustering see pamk
#' @return matrix is output
#' @author Avants BB
#' @examples
#' \dontrun{
#' if (!exists("fn")) fn <- getANTsRData("pcasl")
#' # high motion subject
#' asl <- antsImageRead(fn, 4)
#' tr <- antsGetSpacing(asl)[4]
#' aslmean <- getAverageOfTimeSeries(asl)
#' aslmask <- getMask(aslmean, lowThresh = mean(aslmean), cleanup = TRUE)
#' omat <- timeseries2matrix(asl, aslmask)
#' clustasl <- clusterTimeSeries(omat, krange = 4:10)
#' for (ct in 1:max(clustasl$clusters))
#' {
#' sel <- clustasl$clusters != ct
#' img <- matrix2timeseries(asl, aslmask, omat[sel, ])
#' perf <- aslPerfusion(img,
#' dorobust = 0.9, useDenoiser = 4, skip = 10, useBayesian = 0,
#' moreaccurate = 0, verbose = F, mask = aslmask
#' )
#' perfp <- list(sequence = "pcasl", m0 = perf$m0)
#' cbf <- quantifyCBF(perf$perfusion, perf$mask, perfp)
#' }
#' }
#'
#' @export clusterTimeSeries
clusterTimeSeries <- function(
mat, krange = 2:10,
nsvddims = NA, criterion = "asw") {
if (nargs() == 0) {
print(args(clusterTimeSeries))
return(1)
}
if (!usePkg("fpc")) {
print("Need fpc package")
return(NULL)
}
if (is.na(nsvddims)) {
nsvddims <- (max(krange) * 2)
}
# mat<-timeseries2matrix( img, mask )
if (nsvddims > nrow(mat)) {
nsvddims <- nrow(mat) / 2
}
matsvd <- svd(mat, nu = nsvddims, nv = 0)
pk <- fpc::pamk(mat, krange = krange, criterion = criterion)
clusters <- pk$pamobject$clustering
tsimagelist <- list()
for (i in 1:max(clusters)) {
kmat <- mat[clusters != i, ]
tsimagelist[[i]] <- kmat
# matrix2timeseries( img, mask, kmat )
}
return(list(kimgs = tsimagelist, clusters = clusters))
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.