ITK/Release 4/New Code Contribution Process
This page describes the multiple mechanisms available to contribute code to the ITK Ecosystem.
Overview
Level of Contribution
New Classes and Filters
A new class (or filter) must be submitted to the Insight Journal.
Process
- Follow the procedure to become an ITK developer and setup your environment.
- Submit an article to the Insight Journal
- Follow the procedure to add a new class.
- Review the code using the Checklist
- Post as a Gerrit Patch
- Gerrit provides a Peer-review mechanism for the patch
- Gerrit uses Cdash@home to provide automated testing of patches
- After Gerrit peer-review, merge the topic.
Internal Modules
Internal modules are full fledged modules that are actually intended to be integrated with the ITK git repository and to be distributed as part of ITK.
Process
- Follow the procedure to become an ITK developer and setup your environment.
- Follow the procedure to Add an Internal Module
- Create a topic branch
- Review the code using the Checklist
- For review purposes:
- Rebase topic branch on top of master
- git checkout -b topicbranchforreview topicbranch
- git rebase origin/master
- Squash topic branch and submit to Gerrit
- The patch in Gerrit is not intended to be merged directly into ITK. It is here ONLY to be reviewed.
- Rebase topic branch on top of master
- When approved in Gerrit:
- Go back to topic branch
- Merge master into topic branch
- Notify ITK developers list, requesting your branch to be merged into ITK master
Examples
- Video classes
- GPU Support
- Deconvolution
Bridge Modules
A bridge module is one that depends on third party headers not distributed with ITK. A bridge module usually connects classes that interface to two toolkits.
Process
TBD
Examples
- Connecting ITK to VTK
- Connecting ITK to OpenCV
- Connecting ITK to dcmtk
External Modules
External modules are ITK-like modules that cannot be included in ITK because of license issues or should not be included in ITK because of scope and/or specialized use.
Process
- Follow the procedure to become an ITK developer and setup your environment.
- Follow the procedure to Add an External Module
Examples
- Lesion Sizing Toolkit
- see the Lesion Sizing Toolkit.
- PETSc
- Numerical Libraries that too large to be included in ITK proper
- FFTW
- Library distributed under GPL (overriding the ITK's Apache License)
External Layers
Software that presents a different interface to ITK.
Process
- Alternatives
- Use the CMake find_package(ITK) command from the external layer (library or application).
- Use ITK as an external project in a Superbuild approach ?
- The Superbuild will group the external layer along with ITK into a larger distribution...
Examples
- SimpleITK
- see SimpleITK.
- ManagedITK
- Wrapping for C#
Application
Applications are programs that often provide a GUI and/or use other toolkits, e.g. VTK.
=Process
- Alternatives
- Use the CMake find_package(ITK) command from the application.
- Use ITK as a CMake external project in a Superbuild approach.
Examples
- Volview Plugins
- V3D Plugins
Adding Data
Data may be needed as part of testing code and/or examples on how to run new layers. Please see the following link for instructions on how to add data:
(new page will be added soon...)
Bug Fixes
Bug fixes are contributions that repair defects reported in the Mantis Bug Tracker or repair daily defects that creep into ITK.
Process
- Follow the procedure to become an ITK developer.
- Post as a Gerrit Patch
- Gerrit provides a Peer-review mechanism for the patch
- Gerrit uses Cdash@home to provide automated testing of patches
- After Gerrit peer-review, merge the topic.
Wiki Examples
Wiki examples are independent, compilable examples that illustrate ITK concepts.
Process
Follow this procedure to add a Wiki example.
NOTE: The examples illustrate existing ITK classes and do not introduce new classes.
Brainstorming suggestion for workflow:
- Enable users to add Examples in the Wiki
- Automatically take the new examples and push them as patches to a Gerrit system (with cdash@home testing)
- After approval: merging it into a Git repository of Examples (separate from the current ITK Git).
ITKv4 Refactoring
FEM Refactoring
- Modified existing classes
Level Sets Refactoring
- New Classes
- Modified existing classes
Registration Refactoring
- New Classes
- Modified existing classes
Pipeline Refactoring
- ??
GPU
- New classes
- New Internal Module
DICOM
- GDCM level ?
- Integrated with GDCM upstream ?
SimpleITK
- External Layer
WrapITK
- Internal Layer
ITKv4 A2D2 Contributions
A Comprehensive Workflow for Robust Characterization of Microstructure for Cancer Studies
- New Application (with GUI and Viz)
- New classes (denoising)
Comprehensive Workflow for Large Histology Segmentation and Visualization
- New classes
- Color correction, artifact removal, image registration
Adding Deconvolution Algorithms to ITK
- New classes
- New Internal Module
ITK Extensions for Video Processing
- New Internal Modules
- Some Bridge Modules
Real-Time Image Capture for ITK through a Video Grabber
- New Classes
- Some Bridge Modules
Methods in Medical Image Analysis: an ITK-based course
- New Classes
- Some Bridge Modules
- (OpenCV point cloud library)
ITK Algorithms for Analyzing Time-varying Shape with Application to Longitudinal Heart Modeling
- New Classes
- New Internal Modules
3D Real-time Physics-based Non-rigid Registration for Image-guided Neurosurgery
- Application
- External Layer ?
Denoising Microscopy, MRI, and Ultrasound Images
- New Classes
- New Internal Modules