Shape correspondence#
You can use the shape correspondence tool to measure how different a mesh’s local shape is from any other vertex in the mesh. This is useful for finding the most similar vertex to a given vertex in a mesh.
import vedo
import napari
import napari_shape_odyssey as nso
from napari_shape_odyssey._signatures.landmarks import CorrespondenceWidget
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
viewer = napari.Viewer(ndisplay=3)
Invalid schema for package 'napari-stl-exporter', please run 'npe2 validate napari-stl-exporter' to check for manifest errors.
cow = vedo.load(vedo.dataurl + 'cow.vtk').triangulate().clean().subdivide()
layer = viewer.add_surface((cow.points(), np.asarray(cow.faces())), colormap='inferno_r')
layer.wireframe.visible = True
Calculate heat kernel signature#
heat_signature = nso.signatures.heat_kernel_signature((cow.points(), np.asarray(cow.faces())), np.linspace(0, 1, 10))
heat_signature = pd.DataFrame(heat_signature, columns=[f'heat_{i}' for i in range(heat_signature.shape[1])])
viewer.layers[0].features = heat_signature
We now add the Correspondence Widget to napari. If you activate the correspondence mode (Activate Correspondence) you can click on points on the mesh and see how different the rest of the mesh is from that point.
widget = CorrespondenceWidget(napari_viewer=viewer)
viewer.window.add_dock_widget(widget, area="right")
napari.utils.nbscreenshot(viewer)