A small neuroimage interactive plotter
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Manipulate Package
The manipulate
from RStudio allows you to create simple Tcl/Tk operators for interactive visualization. I will use it for a simple slider to view different slices of an image.
library(manipulate)
fslr package
I'm calling the fslr
package because I know that if you have it installed, you will likely have FSL and have a 1mm T1 template from MNI in a specific location. fslr
also loads the oro.nifti
package so that readNIfTI
is accessible after loading fslr
. You can download a test NIfTI image here if you don't have access to any and don't have FSL downlaoded.
Here I will read in the template image:
library(fslr) options(fsl.path='/usr/local/fsl') template = file.path(fsldir(), "data/standard", "MNI152_T1_1mm_brain.nii.gz") img = readNIfTI(template)
The iplot function
The iplot
function defined below takes in a nifti
object, the specific plane to be plotted and additional options to be passed to oro.nifti::image
. The function is located on my GitHub here.
iplot = function(img, plane = c("axial", "coronal", "sagittal"), ...){ ## pick the plane plane = match.arg(plane, c("axial", "coronal", "sagittal")) # Get the max number of slices in that plane for the slider ns= switch(plane, "axial"=dim(img)[3], "coronal"=dim(img)[2], "sagittal"=dim(img)[1]) ## run the manipulate command manipulate({ image(img, z = z, plot.type= "single", plane = plane, ...) # this will return mouse clicks (future experimental work) pos <- manipulatorMouseClick() if (!is.null(pos)) { print(pos) } }, ## make the slider z = slider(1, ns, step=1, initial = ceiling(ns/2)) ) }
Example plots
Here are some examples of how this iplot
function would be used:
iplot(img) iplot(img, plane = "coronal") iplot(img, plane = "sagittal")
The result will be a plotted image of the slice with a slider. This is most useful if you run it within RStudio.
Below are 2 example outputs of what you see in RStudio:
Slice 91:
Slice 145:
Conclusions
The iplot
function allows users to interactively explore neuroimages. The plotting is not as fast as I'd like, I may try to speed up the oro.nifti::image
command or implement some subsampling. It does however show a proof of concept how interactive neuroimaging visualization can be done in R
.
Note
manipulate
must be run in RStudio for manipulation. The fslr
function fslview
will call FSLView from FSL for interactive visualization. This is an option of interactive neuroimaging “in R
”, but not a real or satisfactory implementation for me (even though I use it frequently). If anyone has implemented such a solution in R
, I'd love to hear about it.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.