- Home
- Neuroconductor Tutorials
- Brain extraction
Brain Extraction/Segmentation
John Muschelli
2021-02-16
All code for this document is located at here.
In this tutorial we will discuss performing brain segmentation using the brain extraction tool (BET) in fsl
and a robust version using a wrapper function in extrantsr
, fslbet_robust
.
Data Packages
For this analysis, I will use one subject from the Kirby 21 data set. The kirby21.base
and kirby21.fmri
packages are necessary for this analysis and have the data we will be working on. You need devtools to install these. Please refer to installing devtools for additional instructions or troubleshooting.
source("https://neuroconductor.org/neurocLite.R")
packages = installed.packages()
packages = packages[, "Package"]
if (!"kirby21.base" %in% packages) {
neuroc_install("kirby21.base")
}
if (!"kirby21.t1" %in% packages) {
neuroc_install("kirby21.t1")
}
Loading Data
We will use the get_image_filenames_df
function to extract the filenames on our hard disk for the T1 image.
library(kirby21.t1)
library(kirby21.base)
fnames = get_image_filenames_df(ids = 113,
modalities = c("T1"),
visits = c(1),
long = FALSE)
t1_fname = fnames$T1[1]
T1 image
Let’s take a look at the T1-weighted image.
t1 = readnii(t1_fname)
ortho2(t1)
rm(list = "t1")
Here we see the brain and other parts of the image are present. Most notably, the neck of the subject was imaged. Sometimes this can cause problems with segmentation and image registration.
Attempt 1: Brain Extraction of T1 image using BET
Here we will use FSL’s Brain Extraction Tool (BET) to extract the brain tissue from the rest of the image.
library(fslr)
outfile = nii.stub(t1_fname, bn = TRUE)
outfile = paste0(outfile, "_SS_Naive.nii.gz")
if (!file.exists(outfile)) {
ss_naive = fslbet(infile = t1_fname, outfile = outfile)
} else {
ss_naive = readnii(outfile)
}
ortho2(ss_naive)