Note
Go to the end to download the full example code
Set landmarks¶
Landmarks can be set manually or using the landmark setter.
import pyvista as pv
from pyvista import examples
import skshapes as sks
# sphinx_gallery_thumbnail_path = 'source/images/landmarks_skull.gif'
- Set landmark for one shape
LandmarkSetter can be used to set landmarks interactively on a mesh.
filename = "../data/skulls/skull_erectus.vtk"
shape = sks.PolyData(filename)
if not pv.BUILDING_GALLERY:
app = sks.LandmarkSetter(shape)
app.start()
else:
shape.landmark_indices = [95, 114, 155, 3, 9, 65, 29, 55, 74]
print(shape.landmark_indices)
tensor([ 95, 114, 155, 3, 9, 65, 29, 55, 74])
- Set landmark in correspondence for several shape
Using LandmarkSetter with a list of shapes will set landmarks in correspondence. One the landmarks are selected on the first shape of the list (the reference shape), the user can select the same landmarks on the other shapes.
# shape1 = sks.PolyData(examples.download_human())
shape1 = sks.PolyData(examples.download_woman())
shape2 = sks.PolyData(examples.download_doorman())
if not pv.BUILDING_GALLERY:
app = sks.LandmarkSetter([shape1, shape2])
app.start()
else:
landmarks1 = [4808, 147742, 1774]
landmarks2 = [325, 2116, 1927]
shape1.landmark_indices = landmarks1
shape2.landmark_indices = landmarks2
print("Landmarks shape 1:")
print(shape1.landmark_indices)
print("Landmarks shape 2:")
print(shape2.landmark_indices)
/opt/hostedtoolcache/Python/3.11.9/x64/lib/python3.11/site-packages/skshapes/input_validation/converters.py:102: UserWarning: Mesh has been cleaned and points were removed. point_data is ignored.
return func(*new_args, **kwargs)
Landmarks shape 1:
tensor([ 4808, 147742, 1774])
Landmarks shape 2:
tensor([ 325, 2116, 1927])
Total running time of the script: (0 minutes 0.419 seconds)