Maverick/RegisterImages

From KitwarePublic
Jump to navigationJump to search

Maverick: RegisterImages

Overview

This Maverick Module implements a registration pipeline. It is available as a stand-along application, as a set of classes, and as a module that can be used in one step of a Maverick workflow.

The steps in the registration pipeline implemented by RegisterImages are as follows:

  • 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)
  • 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

Intuitive Parameters

  • In rare cases (given unusual acquisition conditions and/or highly inconsistent acquisition protocols) you will need to change the default parameters.
  • More often you may wish to tweak parameters to achieve your application-specific speed-vs-accuracy tradeoff

IO Parameters

  • Set the fixed and moving images using images in the scene
  • Optionally set the ResampleImage to store the output image
    • If not set, registration won't conduct the final resampling, saving computation time

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
    • see registration pipeline discussion
  • Registration
    • see registration pipeline discussion
    • 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
  • Metric
    • Use the 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
  • "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.
      • "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

Advaned Registration Parameters

  • 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 intensity percentage threshold
    • A less robust way to overcome the image overlap issue discussed above, you can specify a threshold as a portion (0 to 1) of the fixed image intensity range that should be used to select fixed image samples for computing the metric. That is, by specifying 0.5, only the pixels in the upper half of the fixed-image's intensity range will be used during random sample selection.
    • Remember, it is important to include pixels inside and outside of the object of interest, otherwise the fixed image histogram may be too homogeneous for mis-registrations to be detected.
  • 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.
  • MimimizeMemory
    • Turns off caching of intermediate values during bspline registration
    • 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)
    • Rule of thumb, if the BSpline registration crashes - re-run with this option enabled.
  • use windowed sinc for final interpolation
    • If you have time to kill. Extremely slow and only marginally better than bspline resampling (the default).

Registration Testing Parameters

  • Baseline Image
    • Set the image against which the Resampled Image (IO tab) will be compared after registration
  • Number of Failed Pixels Tolerance
    • Registration returns "failure" if this many pixels are different between the Resampled and Baseline images
  • Intensity Tolerance
    • Minimum intensity difference between corresponding Resampled and Baseline pixels for those pixels to be counted as failures
  • Radius Tolerance
    • The program will search this neighborhood size about each Resampled pixel to find the closest matching Baseline pixel. The closest matching pixels are compared using the Intensity Tolerance (above)
  • Baseline Difference Image
    • Result of subtracting the resampled image from the baseline image
  • Baseline Resamples Moving Image
    • resampled image, resampled into the space of the baseline image

Advanced Initial Registration Parameters

  • Fixed / Moving Landmarks
    • A vector string (comma separated base-3 list) of the indexes of corresponding points in the fixed and moving images
    • If supplied, then choose "Landmarks" as the initial registration method (see discussion on registration pipeline)

Advanaced Rigid and Affine Parameters

  • MaxIterations
    • 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

Advanced BSpline Parameters

  • MaxIterations
    • 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
    • Do the math...if you have 40 pixels between control points, then there will be 40^3 (64,000) pixels relevant to each control point. That excessive for directing one control point. Keep the sampling small. For 40 pixels between control points, a sampling density of 0.1 provide 6,400 pixels for metric computation at each control point - more than enough.
    • When in doubt, turn on MinimizeMemory
  • Control point spacing (pixels)
    • Don't think about grid size - instead think about the level of detail that needs to be resolved (see discussion on sampling ratio).
    • When in doubt, turn on MinimizeMemory