Library for change detection in 4D point cloud data
Project description
Welcome to py4dgeo
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. The concept and algorithm is explained in this tutorial by James Dietrich, including usage in the graphical software CloudCompare.
-
M3C2-EP (M3C2-EP; Winiwarter et al., 2021) for statistical signal-noise separation in change analysis through error propagation. The concept and method are explained in full detail in the related paper.
-
4D objects-by-change (4D-OBC; Anders et al., 2021) for time series-based extraction of surface activities [under active development]. The concept and method are explained in this scientific talk:
-
Correspondence-driven plane-based M3C2 (Zahs et al., 2022) for lower uncertainty in 3D topographic change quantification. The concept and method are explained in this scientific talk:
-
Point cloud registration: Py4dgeo supports to calculate and apply affine transformations to point clouds using a standard ICP implementations. More ICP methods are currently being implemented - stay tuned!
🎮 Examples
Demo notebooks using methods provided by py4dgeo
💻 Installation
Prerequisites
Using py4dgeo requires the following software installed:
- 64-bit Python
>= 3.8
(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
- CMake
>= 3.9
- 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
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.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for py4dgeo-0.6.0-cp312-cp312-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ce15333fbdc0f588494e4ce1cde2228ee6c77962a78492750753b943465648af |
|
MD5 | 89434524834cc079bc24310a38e811ba |
|
BLAKE2b-256 | 8d8ffb05c8ebb34d9729cb58584a52613568a113169f544e83a58245ae461856 |
Hashes for py4dgeo-0.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 73f25a25d53099f266d8cd18a618649852519b43932fafb3897ac088c9ef9c1a |
|
MD5 | 65eb6340543b907e58890fb4de2b6d3f |
|
BLAKE2b-256 | 45b2c69bca615788282b1a7444df79ddfead44a24bd95ca3c40981b3efa872d4 |
Hashes for py4dgeo-0.6.0-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cab499ec15f64ed2cc637ab99b41c46c5cdbd64df45baf78aa49c6e463ce4eaf |
|
MD5 | a9af53c327744dda6d142a86eb254f9a |
|
BLAKE2b-256 | 63d53fe4a0ff24db2c20ad980128f168dc9d758f2621136c99f385ee7b92bd45 |
Hashes for py4dgeo-0.6.0-cp311-cp311-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f72cd89891630143898e94253ba10ff5b7cfcdc99564df45f8416fd749190042 |
|
MD5 | 474967b68bf067bcdf1856c5bad297de |
|
BLAKE2b-256 | ea10a3c21638a988a777f2e87d5ef616be9895e63784c60641a3bb6000fc8779 |
Hashes for py4dgeo-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 68d3c0260d3f63f50d46ced18c5255887c5fa193a1dc51d2d6544cd0bd4ab935 |
|
MD5 | 309143a8cc8f81b2c7486988df568377 |
|
BLAKE2b-256 | 809211f4f937d9d9b0002622cbc8ade5e0639d587b332a46c81cb305405ed7ad |
Hashes for py4dgeo-0.6.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2c2915e7aa6f12524913c62da5ec10acc8b2cb105ec62d51d1d44f3581ede4b6 |
|
MD5 | 138233413e1dc8b270c150329d0cc22c |
|
BLAKE2b-256 | c4ccf873d2cc3190ac0e19c44f52efd77d88c80ab3502e3e8f0e8d199fe72ae2 |
Hashes for py4dgeo-0.6.0-cp310-cp310-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4bd135a19d355db3fa63f2e557e46634dd32b3d7c2a569c5ecd672f066792c40 |
|
MD5 | 2ba514e17d1367c85cc911c049184824 |
|
BLAKE2b-256 | f13fe5b3c1ac1aadb7eb3023321db07dc9118fdd2bcfaa45baa6ed2b1cffdcf9 |
Hashes for py4dgeo-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9ae35d3369b519a8cb9c64190c1b8040ca11dfb70c483f89bc7a56659ffd48b9 |
|
MD5 | 5966a0e237a95f31884d76a6bdeaa7b4 |
|
BLAKE2b-256 | 5149f2473b89d8f2ec062ac9e7b3048aa05c4ed63d0bcce3982f5b2cbbc4ffa1 |
Hashes for py4dgeo-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 76666e2f9f2afe13615f6d78bf8067728114c91ad8f478d2e00027885332dbba |
|
MD5 | 99e34461271c8a9809546696c5b561b3 |
|
BLAKE2b-256 | 4659aaeb584ea2e3a1b6691bc57c9e80f41f14572cc0fac7aa073fd161004a79 |
Hashes for py4dgeo-0.6.0-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1b7973092eb5f1a7946233408a586d008373a581414630ea6c019373d38df2ce |
|
MD5 | 2349ea82619bfbad3bb1a2f69b59157e |
|
BLAKE2b-256 | fd7efaa863dfc4b69f940bae452e70673671ae0d7da15ee4605c8000b824124b |
Hashes for py4dgeo-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b8e1b1caf3db525683d0052dfe2a08ed750972048b9af4ac827f1ff8449112ba |
|
MD5 | a9f09bc2c7a82bd603f2fa467f9b495c |
|
BLAKE2b-256 | b1821b4133f88c2092116ce680c6ffcd57a56dcc84b75ff8fe68dd46fa523d34 |
Hashes for py4dgeo-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 38c55e60018407b429d47a9efe3f308b4b9b093150533a7520d624cf2c97039c |
|
MD5 | d3706e736309a6c9558087baa05987cc |
|
BLAKE2b-256 | 68d27e283b04a989de2527e5247d47a3237672966ca2524f009cd045e3ef7fd8 |
Hashes for py4dgeo-0.6.0-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4b8f5edb1324bef9195cbcfa3b818457321d4cac577005817515059cf4382f02 |
|
MD5 | 26d97982f43942ad9a2b0cc89cfea703 |
|
BLAKE2b-256 | 33f5f2bb583e37b8171f918bc6f4f27eb4f1bb64712f2910afbe3dfa184bc893 |
Hashes for py4dgeo-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8b569652d996cb6403731e8999ed66d82291d834fff4415f3dc2c3525bca9c00 |
|
MD5 | 4e8313f674eb37cd50c4a89e9ddd53b9 |
|
BLAKE2b-256 | e9a6fe1828c4a8c2491da82facab808f54d43b406d9c734cd3c2c9512efaf6a0 |
Hashes for py4dgeo-0.6.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0cfaa5b382f961e5571cf35e72c1ab9e8d9768889aad2daa55a91b79839daf39 |
|
MD5 | 4bd31c06d6751009d6d9c03f174c5a71 |
|
BLAKE2b-256 | a60700905b9942124d1faf80ce16ce64ac505e1511d60c70b6635cf832833f7b |