# Difference between revisions of "Projects:RegistrationImprovement"

Home < Projects:RegistrationImprovement

# Registration Improvements

This page will describe registration improvements made within Slicer3 to improve the usability and robustness of registration algorithms so they may be used in an interactive clinical setting.

# Key Contributors

• Kitware: Casey Goodlett with consultation from Will Schroeder and Stephen Aylward
• BWH: Ron Kikinis, Dominik Meier, Andriy Fedorov

# RegisterImages Algorithm

A user should typically one of the Pipeline methods (PipelineRigid, PipelineAffine, PipelineBspline) as these will run Initalization -> Rigid -> Affine -> Bspline to the specified level. These are run in order to convergence or maximum # of iterations. Within each pipeline step there is a two stage optimization. First the evolution optmizer is run to stochastically chose a starting location for optimization. After this the FRPR optimizer is used. Currently multi-resolution optimization is only used in the bspline level.

## Improvement Ideas

• Use multi-resolution at all stages
• Both multi-resolution and the sequence of calls with increasing DOF could be implemented as a single recursive scheme. The caller provides an array of DOF and a matching array of resolution levels, which is processed by recursive calls with the first/last element taken from the list. A simulation Matlab program and example is here: Projects:RegistrationImprovement:RecursiveScheme
• The GUI can list the many combination as a single list of checkboxes for increasing DOF. The full list would be 3,6,7,9,12,b . The checked boxes provide the input string for the recursive call. Media:DOFHierarchy_GUI.jpg‎
• The prestage to affine maybe should be similarity not rigid (based on assumption that its hard to optimize rotation without scale change).
• Learn from FSL flirt to make an extensive test of a grid of possible rotations to get a good initialization for rotations.
• Ability to specify masks that are used to limit were samples are drawn (this should ultimately be both a label image or a user drawn box)

# Timeline of contributions

## October 22, 2009

Investigating MRML Presets. The following can be saved as a .mrml scene and loaded into slicer to populate the parameter sets of RegisterImages.

```<MRML version="" userTags="">
<CommandLineModule
id="vtkMRMLCommandLineModuleNode1" name="Register Images Set 1"
hideFromEditors="true" selectable="true" selected="false"
title="Register%20Images"
version="0.1.0.\$Revision:%202104%20\$(alpha)" resampledImage=""
registration="PipelineAffine" metric="MattesMI" expectedOffset="10"
expectedRotation="0.1" expectedScale="0.05" expectedSkew="0.01"
interpolation="Linear" baselineImage=""
baselineNumberOfFailedPixelsTolerance="1000"
baselineDifferenceImage="" baselineResampledMovingImage=""
fixedLandmarks="" movingLandmarks="" rigidMaxIterations="100"
rigidSamplingRatio="0.04" affineMaxIterations="50"
affineSamplingRatio="0.02" bsplineMaxIterations="20"
bsplineSamplingRatio="0.1" controlPointSpacing="40" ></CommandLineModule>
<CommandLineModule
id="vtkMRMLCommandLineModuleNode2" name="Register Images Set 2"
hideFromEditors="true" selectable="true" selected="false"
title="Register%20Images"
version="0.1.0.\$Revision:%202104%20\$(alpha)" resampledImage=""
registration="PipelineRigid" metric="MattesMI" expectedOffset="20"
expectedRotation="0.1" expectedScale="0.05" expectedSkew="0.01"
interpolation="Linear" baselineImage=""
baselineNumberOfFailedPixelsTolerance="1000"
baselineDifferenceImage="" baselineResampledMovingImage=""
fixedLandmarks="" movingLandmarks="" rigidMaxIterations="100"
rigidSamplingRatio="0.03" affineMaxIterations="80"
affineSamplingRatio="0.02" bsplineMaxIterations="20"
bsplineSamplingRatio="0.1" controlPointSpacing="40"></CommandLineModule>
</MRML>
```

## October 16 2009

Found some bugs in ITK similarity transform with Luis

## October 6, 2009

Preliminary version of brute force rotation initializer implemented. TODO save in sandbox then merge to Slicer module.

## September 22, 2009

Committed ability to use a label image to act as a mask for drawing samples for image match calculation.

## September 11, 2009

Merge two new modules that present a simplified view of RegisterImages into Slicer3 to show up in Modules Menu hierarchy Menu hierarchy screenshot

## September 9, 2009

Sync default parameters between GUI and command line version of RegisterImages

## August 18, 2009

• Link landmark initalization with fiducials framework in Slicer3