py4dgeo

py4dgeo - A Python library for change analysis in 4D point clouds

https://github.com/3dgeo-heidelberg/py4dgeo

Science Score: 65.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 26 DOI reference(s) in README
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
    Organization 3dgeo-heidelberg has institutional domain (uni-heidelberg.de)
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.4%) to scientific vocabulary
Last synced: 6 months ago · JSON representation ·

Repository

py4dgeo - A Python library for change analysis in 4D point clouds

Basic Info
Statistics
  • Stars: 109
  • Watchers: 8
  • Forks: 24
  • Open Issues: 25
  • Releases: 7
Created over 4 years ago · Last pushed 6 months ago
Metadata Files
Readme License Citation

README.md

Welcome to py4dgeo

logo

License: MIT GitHub Workflow Status PyPI Release Documentation Status codecov

py4dgeo is a C++ library with Python bindings for change analysis in multitemporal and 4D point clouds.

Topographic 3D/4D point clouds are omnipresent in geosciences, environmental, ecological and archaeological sciences, robotics, and many more fields and applications. Technology to capture such data using laser scanning and photogrammetric techniques have evolved into standard tools. Dense time series of topographic point clouds are becoming increasing available and require tools for automatic analysis. Moreover, methods considering the full 4D (3D space + time) data are being developed in research and need to be made available in an accessible way with flexible integration into existent workflows.

The main objective of py4dgeo is to bundle and provide different methods of 3D/4D change analysis in a dedicated, comprehensive Python library. py4dgeo is designed as an international open source project that can be integrated into almost any 3D and GIS software in the geodata domain supporting Python, e.g. as plugins.

py4dgeo is under ongoing active development. Below, you find a list of provided methods.

🔨 Methods provided by py4dgeo

  • M3C2 algorithm (Lague et al., 2013) for bitemporal point cloud distance computation.

  • M3C2-EP (M3C2-EP; Winiwarter et al., 2021) for statistical signal-noise separation in change analysis through error propagation.

  • 4D objects-by-change (4D-OBC; Anders et al., 2021) for time series-based extraction of surface activities.

  • Correspondence-driven plane-based M3C2 (Zahs et al., 2022) for lower uncertainty in 3D topographic change quantification [under active development].

  • Point cloud registration using standard ICP by calculating and applying affine transformations to point clouds using a standard ICP implementations.

  • Point cloud registration with automatic determination of stable areas (Yang et al., 2022) for multitemporal change detection.

🎮 Examples

Demo notebooks using methods provided by py4dgeo

| | | |--------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| | Example 1 | Example 2 | | Example 3 | Example 4 | | Example 5 | Example 6 | Example 7 |

💻 Installation

Prerequisites

Using py4dgeo requires the following software installed:

  • 64-bit Python >= 3.9 (32-bit installations might cause trouble during installation of dependencies)

In order to build the package from source, the following tools are also needed.

  • A C++17-compliant compiler
  • Doxygen (optional, documentation building is skipped if missing)

Installing py4dgeo

The preferred way of installing py4dgeo is using pip.

Installing the release version using pip

py4dgeo can be installed using pip to obtain the current release:

python -m pip install py4dgeo

Building from source using pip

The following sequence of commands is used to build py4dgeo from source:

git clone --recursive https://github.com/3dgeo-heidelberg/py4dgeo.git cd py4dgeo python -m pip install -v --editable .

The --editable flag allows you to change the Python sources of py4dgeo without reinstalling the package. The -v flag enables verbose output which gives you detailed information about the compilation process that you should include into potential bug reports. To recompile the C++ source, please run pip install again. In order to enable multi-threading on builds from source, your compiler toolchain needs to support OpenMP.

If you want to contribute to the library's development you should also install its additional Python dependencies for testing and documentation building:

python -m pip install -r requirements-dev.txt

🪟 Windows-specific Notes

When building py4dgeo on Windows, the build system automatically detects and enables LLVM-style OpenMP support (/openmp:llvm) if available. This provides better multi-threaded performance and thread affinity than the default MSVC OpenMP 2.0.

🧠 Thread Affinity (for LLVM OpenMP)

When py4dgeo detects it's running on Windows, it sets the following OpenMP environment variables at runtime (unless they were already set):

bash set OMP_NUM_THREADS=<number of physical CPU cores> set OMP_PROC_BIND=close set OMP_PLACES=threads

  • OMP_NUM_THREADS: Use at most the number of physical cores (e.g., 12 on a 12-core CPU) — avoid using hyperthreading.
  • OMP_PROC_BIND=close: Ensures that threads remain bound to their processing units, reducing thread migration between cores and improving cache locality.
  • OMP_PLACES=threads: Binds threads to individual hardware threads (instead of full cores).

These settings lead to significantly improved performance on Windows, when using openmp:llvm.

💡 Advanced users can still override these defaults by explicitly setting the environment variables before launching their script.

Setting up py4dgeo using Docker

Additionally, py4dgeo provides a Docker image that allows to explore the library using JupyterLab. The image can be locally built and run with the following commands:

docker build -t py4dgeo:latest . docker run -t -p 8888:8888 py4dgeo:latest

🐍 Documentation of software usage

As a starting point, please have a look to the Jupyter Notebooks available in the repository and find the py4dgeo documentation on readthedocs.

🌐 Published test data

If you are looking for data to test different methods, consider the following open data publications:

Hourly TLS point clouds of a sandy beach


Vos et al. (2022): https://doi.org/10.1038/s41597-022-01291-9.

By-weekly TLS point clouds of an Alpine rock glacier


Zahs et al. (2022): https://doi.org/10.11588/data/TGSVUI.

📑 Citation

Please cite py4dgeo when using it in your research and reference the appropriate release version.

article{py4dgeo, author = {py4dgeo Development Core Team} title = {py4dgeo: library for change analysis in 4D point clouds}, journal = {}, year = {2022}, number = {}, volume = {}, doi = {}, url = {https://github.com/3dgeo-heidelberg/py4dgeo}, }

💟 Funding / Acknowledgements

The initial software development was supported by the Scientific Software Center (SSC) in the Open Call 2021. The scientific software project is further supported by the research projects CharAct4D and AImon5.0.

🔔 Contact / Bugs / Feature Requests

You think you have found a bug or have specific request for a new feature? Please open a new issue in the online code repository on Github. Also for general questions please use the issue system.

Scientific requests can be directed to the 3DGeo Research Group Heidelberg and its respective members.

📜 License

See LICENSE.md.

📚 Literature

  • Anders, K., Winiwarter, L., Mara, H., Lindenbergh, R., Vos, S.E. & Höfle, B. (2021): Fully automatic spatiotemporal segmentation of 3D LiDAR time series for the extraction of natural surface changes. ISPRS Journal of Photogrammetry and Remote Sensing, 173, pp. 297-308. DOI: 10.1016/j.isprsjprs.2021.01.015.
  • Lague, D., Brodu, N., & Leroux, J. (2013). Accurate 3D comparison of complex topography with terrestrial laser scanner: Application to the Rangitikei canyon (N-Z). ISPRS Journal of Photogrammetry and Remote Sensing, 82, pp. 10-26. DOI: 10.1016/j.isprsjprs.2013.04.009.
  • Winiwarter, L., Anders, K., Höfle, B. (2021): M3C2-EP: Pushing the limits of 3D topographic point cloud change detection by error propagation. ISPRS Journal of Photogrammetry and Remote Sensing, 178, pp. 240–258. DOI: 10.1016/j.isprsjprs.2021.06.011.
  • Zahs, V., Winiwarter, L., Anders, K., Williams, J.G., Rutzinger, M. & Höfle, B. (2022): Correspondence-driven plane-based M3C2 for lower uncertainty in 3D topographic change quantification. ISPRS Journal of Photogrammetry and Remote Sensing, 183, pp. 541-559. DOI: 10.1016/j.isprsjprs.2021.11.018.

Owner

  • Name: 3DGeo Research Group, Heidelberg University
  • Login: 3dgeo-heidelberg
  • Kind: organization
  • Location: Heidelberg, DE

The 3DGeo Research Group investigates and develops computational methods for the geographic analysis of 3D/4D point clouds.

Citation (CITATION.cff)

cff-version: 1.2.0
message: "If you use this software, please cite it as below."
authors:
  - family-names: py4dgeo Development Core Team
title: "py4dgeo: library for change analysis in 4D point clouds."
version: 0.7.0
date-released: 2025-02-18
license: ["MIT"]
repository-code: "https://github.com/3dgeo-heidelberg/py4dgeo"

GitHub Events

Total
  • Create event: 25
  • Release event: 1
  • Issues event: 20
  • Watch event: 29
  • Delete event: 27
  • Member event: 1
  • Issue comment event: 40
  • Push event: 135
  • Pull request review event: 18
  • Pull request review comment event: 9
  • Pull request event: 62
  • Fork event: 12
Last Year
  • Create event: 25
  • Release event: 1
  • Issues event: 20
  • Watch event: 29
  • Delete event: 27
  • Member event: 1
  • Issue comment event: 40
  • Push event: 135
  • Pull request review event: 18
  • Pull request review comment event: 9
  • Pull request event: 62
  • Fork event: 12

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 20
  • Total pull requests: 68
  • Average time to close issues: 9 months
  • Average time to close pull requests: 16 days
  • Total issue authors: 12
  • Total pull request authors: 12
  • Average comments per issue: 0.85
  • Average comments per pull request: 0.41
  • Merged pull requests: 49
  • Bot issues: 1
  • Bot pull requests: 34
Past Year
  • Issues: 10
  • Pull requests: 39
  • Average time to close issues: about 1 month
  • Average time to close pull requests: 7 days
  • Issue authors: 7
  • Pull request authors: 10
  • Average comments per issue: 1.0
  • Average comments per pull request: 0.38
  • Merged pull requests: 26
  • Bot issues: 0
  • Bot pull requests: 17
Top Authors
Issue Authors
  • tabernig (5)
  • hdaan (3)
  • Antzyx (2)
  • dokempf (2)
  • deemoe404 (1)
  • xiaohemaikoo (1)
  • balmaslo (1)
  • DCHulskemper (1)
  • tgoelles (1)
  • thomasisensee (1)
  • han16nah (1)
  • pre-commit-ci[bot] (1)
Pull Request Authors
  • pre-commit-ci[bot] (22)
  • dependabot[bot] (12)
  • dokempf (11)
  • thomasisensee (5)
  • DimasfromLavoisier (3)
  • xyuhuang (3)
  • hdaan (3)
  • GwydionJon (2)
  • kathapand (2)
  • lkeegan (2)
  • han16nah (2)
  • neilslat (1)
Top Labels
Issue Labels
bug (3) toolchain (2) enhancement (2) help wanted (1) M3C2 (1) invalid (1) 4D-OBC (1) performance (1) discussion (1)
Pull Request Labels
dependencies (12) github_actions (3)

Dependencies

requirements-dev.txt pypi
  • breathe *
  • lcov_cobertura *
  • m2r2 *
  • matplotlib *
  • nbsphinx *
  • nbsphinx-link *
  • nbval *
  • pandas *
  • pre-commit *
  • pytest *
  • pytest-cov *
  • sphinx *
  • sphinx_rtd_theme *
.github/workflows/ci.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
.github/workflows/pypi.yml actions
  • actions/checkout v3 composite
  • actions/download-artifact v3 composite
  • actions/setup-python v4 composite
  • actions/upload-artifact v3 composite
  • pypa/cibuildwheel v2.11.4 composite
  • pypa/gh-action-pypi-publish master composite
Dockerfile docker
  • jupyter/base-notebook 584f43f06586 build
pyproject.toml pypi
  • dateparser *
  • laspy [lazrs]>=2.0,<3.0
  • matplotlib *
  • numpy *
  • requests *
  • seaborn *
  • xdg *