--- title: "Getting Started" output: rmarkdown::html_vignette: toc: true vignette: > %\VignetteIndexEntry{Getting Started} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE, message=FALSE, results='hide'} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", eval = FALSE ) library(threeBrain) ``` `threeBrain` is an R package that renders `FreeSurfer` or `AFNI/SUMA` files in the modern web browsers. The goal is to provide 3D viewers that are **powerful**, **interactive**, **easy-to-share**. ## Directory Setup The basic setup of a typical subject folder should look like this: ``` Project Directory └─Subject code ├─mri - Atlas, T1 and/or CT image files (*.mgz, transforms, ...) ├─surf - FreeSurfer surface files (pial, sulc, ...) ├─SUMA - (Optional) SUMA standard 141 surfaces (std.141.*) └─... - Other files ``` If you are using `FreeSurfer` to generate MRI reconstruction, then you are all set! For `AFNI/SUMA` users, please place your `SUMA` folder under subject folder. If you don't have any `FreeSurfer` folders, you can download a sample archive from [here](https://github.com/dipterix/threeBrain-sample/releases), choose `N27-complete.zip`, and extract to your download directory. Once extracted, you will have a `N27` subject folder in the `~/Downloads/` directory. The directory tree looks exactly the same as described above. In the following context, I will use `~/Downloads/N27` as an example ## Generate Viewer Object ```{r setup, eval=FALSE} library(threeBrain) subject_code <- "N27" subject_path <- "~/Downloads/N27" brain <- threeBrain(subject_path, subject_code) print(brain) #> Subject - N27 #> Transforms: #> #> - FreeSurfer TalXFM [from scanner to MNI305]: #> [,1] [,2] [,3] [,4] #> [1,] 0.9692 -0.0029 -0.0134 -0.1638 #> [2,] 0.0062 0.9685 0.0492 -2.0717 #> [3,] 0.0145 0.0276 0.9541 0.1361 #> [4,] 0.0000 0.0000 0.0000 1.0000 #> #> - Torig [Voxel CRS to FreeSurfer origin, vox2ras-tkr] #> [,1] [,2] [,3] [,4] #> [1,] -1 0 0 128 #> [2,] 0 0 1 -128 #> [3,] 0 -1 0 128 #> [4,] 0 0 0 1 #> #> - Norig [Voxel CRS to Scanner center, vox2ras] #> [,1] [,2] [,3] [,4] #> [1,] -1 0 0 128.5 #> [2,] 0 0 1 -145.5 #> [3,] 0 -1 0 146.5 #> [4,] 0 0 0 1.0 #> #> - Scanner center relative to FreeSurfer origin #> [1] -0.5 17.5 -18.5 #> #> - FreeSurfer RAS to MNI305, vox2vox-MNI305 #> [,1] [,2] [,3] [,4] #> [1,] 0.9692 -0.0029 -0.0134 0.12365 #> [2,] 0.0062 0.9685 0.0492 -18.10715 #> [3,] 0.0145 0.0276 0.9541 17.31120 #> [4,] 0.0000 0.0000 0.0000 1.00000 #> Surface information (total count 1) #> Loading required namespace: rstudioapi #> pial [ std.141 ] #> Volume information (total count 1) #> T1 ``` If this is the first time, it might take a while to import and generate cache files. ## Visualization Visualizing the viewer is simply just one line. ```{r, eval=FALSE} brain$plot() ``` ## Surface, Volume, Atlas By default, the viewers only load the following information. Only the `pial` surfaces are mandatory, other files are optional. * T1 (MR images) and transforms (optional) - `mri/brain.finalsurfs.mgz` - `mri/transforms/talairach.xfm` * `pial` (mandatory) and `sulc` (optional) - `surf/*h.pial` or `SUMA/std.141.*h.pial[.asc|gii]` - `surf/*h.sulc` or `SUMA/std.141.*h.sulc.1D` * `aparc+aseg` (optional) - `mri/aparc+aseg.mgz` The T1 image is automatically detected if `brain.finalsurfs.mgz` is missing. The following alternatives are `brainmask.mgz`, `brainmask.auto.mgz`, `T1.mgz`. To load more than one surfaces, please specify the surface types when loading the viewer. The available surface types are: * `pial` - (default) * `smoothwm`, `white` - (smoothed) white matter * `inflated`, `sphere` - inflated surfaces * `pial-outer-smoothed` - ('FreeSurfer'-only) smoothed surface tightly wrapping the pial surface * `inf_200` - ('SUMA'-only) inflated pial surface The atlas type can be selected from `aparc+aseg`, `aparc.a2009s+aseg`, `aparc.DKTatlas+aseg`, or `aseg`. To load a specific atlas, please make sure the corresponding file exists in `mri/`. For example, `mri/aseg.mgz`. The following example loads `pial` and `smoothwm`, with `aseg` as atlas. The viewer shows 'Coronal' plane, smoothed white matter, 'Ventricle', and 'Cerebellum' all together in one scene. ```{r, eval=FALSE} brain <- threeBrain( subject_path, subject_code, surface_types = c('pial', 'smoothwm'), atlas_types = 'aseg') brain$plot( controllers = list( "Voxel Type" = "aseg", "Voxel Label" = "4,5,6,7", "Surface Type" = "smoothwm", "Left Opacity" = 0.4, "Overlay Coronal" = TRUE ), control_display = FALSE, camera_pos = c(0, -500, 0) ) ```