Surface semilandmarks created inadequately

I would like to use SlicerMorph to place surface semilandmarks. I tried two ways, either digitizing the fixed landmarks inside SlicerMorph or in external software. Both approaches failed.

For method 1, I used the “Creat fiducial markup” option in the Markup module to place fixed landmarks. I then switched to the SemiLandmark module for patching. A screenshot below:

Obviously, the patching result falls short of expectation. I guess this is due to the inappropriate selection of Landmark set, where instead of selecting a set of landmarks, I only selected landmark 1. I followed the Youtube tutorial but this tutorial imported landmarks digitized elsewhere rather than producing fixed landmarks inside SlicerMorph. How can I patch semilandmarks based on fixed landmarkd digitized in SlicerMorph?

Method 2: I followed the video tutorial above and digitized landmarks 1 to 4 in Avizo. I then tried to create a fcsv file for import into SlicerMorph. Strangely, when I load the fcsv file into SlicerMorph, the four landmarks do not appear where they are expected to lie. Actually, they are hidden inside the bony structures. However, I checked in R and I am sure that there is no issue with the coordinates.
I am therefore wondering if I am not making the correct format for the fcsv file. I did not file what is the format that landmarkd digitized externally should be imported. If it is fcsv, what should the format be like.

BTW, I have got a further question on how to obtain the pairing information for semilandmarks created. Using the example form the youtube video:

Landmark 36 and 37 are paired landmarks on right and left side. Similarly, semilandmark A and B are paired. While it is straightforward to keep a record that lm 36 and 37 are bilaterally corresponding landmarks, I wonder how could we extract such pairing information for semilandmarks?

Such pairing information is needed for both the geomorph and Morpho R package to implement GPA for specimens with object symmetry.

Sorry for my long question and thank you.

@lv_xiao couple things: SlicerMorph is under constant development, so please use a recent version of Slicer and then install SlicerMorph extension. That will give you the latest changes. You can find the official install instructions here: https://github.com/SlicerMorph/SlicerMorph#installation

Also we renamed the modules to reflect their functions better. SemiLandmark module is now called CreateSemiLMPatches. This module will create triangular patches based on the three fixed landmarks you specified. The nasal area has a lot of curvature changes so you will need to play with the advanced features (maximum projection and smoothing of the projection vectors) to get a triangular patch of points (right now you are only seeing a line, I suspect all other rows ended up in side the model). It also takes a few iterations to find the ideal triangulation pattern that works for your needs.

There is currently no way to make distinguish left and right pairs of semi-landmarks created this way.

You may also want to try the PseudoLMGenerator, which will take a mesh and give you almost uniformly sampled points on the surface. See the instructions in here: https://github.com/SlicerMorph/S_2020/blob/master/Day_3/Spherical_sampling/Spherical_Sampling.md#template-estimated-from-the-specimen-geometry. One benefit of PseudoLMGenerator is, soon it will support defining a plane of symmetry and reflecting the points to the other side to create symmetrized point cloud. For that, you can get the pairing information.

If all your specimen has fixed landmarks, you can use ProjectSemiLMPatches to transfer this template to new samples. If you do not have fixed landmarks, alternatively you can use the ALPACA module to transfer to new models. Here is the tutorial for alpaca https://github.com/SlicerMorph/S_2020/blob/master/Lab_ALPACA/README.md

As for why your points from Avizo doesn’t show up correctly in Slicer, I suspect that’s a coordinate issue. Slicer assumes models to be saved in LPS coordinate system. If this is not what Avizo does, that might explain the issue. You can specify the coordinate system for the model to be RAS and see if that helps. If that still doesn’t solve the issue, please send me a PLY model saved out of Avizo and coordinates of four landmarks as shown in avizo (a text file would suffice, do not try to convert them to fcsv), and I can take a look.

In general, if you do both your digitization and analysis in SlicerMorph, you won’t have to worry about this coordinate change issue.

Actually looking more closely to your screenshot, now I see what might have gone wrong. You have created each fiducial as a separate node. Instead you want to have single fiducial node that stores all those four points. @smrolfe can we limit the numbers to be legitimate entries?

This is one of the Slicer gotchas. There are two icons that look almost identical but have different functions. The top red box is the fiducial placement only. It will keep adding new fiducials to the currently active fiducial node. Whereas the second button (same icon with the little + sign) will simultaneously both create a new fiducial node and place the first point in. The second time you click this icon, it will create a second node and assign the newly created point this node. What you really want to use is the icon in the top row.

You can read more about the markup module details here: S_2020/Day_2/Markups/Markups.md at master · SlicerMorph/S_2020 · GitHub

@lassoan we really have to do something about this as this is confusing to almost everyone starting to use Slicer first time to do landmark. May be we can try to come up with different icons for these two functions?

I agree that changing the icons could help. We should remove the arrow from the create new node icons and add multiple points for the markup fiducial icon. Please send a pull request with the proposed change.

We should also put a place point button prominently in the Markups module GUI. Maybe in the Control points section?

Correct, all the landmarks should be in a single set, specified in the field ‘Landmark set’ I will add some error checking to make sure this is more obvious.

Thanks @lassoan, I will follow up with this.

1 Like

Thank you Prof. Murat and everyone else. I am expecting the incorporation of plane of symmetry into PseudoLMGenerator. That will allow for GMM analysis of degree of symmetry of specimens.

Following your recommendations, I also learned ALPACA. In your preprint paper, you described the step in which the predicted landmarks are projected to the target surface mesh as “final and optional”. I would like to ask:

  1. How to technically perform this optional step in SlicerMorph module in 3D Slicer? I did not seem to find a button for such projection. I could only see “Run CPD non-rigid registration” and “Show registered source model”.

  2. For downstream GMM analysis, is it preferrable to perform or not to perform this “final and optional” step?

You should see those options in here:

In fact projection is applied unless you actually do not want it. If you don’t see this, install a newer version of 3D Slicer and then SlicerMorph extension.

The answer to that is data dependent. You should try to experiment with different options until you achieve what you think the best point correspondence for your analysis, and then conduct GMM.

1 Like