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
FMN
FMN.__init__()
FMN.M
FMN.m_cclb
FMN.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
FunctionalMapping
FunctionalMapping.mesh1
FunctionalMapping.mesh2
FunctionalMapping.descr1
FunctionalMapping.descr2
FunctionalMapping.D_a
FunctionalMapping.D_c
FunctionalMapping.FM_type
FunctionalMapping.k1
FunctionalMapping.k2
FunctionalMapping.FM
FunctionalMapping.p2p_21
FunctionalMapping.k1
FunctionalMapping.k2
FunctionalMapping.FM_type
FunctionalMapping.change_FM_type()
FunctionalMapping.FM
FunctionalMapping.preprocessed
FunctionalMapping.fitted
FunctionalMapping.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()
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
TriMesh
TriMesh.path
TriMesh.meshname
TriMesh.W
TriMesh.A
TriMesh.eigenvalues
TriMesh.eigenvectors
TriMesh.vertlist
TriMesh.facelist
TriMesh.vertices
TriMesh.faces
TriMesh.n_vertices
TriMesh.n_faces
TriMesh.area
TriMesh.sqrtarea
TriMesh.edges
TriMesh.normals
TriMesh.vertex_normals
TriMesh.vertex_areas
TriMesh.faces_areas
TriMesh.face_areas
TriMesh.center_mass
TriMesh.is_normalized
TriMesh.is_modified
TriMesh.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