-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
initial joss draft #47
Merged
Merged
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
@article{cox_software_1997, | ||
author = {Cox, Robert W. and Hyde, James S.}, | ||
copyright = {Copyright © 1997 John Wiley \& Sons, Ltd.}, | ||
doi = {10.1002/(SICI)1099-1492(199706/08)10:4/5{ extless}171::AID-NBM453{ extgreater}3.0.CO;2-L}, | ||
issn = {1099-1492}, | ||
journal = {NMR Biomed}, | ||
language = {en}, | ||
number = {4-5}, | ||
pages = {171-178}, | ||
title = {Software tools for analysis and visualization of fMRI data}, | ||
url = {http://onlinelibrary.wiley.com/doi/10.1002/(SICI)1099-1492(199706/08)10:4/5{ extless}171::AID-NBM453{ extgreater}3.0.CO;2-L/abstract}, | ||
volume = 10, | ||
year = 1997 | ||
} | ||
|
||
@article{brett_nibabel_2006, | ||
author = {Brett, Matthew and Markiewicz, Christopher J. and Hanke, Michael and Cote, Marc-Alexandre and Cipollini, Ben and McCarthy, Paul and Cheng, Chris and Halchenko, Yaroslav O. and Ghosh, Satrajit S. and Larson, Eric and Wassermann, Demian and Gerhard, Stephan}, | ||
doi = {10.5281/zenodo.591597}, | ||
journal = {Zenodo}, | ||
pages = 3458246, | ||
title = {{Open Source Software: NiBabel}}, | ||
url = {https://zenodo.org/record/3458246\#.XaS82-ZKi5M}, | ||
year = 2006 | ||
} | ||
|
||
@article{fischl_freesurfer_2012, | ||
author = {Fischl, B.}, | ||
doi = {10.1016/j.neuroimage.2012.01.021}, | ||
issn = {1053-8119}, | ||
journal = {NeuroImage}, | ||
number = 2, | ||
pages = {774-781}, | ||
title = {{FreeSurfer}}, | ||
url = {http://www.sciencedirect.com/science/article/pii/S1053811912000389}, | ||
volume = 62, | ||
year = 2012 | ||
} | ||
|
||
@article{jenkinson_fsl_2012, | ||
author = {Jenkinson, Mark and Beckmann, Christian F. and Behrens, Timothy E.J. and Woolrich, Mark W. and Smith, Stephen M.}, | ||
doi = {10.1016/j.neuroimage.2011.09.015}, | ||
issn = {1053-8119}, | ||
journal = {NeuroImage}, | ||
number = 2, | ||
pages = {782-790}, | ||
shorttitle = {FSL}, | ||
title = {{FSL}}, | ||
url = {http://www.sciencedirect.com/science/article/pii/S1053811911010603}, | ||
volume = 62, | ||
year = 2012 | ||
} | ||
|
||
@article{avants_symmetric_2008, | ||
author = {Avants, B.B. and Epstein, C.L. and Grossman, M. and Gee, J.C.}, | ||
doi = {10.1016/j.media.2007.06.004}, | ||
issn = {1361-8415}, | ||
journal = {Medical Image Analysis}, | ||
number = 1, | ||
pages = {26-41}, | ||
shorttitle = {Symmetric diffeomorphic image registration with cross-correlation}, | ||
title = {Symmetric diffeomorphic image registration with cross-correlation: Evaluating automated labeling of elderly and neurodegenerative brain}, | ||
url = {http://www.sciencedirect.com/science/article/pii/S1361841507000606}, | ||
volume = 12, | ||
year = 2008 | ||
} | ||
|
||
@book{friston_statistical_2006, | ||
address = {London}, | ||
author = {Friston, Karl J. and Ashburner, John and Kiebel, Stefan J. and Nichols, Thomas E. and Penny, William D.}, | ||
isbn = {978-0-12-372560-8}, | ||
publisher = {Academic Press}, | ||
shorttitle = {Statistical parametric mapping}, | ||
title = {Statistical parametric mapping : the analysis of functional brain images}, | ||
year = 2006 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
--- | ||
title: 'NiTransforms: A Python tool to read, represent, manipulate, and apply $n$-dimensional spatial transforms' | ||
tags: | ||
- Python | ||
- neuroimaging | ||
- image processing | ||
- spatial transform | ||
- nibabel | ||
authors: | ||
- name: Mathias Goncalves | ||
orcid: 0000-0002-7252-7771 | ||
affiliation: 1 | ||
- name: Christopher J. Markiewicz | ||
orcid: 0000-0002-6533-164X | ||
affiliation: "1, 2" | ||
- name: Satrajit S. Ghosh | ||
orcid: 0000-0002-5312-6729 | ||
affiliation: "2, 3" | ||
- name: Russell A. Poldrack | ||
orcid: 0000-0001-6755-0259 | ||
affiliation: 1 | ||
- name: Oscar Esteban | ||
orcid: 0000-0001-8435-6191 | ||
affiliation: 1 | ||
affiliations: | ||
- name: Department of Psychology, Stanford University, Stanford, CA, USA | ||
index: 1 | ||
- name: McGovern Institute for Brain Research, Massachusetts Institute of Technology (MIT), Cambridge, MA, USA | ||
index: 2 | ||
- name: Department of Otolaryngology, Harvard Medical School, Boston, MA, USA | ||
index: 3 | ||
date: 04 November 2019 | ||
bibliography: nt.bib | ||
--- | ||
|
||
# Summary | ||
|
||
Spatial transforms formalize mappings between coordinates of objects in biomedical images. | ||
Transforms typically are the outcome of image registration methodologies, which estimate the alignment between two images. | ||
Image registration is a prominent task present in image processing. | ||
In neuroimaging, the proliferation of image registration software implementations has resulted in a disparate collection of structures and file formats used to preserve and communicate the transformation. | ||
This assortment of formats presents the challenge of compatibility between tools and endangers the reproducibility of results. | ||
|
||
_NiTransforms_ is a Python tool capable of reading and writing tranforms produced by the most popular neuroimaging software (AFNI [@cox_software_1997], FSL [@jenkinson_fsl_2012], FreeSurfer [@fischl_freesurfer_2012], ITK via ANTs [@avants_symmetric_2008], and SPM [@friston_statistical_2006]). | ||
Additionally, the tool provides seamless conversion between these formats, as well as the ability of applying the transforms to other images. | ||
_NiTransforms_ is inspired by `NiBabel` [@brett_nibabel_2006], a Python package with a collection of tools to read, write and handle neuroimaging data, and will be included as a new module. | ||
|
||
# Spatial transforms | ||
|
||
Let $\vec{x}$ represent the coordinates of a point in the reference coordinate system $R$, and $\vec{x}'$ its projection on to another coordinate system $M$: | ||
|
||
$T\colon R \subset \mathbb{R}^n \to M \subset \mathbb{R}^n$ | ||
|
||
$\vec{x} \mapsto \vec{x}' = f(\vec{x}).$ | ||
|
||
In an image registration problem, $M$ is a moving image from which we want to sample data in order to bring the image into spatial alignment with the reference image $R$. | ||
Hence, $f$ here is the spatial transformation function that maps from coordinates in $R$ to coordinates in $M$. | ||
There are a multiplicity of image registration algorithms and corresponding image transformation models to estimate linear and nonlinear transforms. | ||
|
||
The problem has been traditionally confused by the need of _transforming_ or mapping one image (generally referred to as _moving_) into another that serves as reference, with the goal of _fusing_ the information from both. | ||
An example of image fusion application would be the alignment of functional data from one individual's brain to the same individual's corresponding anatomical MRI scan for visualization. | ||
Therefore, "applying a transform" entails two operations: first, transforming the coordinates of the samples in the reference image $R$ to find their mapping $\vec{x}'$ on $M$ via $T\{\cdot\}$, and second an interpolation step as $\vec{x}'$ will likely fall off-the-grid of the moving image $M$. | ||
These two operations are confusing because, while the spatial transformation projects from $R$ to $M$, the data flows in reversed way after the interpolation of the values of $M$ at the mapped coordinates $\vec{x}'$. | ||
|
||
# Software Architecture | ||
|
||
There are four main components within the tool: an `io` submodule to handle the structure of the various file formats, a `base` submodule where abstract classes are defined, a `linear` submodule implementing $n$-dimensional linear transforms, and a `nonlinear` submodule for both parametric and non-parametric nonlinear transforms. | ||
Furthermore, _NiTranforms_ provides a straightforward _Application Programming Interface_ (API) that allows researchers to map point sets via transforms, as well as apply transforms (i.e., mapping the coordinates and interpolating the data) to data structures with ease. | ||
|
||
To ensure the consistency and uniformity of internal operations, all transforms are defined using a left-handed coordinate system of physical coordinates. | ||
In words from the neuroimaging domain, the coordinate system of transforms is _RAS+_ (or positive directions point to the Righthand for the first axis, Anterior for the second, and Superior for the third axis). | ||
The internal representation of transform coordinates is the most relevant design decision, and implies that a conversion of coordinate system is necessary to correctly interpret transforms generated by other software. | ||
When a transform that is defined in another coordinate system is loaded, it is automatically converted into _RAS+_ space. | ||
|
||
_NiTransforms_ was developed using a test-driven development paradigm, with the | ||
battery of tests being written prior to the software implementations. | ||
Two categories of tests were used: unit tests and cross-tool comparison tests. | ||
Unit tests evaluate the formal correctness of the implementation, while cross-tool | ||
comparison tests assess the correct implementation of third-party software. | ||
The testing suite is incorporated into a continuous integration framework, which assesses the continuity of the implementation along the development life and ensures that code changes and additions do not break existing functionalities. | ||
|
||
# Examples | ||
|
||
# References |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd add a section of examples, copying from the preprint.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
their docs explicitly state
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think an example or two cannot be considered software documentation, and they will very quickly convey what the tool does (ideally, I'm imagining two images on the left with some object signifying an input transform, they feed into the snippet and the output shows the moving image deformed via T). I can take a stab on this next week, don't worry about this.