Difference between revisions of "2008 Summer Project Week:Nonlinear transforms"
From NAMIC Wiki
Line 76: | Line 76: | ||
#* Modify vtkMRMLTransformStorageNode to add an inversion to the sequence of converting Slicer <-> ITK (already doing an RAS to LPS conversion). | #* Modify vtkMRMLTransformStorageNode to add an inversion to the sequence of converting Slicer <-> ITK (already doing an RAS to LPS conversion). | ||
#* Affects all transforms loaded/saved to file (such as through the menu option to "Add Transform...") | #* Affects all transforms loaded/saved to file (such as through the menu option to "Add Transform...") | ||
− | #* Ugly for BSpline and GridTransforms | + | #* Ugly for BSpline and GridTransforms (speed and accuracy concerns). |
#* Prototype implemented. | #* Prototype implemented. | ||
# (Short term) Assume all transform to CLI need "to be" or "are" resampling transforms. | # (Short term) Assume all transform to CLI need "to be" or "are" resampling transforms. | ||
Line 84: | Line 84: | ||
#* Only affects transform sent to/from CLI. Doesn't affect transform loaded with "Add Transform...". | #* Only affects transform sent to/from CLI. Doesn't affect transform loaded with "Add Transform...". | ||
#** So transform files generated via batch running of CLI will have to be manually inverted within Slicer (or an invert option will need to be added to the "Add Transform..." dialog). | #** So transform files generated via batch running of CLI will have to be manually inverted within Slicer (or an invert option will need to be added to the "Add Transform..." dialog). | ||
− | #* Ugly for BSpline and GridTransforms | + | #* Ugly for BSpline and GridTransforms (speed and accuracy concerns). |
− | # Add attribute to transforms to indicate transform sense (ToParent verses FromParent) | + | # (Long term) Add attribute to transforms to indicate transform sense (ToParent verses FromParent) |
#* Modification needed at the CLI interface layer to manage what sense CLI are expecting and producing | #* Modification needed at the CLI interface layer to manage what sense CLI are expecting and producing | ||
− | #* Modify vtkMRMLTransformStorageNode to properly manage sense | + | #* Modify vtkMRMLTransformStorageNode to properly manage sense, provide the right sense to a CLI, etc. |
+ | #* Nothing changes within the CLI module | ||
#* Modify all uses of transforms to take advantage of the sense of transform (skip unnecessary transform inversions) | #* Modify all uses of transforms to take advantage of the sense of transform (skip unnecessary transform inversions) | ||
+ | #* BSplines and GridTransforms may be handled cleanly |
Revision as of 20:09, 22 October 2008
Home < 2008 Summer Project Week:Nonlinear transforms
Key Investigators
- GE Research: Jim Miller, Bess Lee
- Isomics: Steve Pieper, Alex Y.
Objective
Extend Slicer's suite of transformations to include nonlinear transformations (B-spline, deformation grids) in the MRML scene, visualization pipeline, and command line modules.
Approach, Plan
- Develop new MRML nodes and MRML storage nodes for B-splines and deformation grids.
- vtkITK wrapper around ITK classes
- Add attribute to transform nodes to indicate whether they represent a "Transform to World/Parent" or "Transform from World/Parent"
- Extend visualization system for "Transform to World/Parent" or "Transform from World/Parent"
- Extend command line modules to annotate a transformation as a "Transform to World/Parent" or "Transform from World/Parent"
- Identify places in slicer3 code where linear transforms are assumed - these either need generalization or informative warning/error messages
Progress
Concrete
- MRML nodes and storage nodes for B-spline and deformation grids "done".
- "Copied" the "Linear registration" module to "Rigid registration"
- "Affine registration" now a shared object library (much faster)
Discussions
- Eulerian/Langrangian viewpoint discussions (Gary, Steve)
- Transform file format "should" indicate the coordinate frames and direction a transform maps* "Add Transform..." menu added
- Coordinate frame manager to map between any two data sets verses mapping to parent/world. (Mike)
- Named coordinate frames, coordinate frame for new data is labeled as the name of the dataset
- If transformation between coordinate frames is "unknown", Slicer will initially assume they are the same coordinate frame (identity)
Todo
- itkDisplacementFieldTransform
- Transform attribute of coordinate frame
- Coordinate frame manager from Mike Halle
- Maps between any two datasets not necessarily to world, have multiple transformation "estimates" for a single coordinate frame mapping.
- Visualization support?
- TransformDisplayNode?
- Need to patch itkTransformFactory (trunk and release) to register BSplines for 2D and 3D for floats and doubles (Luis)
References
Design options
- (Short term) Assume all transforms in ITK transform files are resampling transforms and hence need to be inverted on read/write from Slicer.
- Nothing changes at the CLI interface layer
- Nothing changes within the CLI module
- Modify vtkMRMLTransformStorageNode to add an inversion to the sequence of converting Slicer <-> ITK (already doing an RAS to LPS conversion).
- Affects all transforms loaded/saved to file (such as through the menu option to "Add Transform...")
- Ugly for BSpline and GridTransforms (speed and accuracy concerns).
- Prototype implemented.
- (Short term) Assume all transform to CLI need "to be" or "are" resampling transforms.
- All changed are at the CLI interface layer
- Nothing changes within the CLI module
- Modify the vtkCommandLineModuleLogic (writing of transforms) and vtkSlicerApplicationLogic (reading of transforms).
- Only affects transform sent to/from CLI. Doesn't affect transform loaded with "Add Transform...".
- So transform files generated via batch running of CLI will have to be manually inverted within Slicer (or an invert option will need to be added to the "Add Transform..." dialog).
- Ugly for BSpline and GridTransforms (speed and accuracy concerns).
- (Long term) Add attribute to transforms to indicate transform sense (ToParent verses FromParent)
- Modification needed at the CLI interface layer to manage what sense CLI are expecting and producing
- Modify vtkMRMLTransformStorageNode to properly manage sense, provide the right sense to a CLI, etc.
- Nothing changes within the CLI module
- Modify all uses of transforms to take advantage of the sense of transform (skip unnecessary transform inversions)
- BSplines and GridTransforms may be handled cleanly