I’m working in 3D Slicer to place landmarks on 3D meshs.
I would like to apply something like the figure 1. A of this paper in 3D, involving projection and landmark as a geometric construction. What is the best way to display a grid for placing landmarks accurately?
Thanks in advance.
These types of geometrically constructed landmarks are more tricky to do in 3D. In 2D you standardize the orientation prior to taking the picture and then you lay the grid.
Standardizing the orientation in 3D usually requires a template and registration.
Regardless of the challenges you should be able to do all of those in Slicer with little bit python scripting. I didn’t read the paper in detail, but if you have reference LMs that define those lines, you would being with placing those. Of course in 3D part line connecting those pair of landmarks might end up inside the mesh, so you might have to project onto the axis where you want to create the semi-landmark.
You should start by reviewing the script examples of Markups modules. Script repository — 3D Slicer documentation
ps. Did you try the semi/pseudoLMing tools in SlicerMorph?
Indeed - this is easier to standardize in 2D.
We are trying both fewer points (like the hereabove cited study) and high density patches by subsampling the surface with pseudolandmarks then backtransfer them to other meshes as semilandmarks with the R software. We only rely on 3D slicer for ‘standard’ points position and to ‘register’ specimens in R.
I had a look to SlicerMorph module earlier but we build an alternative efficient way in R.
The only problem is to standardize then the grid I want to have as a reference to geometrically link the points… Maybe there’s a way to show a grid on the surface mesh than I can locally align with the most accurate orientation or something alike.
Thank you so much.
You can lay an arbitrary 3D grid on any object using Transform module of slicer (in this screen shot spacing of grid lines is 20mm).
Thank you so much.
It’s working. However, the grid minimal spacing is 1 mm and some of our models are about 2-3 mm and we would like to have something like 0.5-0.2 µm.
Is it feasible ?
Sorry if it is too basic…
Yes, I noticed that too for small models.
You can use a trick, first create scaling transform in which diagonals are like 100 100 100 (meaning all axes are scaled by 100). Then create an empty pointList markup up object. Place both markup object and your model under this scaling transform.
Then proceed as before. Once you are done, take model and pointList object out of transform, and the coordinates should be now in the original scale.