Python Bindings for Functional Map Computations !¶
pyFM (or pyfmaps) is a Python library designed for computing and using functional maps, a powerful framework in shape analysis and geometry processing. Functional maps provide a compact and robust way to represent correspondences between shapes by transforming point-to-point mappings into small matrices.
This package implements shape signatures, functional map optimization and refinement algorithms, and above all an easy-to-use interface for using functional maps.
The package is now in v1.0.0 as it has been stable for quite a long time. It had been released on PyPI.
Key Features¶
Spectral Analysis: Automatically compute Laplace-Beltrami eigenfunctions for shapes, enabling efficient computations in the spectral domain.
Differential Geometry Tools: Implements a variety of differential geometry tools directly in Python for advanced shape analysis workflows.
Functional Map Computation: Straightforward tools to calculate or refine functional maps using descriptors, landmarks, or initial blurry correspondences.
Pointwise Correspondences: Functions for navigating between point-to-point maps and functional maps.
Why pyFM?¶
pyFM has been originally designed as a way to incorporate existing Matlab code into Python workflows. It has now grown beyond that, with a variety of tools and utilities for shape analysis and geometry processing. In short, pyFM is designed to be
User-Friendly: With clear APIs and detailed documentation, pyFM is accessible to both beginners and experts in shape analysis.
Efficient: Built with performance in mind, avoiding slow python loops.
Extensible: Highly modular. Most functions can be easily extracted from the package and used in other projects, as they usually only require numpy arrays as input.
Research-Oriented: Inspired by state-of-the-art research in geometry processing, making it a great choice for prototyping and academic projects.
Whether you are an academic researcher exploring functional map theory or an industry professional working on advanced shape analysis tasks, I hope pyFM can be a valuable tool in your experiments.
What’s Next?¶
To get started with pyFM, check out the example notebook for a quick overview of the package’s capabilities.
Table of Contents¶
- API Documentation
- pyFM
- pyFM.FMN
- pyFM.FMN.FMN
FMNFMN.__init__()FMN.MFMN.m_cclbFMN.set_maps()FMN.set_subsample()FMN.compute_subsample()FMN.set_weights()FMN.set_isometries()FMN.compute_W()FMN.compute_CLB()FMN.compute_CCLB()FMN.get_CSD()FMN.get_LB()FMN.compute_p2p()FMN.compute_maps()FMN.extract_3_cycles()FMN.compute_Amat()FMN.compute_3cycle_weights()FMN.optimize_icsm()FMN.get_cycle_weight()FMN.zoomout_iteration()FMN.zoomout_refine()
 
 - pyFM.FMN.FMN
 - pyFM.eval
 - pyFM.functional
FunctionalMappingFunctionalMapping.mesh1FunctionalMapping.mesh2FunctionalMapping.descr1FunctionalMapping.descr2FunctionalMapping.D_aFunctionalMapping.D_cFunctionalMapping.FM_typeFunctionalMapping.k1FunctionalMapping.k2FunctionalMapping.FMFunctionalMapping.p2p_21FunctionalMapping.k1FunctionalMapping.k2FunctionalMapping.FM_typeFunctionalMapping.change_FM_type()FunctionalMapping.FMFunctionalMapping.preprocessedFunctionalMapping.fittedFunctionalMapping.get_p2p()FunctionalMapping.get_precise_map()FunctionalMapping.preprocess()FunctionalMapping.fit()FunctionalMapping.icp_refine()FunctionalMapping.zoomout_refine()FunctionalMapping.compute_SD()FunctionalMapping.get_x0()FunctionalMapping.compute_descr_op()FunctionalMapping.compute_orientation_op()FunctionalMapping.project()FunctionalMapping.decode()FunctionalMapping.transport()FunctionalMapping.transfer()
 - pyFM.mesh
- pyFM.mesh.file_utils
 - pyFM.mesh.geometry
edges_from_faces()compute_faces_areas()compute_vertex_areas()compute_normals()per_vertex_normal()per_vertex_normal_area()per_vertex_normal_uniform()neigh_faces()grad_mat()grad_f()div_f()geodesic_distmat_dijkstra()geodesic_distmat_fast_marching()heat_geodmat_robust()heat_geodesic_from()heat_geodmat()farthest_point_sampling()farthest_point_sampling_distmat()farthest_point_sampling_call()farthest_point_sampling_call_sub()get_orientation_op()
 - pyFM.mesh.laplacian
 - pyFM.mesh.trimesh
TriMeshTriMesh.pathTriMesh.meshnameTriMesh.WTriMesh.ATriMesh.eigenvaluesTriMesh.eigenvectorsTriMesh.vertlistTriMesh.facelistTriMesh.verticesTriMesh.facesTriMesh.n_verticesTriMesh.n_facesTriMesh.areaTriMesh.sqrtareaTriMesh.edgesTriMesh.edges_lengthsTriMesh.normalsTriMesh.vertex_normalsTriMesh.vertex_areasTriMesh.faces_areasTriMesh.face_areasTriMesh.center_massTriMesh.is_normalizedTriMesh.is_modifiedTriMesh.area_normalize()TriMesh.rotate()TriMesh.translate()TriMesh.scale()TriMesh.center()TriMesh.laplacian_spectrum()TriMesh.process()TriMesh.project()TriMesh.decode()TriMesh.unproject()TriMesh.reconstruct()TriMesh.get_geodesic()TriMesh.geod_from()TriMesh.l2_sqnorm()TriMesh.l2_inner()TriMesh.h1_sqnorm()TriMesh.h1_inner()TriMesh.integrate()TriMesh.extract_fps()TriMesh.extract_fps_sub()TriMesh.gradient()TriMesh.divergence()TriMesh.orientation_op()TriMesh.export()TriMesh.get_uv()TriMesh.export_texture()TriMesh.compute_normals()TriMesh.set_vertex_normal_weighting()TriMesh.compute_vertex_normals()TriMesh.compute_edges()
 
 - pyFM.optimize
 - pyFM.refine
 - pyFM.signatures
 - pyFM.spectral
 
 - pyFM.FMN
 
 - pyFM