Learn R Programming

ANTsR (version 0.3.3)

segmentationRefinement.predict: Segmentation refinement using corrective learning (prediction)

Description

A random forest implementation of the corrective learning wrapper introduced in Wang, et al., Neuroimage 2011 (http://www.ncbi.nlm.nih.gov/pubmed/21237273). The prediction process involves using the label-specific training models to refine an initial segmentation.

Usage

segmentationRefinement.predict(segmentationImage, labelSet, labelModels, featureImages, featureImageNames, dilationRadius = 2, neighborhoodRadius = 0, normalizeSamplesPerLabel = TRUE, useEntireLabeledRegion = TRUE)

Arguments

segmentationImage
image to refine via corrective learning.
labelSet
a vector specifying the labels of interest. Must be specified.
labelModels
a list of models. Each element of the labelSet requires a model.
featureImages
a list of feature images.
featureImageNames
is a vector of character strings naming the set of features. Must be specified.
dilationRadius
specifies the dilation radius for determining the ROI for each label using binary morphology. Alternatively, the user can specify a float distance value, e.g., "dilationRadius = '2.75mm'", to employ an isotropic dilation based on physical distance. For the latter, the distance value followed by the character string 'mm' (for millimeters) is necessary.
neighborhoodRadius
specifies which voxel neighbors should be included in prediction. The user can specify a scalar or vector but it must match with what was used for training.
normalizeSamplesPerLabel
if TRUE, the samples from each ROI are normalized by the mean of the voxels in that ROI. Can be a vector (one element per feature).
useEntireLabeledRegion
if TRUE, estimation is performed on the full dilated ROI for each label. If FALSE, estimation is performed on the combined inner and outer boundary region determined by the neighborhoodRadius parameter. Can also specify as a vector to determine per label.

Value

a list consisting of the refined segmentation estimate (RefinedSegmentationImage) and a list of the foreground probability images (ForegroundProbabilityImages).

Examples

Run this code
## Not run: 
# 
#  library( ANTsR )
#  library( ggplot2 )
# 
#  imageIDs <- c( "r16", "r27", "r30", "r62", "r64", "r85" )
# 
#  # Perform simple 3-tissue segmentation.  For convenience we are going to use
#  # atropos segmentation to define the "ground-truth" segmentations and the kmeans
#  # to define the segmentation we want to "correct".  We collect feature images for
#  # each image.  The gradient and laplacian images chosen below as feature images
#  # are simply selected for convenience.
# 
#  segmentationLabels <- c( 1, 2, 3 )
# 
#  featureImageNames <- c( 'T1', 'Gradient', 'Laplacian' )
# 
#  images <- list()
#  kmeansSegs <- list()
#  atroposSegs <- list()
#  featureImages <- list()
# 
#  for( i in 1:length( imageIDs ) )
#    {
#    cat( "Processing image", imageIDs[i], "\n" )
#    images[[i]] <- antsImageRead( getANTsRData( imageIDs[i] ) )
#    mask <- getMask( images[[i]] )
#    kmeansSegs[[i]] <- kmeansSegmentation( images[[i]], length( segmentationLabels ), mask, mrf = 0.0 )$segmentation
#    atroposSegs[[i]] <- atropos( images[[i]], mask, i = "KMeans[3]", m = "[0.25,1x1]", c = "[5,0]" )$segmentation
# 
#    featureImageSetPerImage <- list()
#    featureImageSetPerImage[[1]] <- images[[i]]
#    featureImageSetPerImage[[2]] <- iMath( images[[i]], "Grad", 1.0 )
#    featureImageSetPerImage[[3]] <- iMath( images[[i]], "Laplacian", 1.0 )
#    featureImages[[i]] <- featureImageSetPerImage
#    }
# 
#  # Perform training.  We train on images "r27", "r30", "r62", "r64", "r85" and
#  # test/predict on image "r16".
# 
#  cat( "\nTraining\n\n" )
# 
#  segLearning <- segmentationRefinement.train( featureImages = featureImages[2:6],
#    truthLabelImages = atroposSegs[2:6], segmentationImages = kmeansSegs[2:6],
#    featureImageNames = featureImageNames, labelSet = segmentationLabels,
#    maximumNumberOfSamplesOrProportionPerClass = 100, dilationRadius = 1,
#    neighborhoodRadius = c( 1, 1 ), normalizeSamplesPerLabel = TRUE, useEntireLabeledRegion = FALSE )
# 
#  cat( "\nPrediction\n\n" )
# 
#  refinement <- segmentationRefinement.predict(
#    segmentationImage = kmeansSegs[[1]], labelSet = segmentationLabels,
#    segLearning$LabelModels, featureImages[[1]], featureImageNames,
#    dilationRadius = 1, neighborhoodRadius = c( 1, 1 ),
#    normalizeSamplesPerLabel = TRUE )
# 
#  # Compare "ground truth" = atroposSegs[[1]] with refinement$RefinedSegmentationImage
# 
#   antsImageWrite( refinement$RefinedSegmentationImage, "r16RefinedSegmentation.nii.gz" )
# 
# ## End(Not run)

Run the code above in your browser using DataLab