Difference between revisions of "Projects:RegistrationDocumentation:ReferenceManual"
From NAMIC Wiki
Line 35: | Line 35: | ||
**'''Verbosity Level''': Controls the level of detail in the reports in the log file | **'''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. | **'''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. | ||
− | * | + | **'''Random Number Seed''': To ensure consistent performance, you can set a seed - repeated runs should produce identical results. |
− | *'''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. |
− | *'''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 |
− | *'''Minimize Memory''': Turns off caching of intermediate values during bspline registration | + | **''Interpolation'': select interpolation type for resampling result image immediately |
− | *''Interpolation'': select interpolation type for resampling result image immediately | + | **'''Max.iterations''' Number of iterations for one-plus-one and for FRPR registration |
− | *'''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 |
− | *'''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. |
− | *'''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 == |
Revision as of 16:58, 8 December 2009
Home < Projects:RegistrationDocumentation:ReferenceManualBack to Registration main page
Contents
Main Register Images Parameters
- 'Parameter set: will become "Presets" menu
- IO
- Input Fixed Image:
- Input Moving Image:
- Input Mask/ROI: (optional) provide ROI or labelmap to focus registration only on a particular area of the image. Use the editor to create a labelmap or ROI tool to create an ROI box.
- Input Transform: provide the Loaded Transform for the loaded phase of registration
- Output Result Transform: results of the entire registration pipeline will be saved as Xform node here
- Output Resampled Registered Image: result Xform applied to moving image and resampled, creates a new volume node
- Initialization (only if no input Xform specified above):
- None
- 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 DOF (for details on DOF see xxLinkToBasicsTutorial)
- Rigid 6 DOF:computes a rigid transform with 6DOF: 3 Translations & 3 Rotations
- Rigid 7 DOF:computes a rigid transform + a global scaling factor. Moving image will resize, but aspect ratio stays intact
- Similarity 9 DOF:computes a similarity transform + 3 individual scaling factors. Moving image will resize and aspect ratio will change.
- Affine 12 DOF: computes a full affine transform incl. local scaling and shearing.
- BSpline: -> will become a separate submodule. computes a B-spline transform, which is a non-rigid and nonlinear transform. Image is allowed to deform locally. Also known as "image warping". The amount of regularization, i.e. how much local deformation is allowed is controlled via the grid-spacing.
- Metric
- Mutual Information metric. It is an multithreaded and optimized version of the Mattes MI method. For more details about how MI works see xxLinkToBasicsTutorial. For developers will find details in the code: Insight/Code/Review/itkOptMattesMutualInformationImageMetric.h/txx
- NormCorr: Normalized Image Correlation. Image cross-correlation as surrogate for similarity. This works well for similar contrast and can give better accuracy than MI, albeit less robust to large misalignment. Current version is not parallelized, i.e. will not take advantage of multiple CPU threads and is therefore much slower than MI.
- MeanSqrd: Mean-square intensity difference. As NormCorr, this works well for similar contrast and can give better accuracy than MI. Depends more on similar contrast than NormCorr.
- Cost Function Scaling Factors: These control on how the optimization landscape is calibrated, i.e. how big translation steps should be relative to rotation etc. These parameters, although complex, are important tools to calibrate a registration to an individual challenge and can greatly improve the result is set correctly.
- Expected Offset controls the offset scales in rigid and affine 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.
- 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
Register Images Usage
--processinformationaddress <std::string> Address of a structure to store process information (progress, abort, etc.). (default: 0)
--xml Produce xml description of command line arguments (default: 0)
--echo Echo the command line arguments (default: 0)
--controlPointSpacing <int> Number of pixels between control points (default: 40)
--bsplineSamplingRatio <float> Portion of the image to use in computing the metric during BSpline registration (default: 0.1)
--bsplineMaxIterations <int> Maximum number of bspline optimization iterations (default: 20)
--affineSamplingRatio <float> Portion of the image to use in computing the metric during affine registration (default: 0.02)
--affineMaxIterations <int> Maximum number of affine optimization iterations (default: 50)
--rigidSamplingRatio <float> Portion of the image to use in computing the metric during rigid registration (default: 0.01)
--rigidMaxIterations <int> Maximum number of rigid optimization iterations (default: 100)
--movingLandmarks <std::vector<std::vector<float> >> (accepted multiple times) Ordered list of landmarks in the moving image
--fixedLandmarks <std::vector<std::vector<float> >> (accepted multiple times) Ordered list of landmarks in the fixed image
--baselineResampledMovingImage <std::string> Result resampling the moving image to the space of the baseline image
--baselineDifferenceImage <std::string> Result from subtracting the registered moving image from the baseline image
--baselineRadiusTolerance <int> Maximum neighborhood that will be searched to find a matching pixel (default: 0)
--baselineIntensityTolerance <double> Maximum intensity difference for pixels to be considered matching (default: 10)
--baselineNumberOfFailedPixelsTolerance <int> Maximum number of pixels that can differ and the test pass (default: 1000)
--baselineImage <std::string> Image against which the resampled moving image will be compared
--interpolation <NearestNeighbor|Linear|BSpline> Method for interpolation within the optimization process (default: Linear)
--minimizeMemory Reduce the amount of memory required at the cost of increased computation time (default: 0)
--numberOfThreads <int> Number of CPU threads to use (default: 0)
--randomNumberSeed <int> Seed to generate a consistent random number sequence (default: 0)
--fixedImageMask <std::string> Image which defines a mask for the fixed image
--sampleFromOverlap Limit metric evaluation to the fixed image region overlapped by the moving image (default: 0)
--verbosityLevel <Silent|Standard|Verbose> Level of detail of reporting progress (default: Standard)
--expectedSkew <float> Expected misalignment after initialization (default: 0.01)
--expectedScale <float> Expected misalignment after initialization (default: 0.05)
--expectedRotation <float> Expected misalignment after initialization (default: 0.1)
--expectedOffset <float> Expected misalignment after initialization (default: 10)
--metric <MattesMI|NormCorr|MeanSqrd> Method to quantify image match (default: MattesMI)
--registration <None|Initial|Rigid|Affine|BSpline|PipelineRigid |PipelineAffine|PipelineBSpline> Method for the registration process (default: PipelineAffine)
--initialization <None|Landmarks|ImageCenters|CentersOfMass |SecondMoments> Method to prime the registration process (default: CentersOfMass)
--saveTransform <std::string> Save the transform that results from registration
--loadTransform <std::string> Load a transform that is immediately applied to the moving image
--resampledImage <std::string> Registration results
--, --ignore_rest Ignores the rest of the labeled arguments following this flag.
--version Displays version information and exits.
-h, --help Displays usage information and exits.
<std::string> (required) Image which defines the space into which the moving image is registered
<std::string> (required) The transform goes from the fixed image's space into the moving image's space
Description: Provides rigid, affine, and BSpline registration methods via a simple GUI
Author(s): Stephen R Aylward
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