In a previous post, I described how you can interactively explore a 3D
nifti object in R. I used the
manipulate package, but the overall results were sluggish and not really usable.
That's all fine and good, but I like my things in
R. I understand many can easily write bash scripts that perform the same operations and use the HTML builder provided by papaya.
I want the operation in R for the same reasons I make many things for R:
- I use R
- Many statisticians like imaging but need tools they understand and they understand R
- I like writing pipelines and scripts in one language
My answer: the
papayar, you can simply install from GitHub using the
The main function is
papaya. Let's look at the arguments:
library(papayar) formalArgs(papaya)  "images" "outdir" "..."
images argument can be a list of
nifti objects or a vector of character filenames. The
outdir is where the HTML file is written. The default is to a temporary directory that will be trashed after the session is over. The additional arguments are passed to the lower-level function
pass_papaya, which in turn are passed to functions
daemon_stop in the
servr package. The
pass_papaya function is useful, however, to open a blank papaya session by just invoking
httd function starts a server, the images can be rendered (and will be by default) in the RStudio viewer! In the terminal, it opens your default web browser. Here's a basic example:
library(oro.nifti) x = nifti(img = array(rnorm(100^3), dim= rep(100, 3)), dim=rep(100, 3), datatype=16) y = nifti(img = array(rbinom(100^3, prob = 0.5, size = 10), dim= rep(100, 3)), dim=rep(100, 3), datatype=16) index.file = papaya(list(x, y))
The first 3 lines make some random arrays, from a normal and binomial distribution and puts them into a
nifti object. The list of these
nifti objects is passed in. The first image is displayed in grayscale and the second image is overlaid using red-hot colors and the opacity of this image can be changed. The object
index.file will be a character filename where the HTML file is stored. The data and this HTML file is written to
outdir (which, again, is a temporary directory by default).
Below is a series of screen shots I took from the code above. You should be able to see this in RStudio or your browser:
The main reason to use this is that you can click different areas for the crosshairs and move to a different point in axial, coronal, and sagittal space. Thus, this is truly interactive.
Here we can show there are limited (but useful) controls for the overlay. You can change the mapping of the values in the image and the overlay and the opacity of the overlay.
The above data has been used since everyone could test it, but it's just random numbers and doesn't look very compelling. Here I will show you the hyperintense voxels overlaid on the MNI 152 1mm T1 brain image click here for description, which correspond mainly to the white matter:
Hopefully you can see how this can be useful for exploring data and results.
ITK-SNAP and itksnapr
Some of my colleagues are more partial to using ITK-SNAP for viewing images interactively. I have bundled the executables for ITK-SNAP into the R package
itksnapr. The main function is
itksnap, which you can specify images to different options to ITK-SNAP.
itksnapr, you can simply install from GitHub using the
require(devtools) devtools::install_github("muschellij2/itsnapr") library(itksnapr) itksnap(grayscale = x, overlay = y)
I haven't used ITK-SNAP much, but hear many good things about it. There are many better resources than this blog on how to use it and how to use it well. If interested in a good image viewer, I implore you to google around for some of these resources. If anyone has intense interest of image viewers and wants added functionality, don't hesitate to file an inssue on GitHub.
Although it was included in my
fslr package by default and I never discussed it in detail, FSLView is included with the distribution of FSL and is a viewer I use heavily. The
fslr function is
fslview. One specific advantage of using FSLView is that it can pass through X11 forwarding, so you can remotely view image from a cluster, though it may be slow.
Although I use the
overlay functions from
oro.nifti for many of my figures, for interactive exploring of results, these can be somewhat slow for getting a large-scale view, and not a specific slice view. Therefore, a fully interactive neuroimaging plotter is necessary. Here are 3 options that can be accessed “within”