Difference between revisions of "Modules:RegisterImages-Documentation-3.6"
m (Text replacement - "\[http:\/\/www\.slicer\.org\/slicerWiki\/index\.php\/([^ ]+) ([^]]+)]" to "$2") |
|||
(16 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | [Documentation-3.6|Return to Slicer 3.6 Documentation]] | + | [[Documentation-3.6|Return to Slicer 3.6 Documentation]] |
[[Announcements:Slicer3.6#Highlights|Gallery of New Features]] | [[Announcements:Slicer3.6#Highlights|Gallery of New Features]] | ||
Line 26: | Line 26: | ||
===Module Description=== | ===Module Description=== | ||
This Module is an integrated framework providing access to ITK registration technologies. Algorithms can be run in single mode or pipelined. Depending on the size of the data sets, a significant amount of memory is needed. There is an option to trade off speed for memory. Most of the code is parallelized and will take advantage of multicore capabilities, if available. | This Module is an integrated framework providing access to ITK registration technologies. Algorithms can be run in single mode or pipelined. Depending on the size of the data sets, a significant amount of memory is needed. There is an option to trade off speed for memory. Most of the code is parallelized and will take advantage of multicore capabilities, if available. | ||
+ | |||
+ | ==== New Features in 3.6 ==== | ||
+ | * Integration of transform nodes instead of reading/writing to files | ||
+ | * Integration of landmark module for specifying initialization | ||
+ | * Ability to specify a label mask on the fixed image for limiting regions of metric calculation | ||
+ | * Exposed metrics besides Mutual Information | ||
+ | * Simplified parameters | ||
+ | * Ability to include parameter presets distributed with Slicer | ||
==== Major Features ==== | ==== Major Features ==== | ||
Line 39: | Line 47: | ||
* SampleFromOverlap option allows images of vastly different sizes to be registered | * SampleFromOverlap option allows images of vastly different sizes to be registered | ||
** Helps to avoid (but does not completely eliminate) the annoying ITK exception, "too many samples falls outside of the image" | ** Helps to avoid (but does not completely eliminate) the annoying ITK exception, "too many samples falls outside of the image" | ||
− | |||
− | |||
* Based on an extensible and re-usable class structure. | * Based on an extensible and re-usable class structure. | ||
Line 47: | Line 53: | ||
* If you are planning to use the b-spline registration, be sure to read the [[Modules:RegisterImages-Documentation-3.4#Advanced_BSpline_Parameters|discussion of parameter setting]] in the section below. | * If you are planning to use the b-spline registration, be sure to read the [[Modules:RegisterImages-Documentation-3.4#Advanced_BSpline_Parameters|discussion of parameter setting]] in the section below. | ||
+ | ===Use Cases, Examples=== | ||
+ | See [http://na-mic.org/Wiki/index.php/Projects:RegistrationDocumentation:UseCaseInventory Registration Use Case project] | ||
===Quick Tour of Features and Use=== | ===Quick Tour of Features and Use=== | ||
Line 106: | Line 114: | ||
| | | | ||
* Load Transform | * Load Transform | ||
− | ** provide the | + | ** provide the a transform for initializing the registration |
* Save Transform | * Save Transform | ||
− | ** | + | ** final transform will be saved here |
* Initialization | * Initialization | ||
** see registration pipeline discussion | ** see registration pipeline discussion | ||
Line 118: | Line 126: | ||
*** For more information, check the code: RegisterImagesModule/itkBSplineImageToImageRegistrationMethod.h/txx | *** For more information, check the code: RegisterImagesModule/itkBSplineImageToImageRegistrationMethod.h/txx | ||
* Metric | * Metric | ||
− | ** | + | ** Mutual Information metric. It is an multithreaded and optimized version of the Mattes MI method. |
− | *** For more information, check the code; Insight/Code/Review/ | + | *** For more information, check the code; Insight/Code/Review/itkOptMattesMutualInformationImageToImageMetric.h/txx |
+ | ** Normalized Correlation metric. This is NOT multithreaded or optimized | ||
+ | *** For more information, check the code; Insight/Code/Algorithms/itkNormalizedCorrelationImageToImageMetric.h/txx | ||
+ | ** Mean Squares metric. It is an multithreaded and optimized version of the Mattes MI method. | ||
+ | *** For more information, check the code; Insight/Code/Review/itkOptMeanSquaresImageToImageMetric.h/txx | ||
* "Expected" values | * "Expected" values | ||
** For rigid, affine, and bspline registration, parameter scales (refer to the Insight Software Guide) are represented as hyper-parameters in the RegisterImages module. | ** For rigid, affine, and bspline registration, parameter scales (refer to the Insight Software Guide) are represented as hyper-parameters in the RegisterImages module. | ||
Line 126: | Line 138: | ||
*** "Expected Scale" is for scaling during affine registration | *** "Expected Scale" is for scaling during affine registration | ||
*** "Expected Skew" is for skew for affine registration | *** "Expected Skew" is for skew for affine registration | ||
− | |[[Image:RegisterImagesGlobalParameters.png|thumb|380px| Global Parameters<br> This panel controls what will happen overall.]] | + | |[[Image:RegisterImagesGlobalParameters-3.6.png|thumb|380px| Global Parameters<br> This panel controls what will happen overall.]] |
|} | |} | ||
− | === | + | === Advanced Registration Parameters Tab === |
{| | {| | ||
− | |* Verbosity level | + | | |
+ | * Verbosity level | ||
** Controls the level of detail in the reports in the log file | ** Controls the level of detail in the reports in the log file | ||
* Sample from fixed/moving overlap | * Sample from fixed/moving overlap | ||
** When the fixed image is much larger than the moving image, it is CRITICAL to set this flag and to pick a good initialization method. In that way, only the portion of the fixed image that is initially covered by the moving image will be used during registration. This prevents ITK from throwing an exception (error) stating that too many fixed-image samples miss (map outside of) the moving image. | ** When the fixed image is much larger than the moving image, it is CRITICAL to set this flag and to pick a good initialization method. In that way, only the portion of the fixed image that is initially covered by the moving image will be used during registration. This prevents ITK from throwing an exception (error) stating that too many fixed-image samples miss (map outside of) the moving image. | ||
− | * Fixed image | + | * Fixed image mask |
− | ** A | + | ** A label image that specifies regions of the fixed image from which to draw samples for registration. This should have a label in regions you are interested in registration and have no label in regions you are not interested in or may contain significant differences between the image that should be excluded (pathology regions). |
− | |||
* Random number seed | * Random number seed | ||
** To ensure consistent performance, you can set a seed - repeated runs should produce identical results. | ** To ensure consistent performance, you can set a seed - repeated runs should produce identical results. | ||
* Number of threads | * Number of threads | ||
− | ** Number of multi-core/ | + | ** Number of multi-core/multi-processor threads to use during metric value computations. |
* MimimizeMemory | * MimimizeMemory | ||
** Turns off caching of intermediate values during bspline registration | ** Turns off caching of intermediate values during bspline registration | ||
Line 149: | Line 161: | ||
** If you have time to kill. Extremely slow and only marginally better than bspline resampling (the default). | ** If you have time to kill. Extremely slow and only marginally better than bspline resampling (the default). | ||
− | |[[Image:RegisterImagesAdvancedGlobalParameters.png|thumb|380px| Advanced Global Parameters Tab | + | |[[Image:RegisterImagesAdvancedGlobalParameters-3.6.png|thumb|380px| Advanced Global Parameters Tab]] |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
Line 179: | Line 170: | ||
** Two fiducial lists of corresponding points in the fixed and moving images. Only selected fiducials are used and the fixed and moving landmarks must have the same number of landmarks in the same order. | ** Two fiducial lists of corresponding points in the fixed and moving images. Only selected fiducials are used and the fixed and moving landmarks must have the same number of landmarks in the same order. | ||
** If supplied, then choose "Landmarks" as the initial registration method (see discussion on registration pipeline) | ** If supplied, then choose "Landmarks" as the initial registration method (see discussion on registration pipeline) | ||
− | |[[Image:RegisterImagesAdvancedInitialFiducials.png|thumb|380px|Initialization of rigid registration]] | + | |[[Image:RegisterImagesAdvancedInitialFiducials-3.6.png|thumb|380px|Initialization of rigid registration]] |
|} | |} | ||
Line 254: | Line 245: | ||
===Source code & documentation=== | ===Source code & documentation=== | ||
− | Customize following [http://viewvc.slicer.org/viewcvs.cgi/ links] for your module. | + | Customize following [http://viewvc.slicer.org/viewcvs.cgi/trunk/Applications/CLI/RegisterImagesModule/ links] for your module. |
[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/ Links] to documentation generated by doxygen. | [http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/ Links] to documentation generated by doxygen. | ||
Line 261: | Line 252: | ||
===Acknowledgment=== | ===Acknowledgment=== | ||
− | + | This work is part of the National Alliance for Medical Image Computing (NAMIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149. Information on the National Centers for Biomedical Computing can be obtained from National Centers for Biomedical Computing. | |
===References=== | ===References=== | ||
Line 267: | Line 258: | ||
*[[Media:Rigid registration of aligned images-03-2009.txt|some email about initialization]] | *[[Media:Rigid registration of aligned images-03-2009.txt|some email about initialization]] | ||
*[http://www.na-mic.org/Wiki/index.php/ITK_Registration_Optimization ITK Registration optimization] | *[http://www.na-mic.org/Wiki/index.php/ITK_Registration_Optimization ITK Registration optimization] | ||
− | *[ | + | *[[Slicer3:LinearRegistrationUseCases|Slicer2 vs Slicer3 registration validation]] |
*[http://www.batchmake.org/Wiki/Batchmake_slicer Using BatchMake with Slicer RegisterImages module] | *[http://www.batchmake.org/Wiki/Batchmake_slicer Using BatchMake with Slicer RegisterImages module] | ||
===Wishlist=== | ===Wishlist=== | ||
− | |||
− | |||
− | |||
*include moving filename into default names of results | *include moving filename into default names of results | ||
*display fixed and moving results in compareview with proper LUTs (different colors for fixed and result, apply w/l from moving to results volume | *display fixed and moving results in compareview with proper LUTs (different colors for fixed and result, apply w/l from moving to results volume |
Latest revision as of 02:23, 27 November 2019
Home < Modules:RegisterImages-Documentation-3.6Return to Slicer 3.6 Documentation
Contents
Register Images
General Information
Module Type & Category
Type: CLI Module calling ITK functions
Category: Registration
Authors, Collaborators & Contact
- Author1: Stephen Aylward, Kitware
- Author2: Casey Goodlett, Kitware
- Contributor1: Ron Kikinis (copying documentation)
- Contact: Casey Goodlett, Kitware
Module Description
This Module is an integrated framework providing access to ITK registration technologies. Algorithms can be run in single mode or pipelined. Depending on the size of the data sets, a significant amount of memory is needed. There is an option to trade off speed for memory. Most of the code is parallelized and will take advantage of multicore capabilities, if available.
New Features in 3.6
- Integration of transform nodes instead of reading/writing to files
- Integration of landmark module for specifying initialization
- Ability to specify a label mask on the fixed image for limiting regions of metric calculation
- Exposed metrics besides Mutual Information
- Simplified parameters
- Ability to include parameter presets distributed with Slicer
Major Features
The major features of the module include:
- Default parameters register many full-head and skull-stripped MRI: rigid, affine, and BSpline
- Offers a complete, pipeline-based registration solution
- Load and apply existing transforms
- Compute rigid, affine, and bspline transforms in sequence with a single command
- Intuitive parameters
- Instead of setting obscure "scales" for parameters, you set global values for "Expected Offset", "Expected Rotation", ... to indicate how much mis-registration is anticipated in the data being registered
- MinimizeMemory option provides a way to compute bspline registrations using a dense set of control points and a large number of samples on "normal" computers (albeit computation time increases)
- SampleFromOverlap option allows images of vastly different sizes to be registered
- Helps to avoid (but does not completely eliminate) the annoying ITK exception, "too many samples falls outside of the image"
- Based on an extensible and re-usable class structure.
Usage
- If you have a large data set or little memory, select the minimize memory option
- If you are planning to use the b-spline registration, be sure to read the discussion of parameter setting in the section below.
Use Cases, Examples
See Registration Use Case project
Quick Tour of Features and Use
See here for more information.
Main Registration Panel
Parameter Choices
- The default parameters should work for a wide range of cases
- In some cases (e.g. unusual acquisition conditions and/or highly inconsistent acquisition protocols) you will need to change the default parameters.
- In other situations, you may wish to tweak parameters to achieve your application-specific speed-vs-accuracy trade-off
See also this page on the NA-MIC wiki about parameter tuning for this module.
Overview
- Step 1: Loaded transform
- You may load a pre-computed transform to initialize the registration.
- If one is loaded, it is immediately applied (i.e., the moving image is resampled)
- Step 2: Initial registration
- Options are:
- None (sets the center of rotation to the center of the moving image)
- Landmark (uses N-pairs of landmarks (passed as vectors) and a least-squared error metric to register the images using a rigid transform
- Image Centers (shifts the images to align their centers)
- Centers of Mass (shifts the images to align their centers of mass)
- Second Moments (shifts and rotates the images to align the 1st and 2nd moments)
- Options are:
- Step 3: Registration
- Options are:
- None (applies the loaded transforms)
- Initial
- computes and applies the initial transform to the loaded registrations)
- Rigid
- computes a rigid transform and then applies it to the loaded registrations
- Affine
- computes an affine transform and then applies it to the loaded registrations
- BSpline
- computes a bspline transform and then applies it to the loaded registrations
- PipelineRigid
- computes a rigid transform (initialized using the results from the initial registration) and then applies it to the loaded registrations
- PipelineAffine
- computes a rigid transform (initialized using the results from the initial registration), uses those results to initialize and compute an affine transform, and then applies it to the loaded registrations
- PipelineBSpline
- computes a rigid transform (initialized using the results from the initial registration), uses those results to initialize and compute an affine transform, and then applies it to the loaded registrations, THEN computes and applies a BSpline transform
- Options are:
Detailed Information
IO Tab
|
Registration Parameters Tab
|
Advanced Registration Parameters Tab
|
Advanced Initial Registration Parameters
|
Advanaced Rigid and Affine Parameters
|
Advanced BSpline Parameters
|
Use Cases
Example 2: Affine Registration
- Task:
- Affine registration of head MRI from two different subjects
- Data:
- Using cases UNC-Healthy-Normal002 (fixed) and UNC-Healthy-Normal004 (moving)
- Data provided by Dr. Bullitt at UNC.
- Data is available from Kitware's MIDAS archive at http://hdl.handle.net/1926/542
- Data can be automatically downloaded into ${RegisterImages_BINARY_DIR}/Testing/Data directory by enabling the CMake variable "BUILD_REGISTER_IMAGES_REAL_WORLD_TESTING"
- Warning this also enables additional tests that can take 4+ hours to complete.
- To see the code for automatically downloading from MIDAS (via svn), see Slicer3/Applications/CLI/RegisterImagesModule/Applications/CMakeLists.txt
Example 3: BSpline Registration
- Task:
- BSpline registration of head MRI from two different subjects
- Data:
- Using cases UNC-Healthy-Normal002 (fixed) and UNC-Healthy-Normal004 (moving)
- Data provided by Dr. Bullitt at UNC.
- Data is available from Kitware's MIDAS archive at http://hdl.handle.net/1926/542
- Data can be automatically downloaded into ${RegisterImages_BINARY_DIR}/Testing/Data directory by enabling the CMake variable "BUILD_REGISTER_IMAGES_REAL_WORLD_TESTING"
- Warning this also enables additional tests that can take 4+ hours to complete.
- To see the code for automatically downloading from MIDAS (via svn), see Slicer3/Applications/CLI/RegisterImagesModule/Applications/CMakeLists.txt
Development
Dependencies
This module makes use of GenerateCLP, MRMLIO and ITK.
- GenerateCLP is used to defined the command-line options. GenerateCLP is distributed with Slicer (/Libs/GenerateCLP).
- MRMLIO is used to replace reading/writing images in ITK to instead passing pointers to shared memory. MRMLIO is distributed with Slicer (/Libs/MRMLIO).
- ITK is used to provide the algorithms. ITK must be compiled with the CMake variables USE_REVIEW, USE_TRANSFORM_IO, and USE_OPTIMIZED_REGISTRATION_METHODS enabled. These options are automatically enabled when ITK is build using Slicer's getBuildTest.tcl script.
Known bugs
- Module may fail (and not report a useful error to the console - check the log files) if insufficient memory is available. If so, please consider enabling the MinimizeMemory option in the Advanced Options tab.
Follow this link to the Slicer3 bug tracker.
Usability issues
Follow this link to the Slicer3 bug tracker. Please select the usability issue category when browsing or contributing.
Source code & documentation
Customize following links for your module.
Links to documentation generated by doxygen.
More Information
Acknowledgment
This work is part of the National Alliance for Medical Image Computing (NAMIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149. Information on the National Centers for Biomedical Computing can be obtained from National Centers for Biomedical Computing.
References
Publications related to this module go here. Links to pdfs would be useful.
- some email about initialization
- ITK Registration optimization
- Slicer2 vs Slicer3 registration validation
- Using BatchMake with Slicer RegisterImages module
Wishlist
- include moving filename into default names of results
- display fixed and moving results in compareview with proper LUTs (different colors for fixed and result, apply w/l from moving to results volume
- use in combination with VOI
- more detailed explanation of how to set parameters
- increase number of example solutions