This page describes the multiple mechanisms available to contribute code to the ITK Ecosystem.

Overview

Level of Contribution

New Classes

A new class must be submitted to the Insight Journal.

Please Note: This requirement is waived for ITKv4 contractors.

Please Note: ITKv4 will remove the Review directory. Moving classes from Review into the appropriate Module must follow the process for adding new classes. This document describes the destination Module for each class in Review.


Process

  1. Follow the procedure to become an ITK developer and setup your environment.
  2. Submit an article to the Insight Journal
    • Waived for ITKv4 contractors.
  3. Follow the procedure to add a new class.
  4. Review the code using the Checklist
  5. Post as a Gerrit Patch
    1. Gerrit provides a Peer-review mechanism for the patch
    2. Gerrit uses Cdash@home to provide automated testing of patches
  6. After Gerrit peer-review approval, merge the topic.

Internal Modules

Internal modules are full fledged modules that will be integrated with the ITK git repository and will be distributed as part of ITK.

Process

  1. Follow the procedure to become an ITK developer and setup your environment.
  2. Follow the procedure to Add an Internal Module
  3. Create a topic branch
  4. Review the code using the Checklist
  5. 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.
  6. 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

Bridge Modules

A bridge module depends on third party headers not distributed with ITK. A bridge module usually connects classes that interface to two or more toolkits.

Process

  1. Follow the procedure to become an ITK developer and setup your environment.
  2. Follow the procedure to Add an Internal Module.
    • Place your module in the group Bridge
    • Create itk-module-init.cmake
      • This file should contain find_package commands to locate the third party libraries and headers
    • Edit the itk-module.cmake and add EXCLUDE_FROM_ALL to the itk_module call. This prevents this Bridge Module from being included when ITK_BUILD_ALL_MODULES is selected during the cmake configuration. To build your module you will need to explicitly turn it on. For example, if your Bridge Module is called Foo, then while running cmake a Module_ITK-Foo variable will be listed under the Modules group
  3. Create a topic branch, add and commit your changes.
  4. Review the code using the Checklist
  5. 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.
  6. 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

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

  1. Follow the procedure to become an ITK developer and setup your environment.
  2. Follow the procedure to Add an External Module

Examples

External Layers

Software that presents a different interface to ITK.

Process

Examples

Applications

Applications are programs that often provide a GUI and/or use other toolkits, e.g. VTK.

Process

Applications have their own CMakeLists.txt files. They will either locate ITK or build it as part of their process.

Examples

New Data

Data may be needed as part of testing code and/or examples on how to run new classes, applications or layers.

Process

Please see the instructions on how to add data.

Bug Fixes

Bug fixes are contributions that repair defects reported in the JIRA Issue Tracker or repair daily defects that creep into ITK.

Process

  1. Follow the procedure to become an ITK developer.
  2. To reference JIRA issue XY, add " (#ITK-XY)" to the END of the FIRST line." or BUG: ITK-XY as the commit prefix.
  3. Post as a Gerrit Patch
    1. Gerrit provides a Peer-review mechanism for the patch
    2. Gerrit uses Cdash@home to provide automated testing of patches
  4. After Gerrit peer-review approval, merge the topic.

Wiki Examples

Wiki examples are independent, compilable examples that illustrate ITK concepts.

Please Note: The examples illustrate existing ITK classes and do not introduce new classes.

Process

Follow this procedure to add a Wiki example.

ITKv4 Refactoring

ITKv4 Development Team

FEM Refactoring

Level Sets Refactoring

Registration Refactoring

Pipeline Refactoring

GPU

DICOM

SimpleITK

WrapITK

ITKv4 A2D2 Contributions

A2D2 Development Team

A Comprehensive Workflow for Robust Characterization of Microstructure for Cancer Studies

Comprehensive Workflow for Large Histology Segmentation and Visualization

Adding Deconvolution Algorithms to ITK

ITK Extensions for Video Processing

Real-Time Image Capture for ITK through a Video Grabber

Methods in Medical Image Analysis: an ITK-based course

ITK Algorithms for Analyzing Time-varying Shape with Application to Longitudinal Heart Modeling

3D Real-time Physics-based Non-rigid Registration for Image-guided Neurosurgery

Denoising Microscopy, MRI, and Ultrasound Images

Framework for Automated Parameter Tuning of ITK Registration Pipelines

SCORE: Systematic Comparison through Objective Rating and Evaluation

SCORE++: Crowd sourced data, automatic segmentation, and ground truth for ITK4

Fostering Open Science for Lung Cancer Lesion Sizing