Difference between revisions of "Projects:RegistrationDocumentation:ReferenceManual"
From NAMIC Wiki
Line 12: | Line 12: | ||
*'''Load Transform''': provide the Loaded Transform for the loaded phase of registration | *'''Load Transform''': provide the Loaded Transform for the loaded phase of registration | ||
*'''Save Transform''': results of the entire registration pipeline will be saved here | *'''Save Transform''': results of the entire registration pipeline will be saved here | ||
− | *''' | + | *Initialization: |
+ | **'''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) | ||
+ | *Registration | ||
+ | **'''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 | ||
+ | *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/itkOptMattesMutualInformationImageMetric.h/txx | ||
+ | ** '''NormCorr''' | ||
+ | ** '''MeanSqrd''' | ||
+ | * '''Expected Offset''' controls the offset scales in rigid and affine registration the deformation vector scale in bspline registration | ||
+ | * '''Expected Rotation''' is roughly in terms of radians. It controls the rotation angles in rigid and affine registration | ||
+ | * '''Expected Scale''' is for scaling during affine registration | ||
+ | * '''Expected Skew''' is for skew for affine registration | ||
+ | *Advanced Tab | ||
+ | *'''Verbosity Level''': Controls the level of detail in the reports in the log file | ||
+ | *'''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. | ||
+ | *'''Fixed Image Mask''': if a labelmap with a mask region is available and to be used, select it from the dropdown menu. | ||
+ | *'''Random Number Seed''': To ensure consistent performance, you can set a seed - repeated runs should produce identical results. | ||
+ | *'''Number of Threads''': Number of multi-core/mult-processor threads to use during metric value computations. | ||
+ | *'''Minimize Memory''': Turns off caching of intermediate values during bspline registration | ||
+ | *''Interpolation'': select interpolation type for resampling result image immediately | ||
+ | *'''Max.iterations''' Number of iterations for one-plus-one and for FRPR registration | ||
+ | *'''Sampling Ratio''' Portion of the image pixels to be used when computing the metric | ||
+ | *'''Apply''' button: this launches the automated registration process. Other functions of Slicer are still accessible while the registration is running. The registration module itself is disabled (appears in gray) and the notice '''Running''' appears at the top. | ||
− | + | == Main Algorithm == | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | == Main Algorithm | ||
*For rigid and affine registrations, one-plus-one evoluation optimization is first applied for N iterations, and then FRPR gradient-line-search optimization is applied. | *For rigid and affine registrations, one-plus-one evoluation optimization is first applied for N iterations, and then FRPR gradient-line-search optimization is applied. | ||
*** For more information, check the code: RegisterImagesModule/itkOptimizedImageToImageRegistrationmethod.h/txx | *** For more information, check the code: RegisterImagesModule/itkOptimizedImageToImageRegistrationmethod.h/txx | ||
Line 117: | Line 53: | ||
*** For more information, check the code: RegisterImagesModule/itkBSplineImageToImageRegistrationMethod.h/txx | *** For more information, check the code: RegisterImagesModule/itkBSplineImageToImageRegistrationMethod.h/txx | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Publications == | == Publications == | ||
− | |||
# [http://insight-journal.org/InsightJournalManager/view_reviews.php?pubid=172 Aylward, Stephen; Jomier, Julien; Barre, Sebastien; Davis, Brad; Ibanez, Luis, "Optimizing ITK’s Registration Methods for Multi-processor, Shared-Memory Systems." MICCAI Open Source and Open Data Workshop, 2007] [http://insight-journal.org/InsightJournalManager/download_publication.php?pubid=172&revision=2&name=OptimizingITKRegistrationMethods.pdf&pdf=1 (Download PDF)] | # [http://insight-journal.org/InsightJournalManager/view_reviews.php?pubid=172 Aylward, Stephen; Jomier, Julien; Barre, Sebastien; Davis, Brad; Ibanez, Luis, "Optimizing ITK’s Registration Methods for Multi-processor, Shared-Memory Systems." MICCAI Open Source and Open Data Workshop, 2007] [http://insight-journal.org/InsightJournalManager/download_publication.php?pubid=172&revision=2&name=OptimizingITKRegistrationMethods.pdf&pdf=1 (Download PDF)] | ||
# [[NAC_Grid_Enabled_ITK | BWH Neuroimaging Analysis Center (NAC), 2007-2008: Grid Enabled ITK]] | # [[NAC_Grid_Enabled_ITK | BWH Neuroimaging Analysis Center (NAC), 2007-2008: Grid Enabled ITK]] | ||
Line 147: | Line 70: | ||
*# DTI: components of the diffusion tensor | *# DTI: components of the diffusion tensor | ||
*#* [[DTI-non-rigid|Example data]] (Sylvain) | *#* [[DTI-non-rigid|Example data]] (Sylvain) | ||
− | |||
− | |||
− | |||
− | |||
* Use-cases | * Use-cases | ||
*# Intel Core2Duo | *# Intel Core2Duo |
Revision as of 16:26, 22 October 2009
Home < Projects:RegistrationDocumentation:ReferenceManualBack to Registration main page
Contents
Main Register Images Parameters
- 'Parameter set: could be made into the "Presets" menu?
- IO
- Fixed Image:
- Moving Image:
- Resample Image:
- Registration Parameters
- Load Transform: provide the Loaded Transform for the loaded phase of registration
- Save Transform: results of the entire registration pipeline will be saved here
- Initialization:
- 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)
- Registration
- 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
- 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/itkOptMattesMutualInformationImageMetric.h/txx
- NormCorr
- MeanSqrd
- Expected Offset controls the offset scales in rigid and affine registration the deformation vector scale in bspline registration
- Expected Rotation is roughly in terms of radians. It controls the rotation angles in rigid and affine registration
- Expected Scale is for scaling during affine registration
- Expected Skew is for skew for affine registration
- Advanced Tab
- Verbosity Level: Controls the level of detail in the reports in the log file
- 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.
- Fixed Image Mask: if a labelmap with a mask region is available and to be used, select it from the dropdown menu.
- Random Number Seed: To ensure consistent performance, you can set a seed - repeated runs should produce identical results.
- Number of Threads: Number of multi-core/mult-processor threads to use during metric value computations.
- Minimize Memory: Turns off caching of intermediate values during bspline registration
- Interpolation: select interpolation type for resampling result image immediately
- Max.iterations Number of iterations for one-plus-one and for FRPR registration
- Sampling Ratio Portion of the image pixels to be used when computing the metric
- Apply button: this launches the automated registration process. Other functions of Slicer are still accessible while the registration is running. The registration module itself is disabled (appears in gray) and the notice Running appears at the top.
Main Algorithm
- For rigid and affine registrations, one-plus-one evoluation optimization is first applied for N iterations, and then FRPR gradient-line-search optimization is applied.
- For more information, check the code: RegisterImagesModule/itkOptimizedImageToImageRegistrationmethod.h/txx
- For BSpline registration, a hierarchical registration scheme is used. An image pyramid having 3 levels is used to resample the images and the control grids. Heuristics are used to control the various resampling parameters. At each level, registration is conducted using FRPR gradient-line-search optimization.
- For more information, check the code: RegisterImagesModule/itkBSplineImageToImageRegistrationMethod.h/txx
Publications
- Aylward, Stephen; Jomier, Julien; Barre, Sebastien; Davis, Brad; Ibanez, Luis, "Optimizing ITK’s Registration Methods for Multi-processor, Shared-Memory Systems." MICCAI Open Source and Open Data Workshop, 2007 (Download PDF)
- BWH Neuroimaging Analysis Center (NAC), 2007-2008: Grid Enabled ITK
- IJ article on oriented images and registration in ITK
- http://www.insight-journal.org/dspace/bitstream/1926/1293/2/Brooks_Arbel_FastOrientedImage_V1.pdf
- Solution presented by the authors is closely related to the changes made in ITK
Algorithmic Requirements and Use Cases
- Use-cases
- Intersubject mapping
- Example data set (Kilian)
- fMRI to hi-res brain morphology mapping
- Example data set (Steve Pieper)
- DTI: components of the diffusion tensor
- Example data (Sylvain)
- Intersubject mapping
- Use-cases
- Intel Core2Duo
- Intel quad-core Xeon processors, Visual Studio 8, Windows Vista (Kitware: redwall)
- 6 CPU Sun, Solaris 8 (SPL: vision)
- 12 CPU Sun, Solaris 8 (SPL: forest and ocean)
- 16 core Opteron (SPL: john, ringo, paul, george)
- 16 core, Sun Fire, AMDOpteron (UNC: Styner)
Historic Results
January 5, 2008 - Note: "Opt" results are not using the OptLinearInterpolateImageFunction.
- MattesMI GetValue Results
- MattesMI, b-spline interpolation and transform, GetValue Results
- MeanSquares GetValue Results
- MattesMI GetValueAndDerivative Results
- MattesMI, b-spline interpolation and transform, GetValueAndDerivative Results
- MeanSquares GetValueAndDerivative Results
Historic Events
- April 6, 2007: TCon
- April 12, 2007: TCon
- April 18, 2007: TCon
- May 1, 2007: TCon
- June 27, 2007: NAMIC Programmers' Week
- January, 2008: NAMIC AHM
Related Pages
- built from ITK Registration Documentation
- Non Rigid Registration
- Slicer3:Performance_Analysis
- User:Barre/ITK Registration Optimization
- Testing and ITK Backward Forward Compatibility
Notes on Software Profiling Tools
- LTProf - simple profilter for Windows - Shareware
- Intel's VTune for Linux ($)
- TAU
- Threadmon: Thread usage/blockage
- TotalView ($)
- PerfSuite (POSIX Threads)
- GProf work-around for multi-threaded apps
- References on multi-threaded profiling and code optimization