Handling deformable transforms in Slicer meeting minutes
From NAMIC Wiki
Home < Handling deformable transforms in Slicer meeting minutes
Operations
- Harden transform
- Harden transform* is an existing capability that collapses linear transforms in a transform hierarchty. Hardening is available as a context menu on a (data) node in the Data module. When hardened, the data object is moved in the Data module to be outside all transformations with the effect of the transform hierarchy applied. *Harden transform* is only available for transform hierarchies involving linear transforms.
- Clone and harden
- Clone and harden* differs from the current *Harden transform* capability in two ways:
- Instead of the data being moved outside of all transforms, a "copy" of the data will be moved outside of all transforms.
- All transform types, linear and deformable, will be part of the hardening.
Proposed data type support
- Scalar volumes
- Vector volumes
- RGB
- Vector
- Displacement field
- Tensor volumes
- Models
- Fiducials and annotations
- Multivolume
Questions
- Should we maintain a link between the original and hardened data?
- Should only the hardened version be available for visualization?
- Probably yes, but display a warning on hardening
- Can you clone and harden part of the transform hierarchy?
- Harden just the non-linear portions
- Which tools do we use for each type of data to harden/warp the data?
- When hardening applied, the user would be presented with a list of modules that can harden each type of data?
- What happens to
- pixel lattice - stays the "same"
- create an axis-aligned bounding box in the world space, the number of pixels along each dimension will change
- spacing - affected by the transform
- orientation - affected by the transform
- pixel lattice - stays the "same"
Design
- Level of performing the hardening
- Application level: module can register itself as the capable of hardening certain types of data.
- For now the modules containing the algorithms (BRAINSResample, Resample Scalar/Vector/DWI Volume) will be known by the class performing the hardening
- Logic level
- Application level: module can register itself as the capable of hardening certain types of data.
- Need to know the inverse of each transform
- to transform the models and fiducials
- to figure out how to define an appropriate lattice
- need to back transform all the edge/face voxels to find the bounding box in the world space
- Three options presented to the user
- Resample in source lattice (still cloned)
- Resample into lattice that bounds the warping of the edge/face voxels
- Resample into a target volume
- Where?
- Tie into the drag and drop of the Data module and prompt the user to harden the transform.
- Transforms module: display tree, and add a 'Harden' button to the panels
- Subject Hierarchy right-click -> apply transform to branch
- Look at the logic of handling transforms in DICOM
Subject hierarchy
- Transforms resulting from registration point back to the fixed and moving images. This information is stored in the *attributes* of the hierarchy node.
- Should we use the DICOM frame of reference concepts (frame of reference UID).
- Transform map between two frames of references.
- Currently, Slicer combines two concepts:
- Frame of reference
- Everything "under" a transform is in the same frame of reference
- Transform that maps between two frames of references
- The two frames of reference are implicitly defined by the transform hierarchy
- Frame of reference