Skip to content

Repository files navigation

Poisson Surface Reconstruction: 3D point cloud

Import a point cloud file and perform poisson 3D surface reconstruction algorithm, integrated with third-party libraries like open3d and pymeshlab

Dependencies

Development dependencies

Development guide

For local installation and develop new features for this package, follow the steps below:

Windows

Run unassigned powershell scripts on Windows requires change your execution policy with Set-ExecutionPolicy to AllSigned, or Bypass -Scope Process.

See: Execution Policies

Run the script setup.ps1 with powershell

# Default virtualenv folder is "venv"
.\setup.ps1
# Optionally, pass a custom virtualenv folder
.\setup.ps1 -VirtualEnvFolder myenv

If you wish run just an specific function from setup.ps1 (e.g. Install-Python), execute:

powershell -command "& { . .\setup.ps1 'venv' -Execute 0; Install-Python }"

Unix systems (Comming soon)

# Default virtualenv folder is "venv"
./setup.sh
# Optionally, pass a custom virtual enviroment folder
./setup.sh --virtual-env-folder myenv

For more detailed installation, see the Wiki pages in: Installation Development

Install this package

Quick way:

pip install surface_reconstruction

Or clone this repository and build the .whl file from the project root:

cd [your-project-root]
# Build the .whl package file
python -m build --sdist --wheel .# Install locally from the .whl file# Where: x.x.x is the generated version from git tag
pip install dist/surface_reconstruction-x.x.x-py3-none-any.whl

For more detailed, see the Wiki pages in: Generate package

Run the unit tests

# Run all tests of the module "surface_reconstruction_test`
python -m unittest tests/surface_reconstruction_test.py

Usage

Import a .ply file with point cloud vertices, and generate the mesh file

fromsurface_reconstructionimportSurfaceReconstructionimportos# Pass a method/library that contains a Poisson algorithm implementationsurface=SurfaceReconstruction(
method_type='open3d',
point_cloud_file=os.path.join('files', 'point_cloud.ply'),
output_file=os.path.join('files', 'terrain_mesh.ply')
)
# Call the method from the specific library, and export a mesh filesurface.poisson_mesh()

You can pass custom filters/parameters for the specific library. This is important because poisson algorithm requires some pre-filters before to be applied (e.g estimate normals in the point cloud)

# ...parameters= {
'estimate_normals': {
'fast_normal_computation': False,
'normals': (1, 3)
}
}
# Unpack the dictionary "parameters" as a **kwargssurface.poisson_mesh(**{'filters': parameters})

PS: See the unittests inside tests folder for more usage examples

Extending: Add new libraries

Is possible create and register custom strategies to allow others libraries (Python, C++ bindings...)

fromsurface_reconstructionimportSurfaceStrategy, SurfaceReconstruction# Create a class that inherit from "SurfaceStrategy"classMyCustomSurface(SurfaceStrategy):
def__init__(self, my_custom_param: dict):
""" Custom constructor with custom parameters """super().__init__()
defload_file(self, file_path: str):
""" Custom load point cloud file implementation here """passdefpoisson_mesh(self, save_file=True, **params: {}):
""" Generate the mesh file with faces/triangles here """pass# Register your custom strategy hereSurfaceReconstruction.register_type(MyCustomSurface)
# Pass a method/library that contains a Poisson algorithm implementationsurface=SurfaceReconstruction(
method_type='mycustom', # Don't pass the "surface" suffixmy_custom_param={'extra_config': 'some_value'},
)
# Call the method from the specific library, and export a mesh filesurface.poisson_mesh()

About

Import a point cloud file and perform poisson 3D surface reconstruction algorithm, integrated with third-party libraries (e.g. open3d, pymeshlab...)

Topics

Resources

Stars

49 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages