Pyoints

Pyoints: A Python package for point cloud, voxel and raster processing. - Published in JOSS (2019)

https://github.com/laempy/pyoints

Science Score: 95.0%

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

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 1 DOI reference(s) in JOSS metadata
  • Academic publication links
    Links to: zenodo.org
  • Committers with academic emails
    2 of 4 committers (50.0%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
    Published in Journal of Open Source Software

Scientific Fields

Artificial Intelligence and Machine Learning Computer Science - 69% confidence
Last synced: 4 months ago · JSON representation

Repository

Pyoints: A Python package for point cloud, voxel and raster processing.

Basic Info
  • Host: GitHub
  • Owner: laempy
  • License: other
  • Language: Python
  • Default Branch: master
  • Size: 76.4 MB
Statistics
  • Stars: 41
  • Watchers: 3
  • Forks: 8
  • Open Issues: 4
  • Releases: 5
Created over 7 years ago · Last pushed over 2 years ago
Metadata Files
Readme Contributing License

README.md

Pyoints

Pyoints is a python package to conveniently process and analyze point cloud data, voxels and raster images. It is intended to be used to support the development of advanced algorithms for geo-data processing.

General concept

The key idea of Pyoints is to provide unified data structures to handle points, voxels and rasters in the same manner. It is assumed that the data can be interpreted as a two or three dimensional point cloud. Thus we have a collection of geo-objects, here called GeoRecords, which are characterized by two or three dimensional coordinates coords, a spatial reference proj and a transformation matrix t. The spatial reference and transformation matrix are required to define the global location of the geo-objects. Next to the origin, the transformation matrix also stores the scale and rotation of the local coordinate system.

The unified data structures simplify the joint use of point clouds, voxels and rasters significantly, while keeping their natural characteristics. To ease the processing and analysis, each point, voxel or raster cell are stored in the commonly used numpy record array according to its natural structure. For example, a three dimensional point cloud represents a set of points, each characterized by a coordinate and none to many additional attributes. So the points are stored in a one dimensional record array. Conversely raster images are stored in a two dimensional record array, which allows for the commonly used index access of raster cells. Still, each cell is characterized by a coordinate and none to many additional attributes. Three dimensional voxels are accordingly represented by three dimensional record arrays.

Since all objects of a voxel or raster are also interpreted as a point cloud, spatial neighborhood queries, like nearest neighbors or distance search, can be performed with unified functions. Thus, each extension of GeoRecords provides a spatial index IndexKD to conveniently perform efficient neighborhood queries. The class IndexKD is a wrapper of different spatial indices, to handle k-dimensional spatial queries of different kinds. The spatial indices are always only initialized on demand for performance reasons, but cached for future queries. For example, an instance geoRecords of GeoRecords representing three dimensional points allows to create a three dimensional spatial index by calling geoRecords.indexKD(). If you are not interested in the third dimension, you can call geoRecords.indexKD(2) to perform two dimensional spatial queries.

If you just want to handle coordinates without additional attributes, the class Coords might interest you. This class also provides the IndexKD feature, but waives to use of a projection and transformation matrix.

Is Pyoints suitable for me?

Based on the general concept of Pyoints presented above, a bunch of algorithms, functions and filters have been implemented, to process geo-data with low programming efforts.

Of course, one might wonder whether Python is adequate to analyze point cloud data since other languages languages are much more efficient. This is obviously true, but in the experience of the author, Python is very useful to implement and test new algorithms very quickly. Algorithms for point cloud analysis and processing often rely on spatial neighborhood queries. Since Pyoints takes advantage of very efficient Python libraries, which are basically wrappers for binaries written in more efficient languages, the performance loss is limited. Additionally, Pyoints takes care of selecting and caching appropiate spatial indices for you, so you can focus on the core of your algorithm idea.

So, if you have an algorithm idea and you want to implement it quickly and play around with different settings, Pyoints is made for you. After finding an approiate algorithm it can be implemented in a more efficient language if you like. Thus Pyoints is particulary designed for scientists and developers of new geo-spatial algorithms.

Installation

Conda Installation

Conda installation is recommended. To install Pyoints with Conda run:

conda install -c laempy pyoints

Currently only Linux (64 bit) has been packaged with Python 3.5, 3.6 and 3.7.

To enable full LAS support (spatial reference system definition), you need to install liblas and its python bindings manually.

pip install liblas

Installation from source

We recommend to use a virtual environment (like Conda) to install Pyoints.

Installation of the external dependencies: conda install gdal pyproj "numpy>=1.15" rtree

Cloning of the repository: git clone https://github.com/laempy/pyoints.git cd pyoints

Installation of the python dependencies via pip. pip install -e .

Conda Build

If your system is not supported yet, you might build and install it using the conda reciepe specifying your desired Python version.

Build

conda build /path/to/pyoints/conda --python=3.x

Installation

Create a virtual environment pyoints_env and add the newly build Pyoints package. The package path can be found with conda build . --output.

conda create -n pyoints_env /path/to/builded/package/pyoints-*-py*_*.tar.bz2 --use-local

Finally install the package:

conda activate pyoints_env conda install pyoints

Tests

Test the package by running the provided doctests:

python /path/to/pyoints/tests/test_pyoints.py

Documentation

You can find the documentation at docs. Here you can find some introducing tutorials and docstring examples for each module.

License

Copyright (c) 2018, Sebastian Lamprecht, Trier University, lamprecht@uni-trier.de

Pyoints is free software made available under the GNU General Public License v3 or later (GPLv3+). See LICENSE for details.

Citing

Please cite Pyoints as follows:

S. Lamprecht (2019): "Pyoints: A Python package for point cloud, voxel and raster processing". DOI

Contributing

Any conribution to the pyoints project is welcome. See CONTRIBUTING for details.

Acknowledgements

Funding

This work has been supported by the European Commission under the grant agreement number 774571 Project PANTHEON.

Datasets

For the tutorials the "Stanford Bunny" dataset has been used:

Stanford Computer Graphics Laboratory (1994): "Stanford Bunny", URL: https://graphics.stanford.edu/data/3Dscanrep/, (Accessed: 17 January 2019)

Python Depencencies

This software dynamically binds the following Python packages (distributed via pip). Many thanks to the authors for providing such great open source software.

cylinder_fitting

Xingjie Pan * PyPI * homepage * 3-Clause BSD license

dill

Mike McKerns * PyPI * homepage * 3-Clause BSD license

pygdal

Frank Warmerdam * PyPI * homepage * 2-Clause BSD license

laspy

Grant Brown and Howard Butler * PyPI * homepage * 2-Clause BSD license

liblas

Romulo Goncalves * PyPI * homepage * 3-Clause BSD license

networkx

NetworkX Developers * PyPI * homepage * 3-Clause BSD license

numpy

Travis E. Oliphant et al. * PyPI * homepage * 3-Clause BSD license

opencv-python

Olli-Pekka Heinisuo * PyPI * homepage * MIT license

pandas

The PyData Development Team * PyPI * homepage * 3-Clause BSD license

plyfile

Darsh Ranjan * PyPI * homepage * GPL v3.0 (or later)

pyproj

Jeff Whitaker * PyPI * homepage * OSI approved license

scikit-learn

Andreas Mueller * PyPI * homepage * 3-Clause BSD license

scipy

SciPy Developers * PyPI * homepage * 3-Clause BSD license

rtree

Howard Butler * PyPI * homepage * LGPL v2.1 (or later)

External Depencencies

Pyoints binds following external libraries as required by some of the pip packages.

GDAL

Frank Warmerdam * homepage * X11/MIT license

Liblas

Howard Butler, Mateusz Loskot et. al. * homepage * X11/MIT license

libspatialindex

Marios Hadjieleftheriou * homepage * MIT license

JOSS Publication

Pyoints: A Python package for point cloud, voxel and raster processing.
Published
April 03, 2019
Volume 4, Issue 36, Page 990
Authors
Sebastian Lamprecht ORCID
Trier University
Editor
Lindsey Heagy ORCID
Tags
geoinformatics remote sensing point cloud analysis raster analysis

GitHub Events

Total
Last Year

Committers

Last synced: 5 months ago

All Time
  • Total Commits: 657
  • Total Committers: 4
  • Avg Commits per committer: 164.25
  • Development Distribution Score (DDS): 0.482
Past Year
  • Commits: 0
  • Committers: 0
  • Avg Commits per committer: 0.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Lamprecht l****n@g****e 340
Sebastian Lamprecht l****t@u****e 315
Reed Anderson R****s 1
Daniel S. Katz d****z@i****g 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 4 months ago

All Time
  • Total issues: 12
  • Total pull requests: 3
  • Average time to close issues: 2 months
  • Average time to close pull requests: 15 days
  • Total issue authors: 5
  • Total pull request authors: 3
  • Average comments per issue: 1.25
  • Average comments per pull request: 0.33
  • Merged pull requests: 2
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • kbevers (5)
  • lheagy (3)
  • laempy (2)
  • andrewrgarcia (1)
  • manbehindthemadness (1)
Pull Request Authors
  • reedanders (1)
  • danielskatz (1)
Top Labels
Issue Labels
Pull Request Labels

Packages

  • Total packages: 1
  • Total downloads:
    • pypi 40 last-month
  • Total dependent packages: 0
  • Total dependent repositories: 1
  • Total versions: 3
  • Total maintainers: 1
pypi.org: pyoints

A Python package for point cloud, voxel and raster processing.

  • Versions: 3
  • Dependent Packages: 0
  • Dependent Repositories: 1
  • Downloads: 40 Last month
Rankings
Dependent packages count: 10.1%
Stargazers count: 10.7%
Forks count: 12.6%
Average: 15.3%
Downloads: 21.4%
Dependent repos count: 21.6%
Maintainers (1)
Last synced: 4 months ago

Dependencies

dev_requirements.txt pypi
  • Sphinx * development
  • autopep8 * development
  • cloudpickle * development
  • ipykernel * development
  • m2r * development
  • matplotlib * development
  • nbsphinx * development
  • pip * development
  • pycodestyle * development
  • setuptools * development
  • sphinxcontrib-napoleon * development
  • twine * development
  • wheel * development
requirements.txt pypi
  • cylinder_fitting *
  • dill *
  • laspy *
  • networkx *
  • opencv-python *
  • pandas *
  • plyfile *
  • scikit-learn *
  • scipy *
setup.py pypi