A realization of Mean Curvature Skeleton
UCL COMP0119: Acquisition and Processing of 3D Geometry Project
Reference: Tagliasacchi, A., Alhashim, I., Olson, M. and Zhang, H. (2012), Mean Curvature Skeletons. Computer Graphics Forum, 31: 1735-1744. https://doi.org/10.1111/j.1467-8659.2012.03178.x
src: Source code of the implementation;
examples: Some example skeletons generated by our implementation;
docs: Paper and some files;
models: Some meshs used for testing and development.
![]() |
![]() |
![]() |
|---|
![]() |
![]() |
![]() |
|---|
![]() |
![]() |
![]() |
|---|
![]() |
![]() |
![]() |
|---|
![]() |
![]() |
![]() |
|---|
![]() |
![]() |
![]() |
|---|
![]() |
![]() |
![]() |
|---|
![]() |
![]() |
![]() |
|---|
![]() |
![]() |
![]() |
|---|
If you want, you can adjust the parameters in src/config.json.
# Assuming you are in the root of project
from src.msf import MSF
# Initial a MSF Instance
msf = MSF()
# Load a mesh
msf.load_mesh("../models/armadillo.obj")
# Let's iterate! Of course you should repeate it.
msf.iterate() # msf.iterate(50) # or iterate 50 rounds directly
# Then see the skeletons in the latest folder of the `result` folder.Set the parameters in src/config.json
-
wL: wL in the paper; -
wH: wL in the paper; -
wM: wL in the paper; -
use_dynamic_scale: Iftrue, then allow adjustingscalebetween iterations. Thescalewill change betweenscale_minandscale_maxrepeatedly at intervals ofscale_delta, which can speed up convergence; -
scale: The$\varepsilon$ in the paper will be scale multiply the diagonal length of the mesh's bounding box; -
scale_min: Only be used whenuse_dynamic_scale=true; -
scale_delta: Only be used whenuse_dynamic_scale=true; -
scale_max: Only be used whenuse_dynamic_scale=true; -
scale_fix: Be used to fix vertices; -
alpha: The$\theta$ in the paper; -
use_Laplacian_smoothing: Iftrue, then use Implicit Laplacian smoothing before mesh optimizing, which is critical to produce a complete skeleton instead of meso-skeleton; -
smooth_lam:$\lambda$ in the Implict Laplacian Smoothing (step size); -
smooth_it: The iteration number of the Implict Laplacian Smoothing; -
use_reconstruction_in_voronoi: Iftrue, use mesh reconstruction before calculating Voronoi poles, which can produce a better approximation of medial axis; -
k_voronoi:, Parameter in mesh reconstruction, only be used whenuse_reconstruction_in_voronoi=true, which means using the eigen vectors corresponding to thek_voronoi` smallest eigen values to perform reconstruction; -
use_reconstruction_in_skeletonization: Iftrue, use reconstructed mesh in skeletonization, which can ignore details on the mesh that do not contribute to the skeletonization; -
k_skeleton: Ask_voronoi, only be used whenuse_reconstruction_in_skeletonization=true; -
lsqr_args: Parameters forscipy.sparse.linalg.lsqr. Generally not modified.



























