I have a bit of a workflow to extract the simplified shapes of fish spines from their whole skeletons, and then align them to one another. (I work on scoliosis & spine morphology.) Here is what I typically do:
Create a Markup list, manually add a series of fiducial landmarks to the narrowest central point of each vertebra (Using Markups).
Create a “Spine Tube” that approximates the width and shape of the spinal column. (Markups-to-Model using the Markup List as the Input > Create Tube > Set Radius = .35mm > Global Moving Polynomial for smoothing). Repeat for each fish from various scans, export the models.
Use the Markup Lists from the fish that I am registering to create “Rigid” Transforms. (Registration>Specialized>Fiducial Registration, Align 2 spines by assigning one as fixed & one as moving, Check “Rigid.”)
Align the Spine Tube Models by applying their corresponding markup transformations.
The problem that I have with this, is that this transformation is scaling my models, even though I am only applying Rigid transforms-- as in, if I align one small fish using the markups from its 32 vertebrae, to a rather big fish that has 32 vertebrae, the small fish ends up just as long as the big one. But “rigid” is checked, so this Transformation shouldn’t scale. (It appears to re-scale the whole model proportionally-- the tube radius of the scaled model ends up looking a little larger, even though I created the tubes with the same radius initially.) Can anyone figure out where this is going wrong?
That definitely sounds like a bug somewhere. You can check if the transform matrix is rigid using the Characterize Transform Matrix module of the Slicer Sandbox extension (GitHub - PerkLab/SlicerSandbox: Collection of utilities that are not polished implementations but can be useful to users; the extension is installable through the extension manager). If the output transform matrix of Fiducial Registration with the “Rigid” box checked does not represent a rigid transformation, report back here, ideally with a simple data set which would allow others to reproduce the problem.
I can reproduce this issue with a simple synthetic data set. I created a fixed fiducial set by clicking randomly, cloned it, created a scaling transformation, applied it to the clone and hardened it, and Fiducial Registration between the two produced a scaling transformation output even though the “Rigid” option was selected, which is clearly an error.
The issue was the ITK has been improved to be able to compute the scaling. I’ve pushed a fix, it will be in the Slicer Preview Release within a couple of days.