#' Label image from Powers points
#'
#' Creates spherical points in the coordinate space of the target image.
#'
#' @param pts input powers points
#' @param mask antsImage mask defining target space
#' @param radius for the points
#' @return antsImage is output
#' @author Avants BB, Duda JT
#' @examples
#' \dontrun{
#' mni <- antsImageRead(getANTsRData("mni")) %>% getMask()
#' data("powers_areal_mni_itk", package = "ANTsR", envir = environment())
#' powersLabels <- makePowersPointsImage(powers_areal_mni_itk, mni)
#' # if you have a different target space
#' # pts = antsApplyTransformsToPoints( 3, powers_areal_mni_itk,
#' # transformlist = concatenatedMaps$toTemplate,
#' # whichtoinvert = concatenatedMaps$toTemplateInversion )
#' }
#'
#' @export makePowersPointsImage
makePowersPointsImage <- function(pts, mask, radius = 5) {
powersLabels <- mask * 0
nPts <- dim(pts)[1]
rad <- radius
n <- ceiling(rad / antsGetSpacing(mask))
for (r in 1:nPts) {
pt <- as.numeric(c(pts$x[r], pts$y[r], pts$z[r]))
idx <- antsTransformPhysicalPointToIndex(mask, pt)
for (i in seq(-n[1], n[1], by = 0.5)) {
for (j in seq(-n[2], n[2], by = 0.5)) {
for (k in seq(-n[3], n[3], by = 0.5)) {
local <- idx + c(i, j, k)
localpt <- antsTransformIndexToPhysicalPoint(mask, as.numeric(local))
dist <- sqrt(sum((localpt - pt) * (localpt - pt)))
inImage <- (prod(idx <= dim(mask)) == 1) && (length(which(idx < 1)) == 0)
if ((dist <= rad) && (inImage == TRUE)) {
powersLabels[local[1], local[2], local[3]] <- pts$ROI[r]
}
}
}
}
}
return(powersLabels)
}
#' Create label image from physical space points
#'
#' Creates spherical points in the coordinate space of the target image based
#' on the n-dimensional matrix of points that the user supplies. The image
#' defines the dimensionality of the data so if the input image is 3D then
#' the input points should be 2D or 3D.
#'
#' @param pts input powers points
#' @param mask antsImage mask defining target space
#' @param radius for the points
#' @return antsImage is output
#' @author Avants BB, Duda JT
#' @examples
#' \dontrun{
#' mni <- antsImageRead(getANTsRData("mni")) %>% getMask()
#' data("powers_areal_mni_itk", package = "ANTsR", envir = environment())
#' powersLabels <- makePointsImage(powers_areal_mni_itk[, 1:3], mni, radius = 3)
#' }
#'
#' @export makePointsImage
makePointsImage <- function(pts, mask, radius = 5) {
powersLabels <- mask * 0
nPts <- dim(pts)[1]
rad <- radius
n <- ceiling(rad / antsGetSpacing(mask))
dim <- mask@dimension
if (ncol(pts) < dim) {
stop("points dimensionality should match that of images")
}
for (r in 1:nPts) {
pt <- as.numeric(c(pts[r, 1:dim]))
idx <- antsTransformPhysicalPointToIndex(mask, pt)
for (i in seq(-n[1], n[1], by = 0.5)) {
for (j in seq(-n[2], n[2], by = 0.5)) {
if (dim == 3) {
for (k in seq(-n[3], n[3], by = 0.5)) {
local <- idx + c(i, j, k)
localpt <- antsTransformIndexToPhysicalPoint(mask, as.numeric(local))
dist <- sqrt(sum((localpt - pt) * (localpt - pt)))
inImage <- all(local >= 1 & local <= dim(powersLabels))
if ((dist <= rad) && (inImage == TRUE)) {
if (powersLabels[local[1], local[2], local[3]] < 0.5) {
powersLabels[local[1], local[2], local[3]] <- r
}
}
}
} # if dim == 3
if (dim == 2) {
local <- idx + c(i, j)
localpt <- antsTransformIndexToPhysicalPoint(mask, as.numeric(local))
dist <- sqrt(sum((localpt - pt) * (localpt - pt)))
inImage <- (prod(local <= dim(mask)) == 1) && (length(which(local < 1)) == 0)
if ((dist <= rad) && (inImage == TRUE)) {
if (powersLabels[local[1], local[2]] < 0.5) {
powersLabels[local[1], local[2]] <- r
}
}
} # if dim == 2
}
}
}
return(powersLabels)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.