I’m trying to match the node IDs between two vtk models. I was thinking if it’s possible to have all vertices on a vtk model be markups, so that I can directly use the vertices on the surface of the source model as its landmarks and perform ALPACA in the SlicerMorph module.
You can look at the script repository and to probably work that out.
What is your goal with ALPACA? To register these two vtk models, or to transfer your landmarks from one model to the other?
Thanks for the reply!
I’d like to match points 1:1 on two vtk models. My plan is to register two vtk models using ALPACA first and then match the points between the TPS warped model and the target model by finding nearest neighbors of points.
Would it be possible to directly transfer landmarks from one model to the other using SlicerMorph? I saw the ProjectSemiLM utility modules, but could it project those landmarks to the vertices of the target model?
ALPACA will transfer points on one (source) model to the target model for you.
ALPACA is a point-cloud registration. We often work with 3D models with hundreds of thousands (or more) vertices, but our anatomical landmarks on them are far sparser (from tens to thousands range). To improve the speed, we turn the models into downsampled pointclouds, do the registration as point clouds, and then apply the resultant transformation to the models. This seem to perform sufficiently well, and rather fast, for our use cases. I am not sure how well your LMs will be transferred if you use every single vertex as a landmark. We never tried such approach.
TPS deformation is very slow when you have large number of points. Also projectSemiLM module requires existence of manually annotated landmarks on source and target models (see SlicerMorph/Docs/ProjectSemiLM at master · SlicerMorph/SlicerMorph · GitHub). I don’t think it will work for your case.