copc-lib provides an easy-to-use interface for reading and creating Cloud Optimized Point Clouds

Overview

copc-lib

copc-lib is a library which provides an easy-to-use reader and writer interface for COPC point clouds. This project provides a complete interface for handling COPC files, so that no additional LAZ or LAS libraries are required.

Build from source

Dependencies

copc-lib has the following dependencies:

  • laz-perf>=3.0.0
  • Catch2
  • Pybind11

To install dependencies:

conda install -c conda-forge "laz-perf>=3.0" Catch2 pybind11

C++

git clone https://github.com/RockRobotic/copc-lib.git
cd copc-lib
mkdir build && cd build
cmake ..
cmake --build .
sudo cmake --install .

Python

git clone https://github.com/RockRobotic/copc-lib.git
pip install ./copc-lib

Usage

The Reader and Writer objects provide the primary means of interfacing with your COPC files. For more complex use cases, we also provide additional objects such as LAZ Compressors and Decompressors (see example/example-writer.cpp).

For common use cases, see the example and test folders for full examples.

C++

copc-lib is compatible with CMake. Assuming copc-lib and lazperf are installed on the system, you can link with them in your CMakeLists.txt:

find_package(COPCLIB REQUIRED)
find_package(LAZPERF REQUIRED)

add_executable(funlib fun-main.cpp)
target_link_libraries(funlib COPCLIB::copc-lib LAZPERF::lazperf)

Example Files & Unit Tests

To build the copc-lib examples and unit tests along with the main library, you must enable them:

mkdir build && cd build
cmake .. -DWITH_TESTS=ON
cmake --build .

Then, you can run the unit tests and the examples:

ctest # All tests should pass

cd bin
./example_reader
./example_writer

Alternatively, you can build the test and example files from their respective CMakeLists, assuming copc-lib is already installed.

Python

import copclib as copc

# Create a reader object
reader = copc.FileReader("autzen-classified.copc.laz")

# Get the node metadata from the hierarchy
node = reader.FindNode(copc.VoxelKey(0, 0, 0, 0))
# Fetch the points of a node
points = reader.GetPoints(node)

# Iterate through each point
for point in points.Get():
    print(point)

Coming Soon

  • Basic C++ Reader Interface
  • Return Point structures from the reader rather than raw char* arrays, to support a more familiar laspy-like interface.
  • Add writer for COPC data
  • Python bindings
  • JavaScript bindings (not planned, see below)
  • Spatial querying for nodes (given spatial coordinates, retrieve the appropriate Entry object)
  • Conda and pip packages

Conformity to Spec

This version of copc-lib is pinned to a draft version of COPC respective of the state at COPC.io.

extended stats VLR

User ID Record ID
rock_robotic 10001

We additionally add an extended stats extents VLR to store mean and (population) variance values for each dimension. This VLR can be parsed in the same way as the extents VLR defined by the COPC spec.

struct CopcExtentExtended
{
    double mean; // replaces minimum
    double var; // replaces maximum
}

This VLR is optional to process existing COPC files. If present, mean/variance are set appropriately for each dimension in CopcExtents; if not, CopcExtents will have default values of mean=0 and var=1.

This VLR is only written by the Writer if the flag has_extended_stats is true in CopcConfigWriter::CopcExtents.

Helpful Links

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.

Naming Convention

C++

We mostly use Google's Style Guide.

namespace name
{
class ClassName
{
public:
// Default constructor
ClassName() = default;
ClassName(int public_variable, int private_variable, bool private_read_only)
: public_variable(public_variable), private_variable_(private_variable),
private_read_only_(private_read_only){};

int public_variable{};

// Getters and Setters
void PrivateVariable(int private_variable) { private_variable_ = private_variable; }
int PrivateVariable() const { return private_variable_; }
bool PrivateReadOnly() const { return private_read_only_; }

// Any other function
int PrivateVariablePlusOne() const { return private_variable_ + 1; }
int SumPublicAndPrivate() const { return public_variable + private_variable_; }
static std::string ReturnEmptyString() { return {}; }

private:
int private_variable_{};
bool private_read_only_{false};
};
} // namespace name

Python

test_class = ClassName(public_variable=1,private_variable=2,private_read_only=True)

# using pybind .def_readwrite
test_class.public_variable = 4
assert test_class.public_variable == 4

# using pybind .def_property
test_class.private_variable = 5
assert test_class.private_variable == 5

# using pybind .def_property_readonly
assert test_class.private_read_only == True

# using pybind .def
assert test_class.PrivateVariablePlusOne() == 6
assert test_class.SumPublicAndPrivate() == 9

# using pybind .def_static
assert test_class.ReturnEmptyString == ""

Note that dimension names for points follow the laspy naming scheme, with the exception of scan_angle.

License

Please see LICENSE.md

Credits

copc-lib is created and maintained by Chris Lee, Leo Stanislas and other members of RockRobotic.

The COPC file format is created and maintained by HOBU Inc. Some code has been adopted from PDAL and lazperf, both of which are maintained by HOBU Inc.

Issues
  • cannot build python bindings on ubuntu 20.04LTS

    cannot build python bindings on ubuntu 20.04LTS

    I managed to build the C++ library, but I cannot build the python wrapper: I did install pybind11, but I did not install catch2 since I may skip tests: sudo apt install python3-pybind11

    My python version is 3.8.10

    pip install ./copc-lib
    ..................
    [ 88%] Linking CXX shared library ../../lib.linux-x86_64-3.8/libcopc-lib.so
        [ 88%] Built target copc-lib
        Scanning dependencies of target copclib
        [ 94%] Building CXX object python/CMakeFiles/copclib.dir/bindings.cpp.o
        /tmp/pip-req-build-sl2zyo4s/python/bindings.cpp: In function ‘void pybind11_init_copclib(pybind11::module&)’:
        /tmp/pip-req-build-sl2zyo4s/python/bindings.cpp:72:27: error: could not convert ‘pybind11::detail::self’ from ‘const pybind11::detail::self_t’ to ‘pybind11::handle’
           72 |         .def(py::hash(py::self))
              |                       ~~~~^~~~
              |                           |
              |                           const pybind11::detail::self_t
        make[2]: *** [python/CMakeFiles/copclib.dir/build.make:63: python/CMakeFiles/copclib.dir/bindings.cpp.o] Error 1
        make[1]: *** [CMakeFiles/Makefile2:170: python/CMakeFiles/copclib.dir/all] Error 2
        make: *** [Makefile:130: all] Error 2
        Traceback (most recent call last):
    
    opened by julienlau 7
  • Configure failure

    Configure failure

    I assume something needs to be committed?

    #!/bin/bash
    
    rm -rf build
    mkdir build
    cd build
    cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release -Dgtest_force_shared_crt=ON -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX
    

    I installed catch2 via conda-forge, and I'm on OSX x86-64.

    
    -- The C compiler identification is Clang 11.1.0
    -- The CXX compiler identification is Clang 11.1.0
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Check for working C compiler: /Users/hobu/miniconda3/envs/pdal-build/bin/x86_64-apple-darwin13.4.0-clang - skipped
    -- Detecting C compile features
    -- Detecting C compile features - done
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Check for working CXX compiler: /Users/hobu/miniconda3/envs/pdal-build/bin/x86_64-apple-darwin13.4.0-clang++ - skipped
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    CMake Error at CMakeLists.txt:44 (add_subdirectory):
      The source directory
    
        /Users/hobu/dev/git/copc-lib/lib/Catch2
    
      does not contain a CMakeLists.txt file.
    
    
    CMake Error at CMakeLists.txt:55 (include):
      include could not find requested file:
    
        Catch
    
    
    CMake Error at CMakeLists.txt:56 (catch_discover_tests):
      Unknown CMake command "catch_discover_tests".
    
    
    
    opened by hobu 6
  • Required extents vlr

    Required extents vlr

    Hi,

    Thank you for this library, I've been using it for the past few weeks and it's working great.

    I was wondering what your plan was for the extents vlr. From what I understand, it's been removed from the spec, but it seems to be required when opening a COPC file. I found a related discussion here: https://github.com/copcio/copcio.github.io/pull/50

    I've been working with COPC files generated from Untwine and PDAL, but both of these don't produce an extents vlr, so the following error happens when I try to open the files with copc-lib:

    RuntimeError: Reader::ReadCopcExtentsVlr: No COPC Extents VLR found in file.
    

    To work with these files, I removed the extents vlr entirely in this branch : https://github.com/davidcaron/copc-lib/tree/remove-extents-vlr.

    I guess my question is: did you plan on making the extents vlr optional, or to remove it?

    opened by davidcaron 5
  • release 2.1.3 broken : inconsitent laz-perf version 2.1 or 3.0

    release 2.1.3 broken : inconsitent laz-perf version 2.1 or 3.0

    Hi, thanks for sharing this work

    when building the last release of this copc-lib (2.1.3) the Readme says that laz-perf>= commit 4819611 is a pre-requisite

    Current master README says : laz-perf>=3.0.0 is a pre-requisite

    However when building with env : export LAZPERF_DIR=/home/opt/laz-perf-3.0.0/build/CMakeFiles/Export/lib/cmake/LAZPERF I get an error saying that I should use LAZPERF 2.1.0

    -- Detecting C compile features - done
    CMake Error at CMakeLists.txt:84 (find_package):
      Could not find a configuration file for package "LAZPERF" that is
      compatible with requested version "2.1.0".
    
      The following configuration files were considered but not accepted:
    
        /usr/local/lib/cmake/LAZPERF/lazperf-config.cmake, version: 3.0.0
    
    
    
    -- Configuring incomplete, errors occurred!
    See also "/home/opt/copc-lib-2.1.3/build/CMakeFiles/CMakeOutput.log".
    

    When I try to build with laz-perf 2.1 the configure step is ok, but I got error at compile time:

    [  6%] Building CXX object cpp/CMakeFiles/copc-lib.dir/src/copc/info.cpp.o
    In file included from /home/opt/copc-lib-2.1.3/cpp/src/copc/info.cpp:1:
    /home/opt/copc-lib-2.1.3/cpp/include/copc-lib/copc/info.hpp:15:29: error: ‘copc_info_vlr’ in namespace ‘lazperf’ does not name a type; did you mean ‘copc_vlr’?
       15 |     CopcInfo(const lazperf::copc_info_vlr &copc_info_vlr);
          |                             ^~~~~~~~~~~~~
          |                             copc_vlr
    
    

    When I try to build with laz-perf 3.0 the configure step is ok, but I got error at compile time:

    cmake --build .
    Scanning dependencies of target copc-lib
    [  6%] Building CXX object cpp/CMakeFiles/copc-lib.dir/src/copc/info.cpp.o
    [ 12%] Building CXX object cpp/CMakeFiles/copc-lib.dir/src/copc/extents.cpp.o
    In file included from /home/opt/copc-lib-2.1.3/cpp/include/copc-lib/copc/extents.hpp:10,
                     from /home/opt/copc-lib-2.1.3/cpp/src/copc/extents.cpp:1:
    /home/opt/copc-lib-2.1.3/cpp/include/copc-lib/las/vlr.hpp:15:33: error: ‘copc_extents_vlr’ in namespace ‘lazperf’ does not name a type; did you mean ‘copc_info_vlr’?
       15 | using CopcExtentsVlr = lazperf::copc_extents_vlr;
          |                                 ^~~~~~~~~~~~~~~~
          |                                 copc_info_vlr
    
    

    When I try to build copc-lib master branch with laz-perf 3.0 the configure step is OK, and compilation is OK.

    opened by julienlau 5
  • Writer

    Writer

    Adds COPC writer.

    TODO:

    • [backlog] Set las header min/max and other attributes
    • [backlog] Implement filename reader/writer
    • Integrate point object to writer
    • Fix example files
    • [done] Call "close" on destructor of writer
    • [done] Support EB
    opened by CCInc 4
  • Add scaled x/y/z support

    Add scaled x/y/z support

    @leo-stan Let me know your thoughts on this. If we want to be able to get the scaled x/y/z values within the point class, we'll need to either store the lasheader or store the offset/scale factors (maybe store pointer or ref so no overhead?)

    opened by CCInc 2
  • Use scikit-build for Python extension?

    Use scikit-build for Python extension?

    The scikit-build library has great support for running CMake. Additionally, it plays nice(er) with modern Python packaging like configuration pyproject.toml, etc.

    See PDAL's Python bindings for a scikit-build configuration that mixes CMake and Python https://github.com/PDAL/python

    opened by hobu 1
  • FEAT-437: General polishing of copclib

    FEAT-437: General polishing of copclib

    • [X] Catch up with new specs (prdf and statistics)
    • [X] Make LasConfig a subset of LasHeader
    • [X] Make Tostring for LasHeader/LasConfig
    • [ ] Make all low level classes picklable
    • [X] Make VoxelKey convertible to tuple and list in python
    • [x] Other remaining github issues
    • [x] Make naming and function signatures consistent
    • [ ] conda/pip install
    • [ ] Clear TODOs
    • [X] General clean-up after limiting point format
    • [ ] Add Point attributes to Points
    • [ ] Run profiler on copclib
    • [ ] Make CPP test cases and section consistent throughout lib
    • [ ] Make smaller test file to run longer tests
    • [ ] Remove const refs for things less than 8 bytes
    • [ ] Make runtime_error messages more clear (e.g. which class is throwing)
    • [X] Merge LasHeader, COPC info, etc
    • [X] Add checks to AddPoints that points are within node spatial bounds
    • [ ] Make a verbose option for copclib to output warnings for certain things (e.g. scan angle value check)
    opened by leo-stan 1
  • Add precommit Formatter

    Add precommit Formatter

    precommit will automatically run clang-format on PR pushes and fix them in place. As a result, if you push to a PR and precommit changes the formatting, you'll want to pull from your branch before doing any modifications (or force push and it'll run again).

    opened by CCInc 1
  • Better Error for Int Overflow

    Better Error for Int Overflow

    point.red = 65537
    

    The above code will throw this error:

    TypeError: (): incompatible function arguments. The following argument types are supported: 1. (arg0: copclib._core.Point, arg1: int) -> None

    The error message should better describe the issue

    opened by CCInc 0
  • python example should show how to read a LAS or LAZ and convert it to COPC

    python example should show how to read a LAS or LAZ and convert it to COPC

    Hi, I just like to try copc build by doing read LAS -> write COPC. Unfortunately, if I want to stick to a minimal set of dependencies I think LAZperf which is included in copc-lib should be able to read a LAS or LAZ file.

    However, there is no doc and no example on how to do this :(

    >>> import copclib as copc
    >>> reader = copc.FileReader("/home/jlu/Downloads/autzen-classified.laz")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    RuntimeError: Reader::InitReader: Either Info or Hierarchy VLR missing, make sure you are loading a COPC file.
    

    In addition if i read a LAS using for example laspy module, is it still required to :

    • generate manually a copc header
    • generate manually the slippy tiles hierarchy ?

    Do you have a simple LAS -> COPC python converter to share ?

    opened by julienlau 4
Releases(v2.3.1)
  • v2.3.1(Apr 14, 2022)

    [2.3.1] - 2022-04-14

    Fixed

    • [Python/C++] Make Extents VLR optional when reading a file
    Commit History
    • Update changelog (e3cab7e)
    • Make extents vlr optional. (#110) (25bf557)
    Source code(tar.gz)
    Source code(zip)
  • v2.3.0(Apr 14, 2022)

    [2.3.0] - 2022-04-14

    Added

    • [C++] Add LazConfig and LazConfigWriter classes as parent class to CopcConfig to handle LAZ files.
    • [C++] Add LazWriter and LazFileWriter classes to write LAZ files.
    • [C++] Add example-laz-writer.cpp to show how to use the LAZ writer.
    • [Python/C++] Add CheckAndUpdateBounds to LasHeader to check values in a Point and update the bounds if necessary.
    • [Python/C++] Add SetGpsTimeBit to LasHeader to easily set the bit value to 1.

    Changed

    • [Python/C++] Rename LasHeader::ApplyInverseScale to LasHeader::RemoveScale to be consistent with Point class.

    Fixed

    • [Python/C++] Change return type of LasHeader::ApplyInverseScale from double to int32_t.
    Commit History
    • FEAT-865: LAZ writer (#104) (a69ca4e)
    • Fix github test runs. (#108) (fb44ed1)
    • [pre-commit.ci] pre-commit autoupdate (#105) (8f4338a)
    • Fix precommit bug with black. (#103) (9796518)
    • Update readme with conda/pip bindings (#100) (f5de2fa)
    • [pre-commit.ci] pre-commit autoupdate (#97) (91e70d7)
    Source code(tar.gz)
    Source code(zip)
  • v2.2.3(Feb 2, 2022)

    [2.2.3] - 2022-02-02

    Fixed

    • [Python/C++] Fix bug with some attributes not getting copied when constructing FileWriter from CopcConfig.
    Commit History
    • FEAT-700: Writer constructor fix for copying CopcConfig and updating values (#98) (fc6d425)
    Source code(tar.gz)
    Source code(zip)
  • v2.2.2(Jan 31, 2022)

    [2.2.2] - 2022-01-31

    Fixed

    • [Python/C++] Fix bug with handling of non-existant path in FileWriter.
    • [Python/C++] Fix test causing i686 tests to fail.
    • [Python] Fix python ctest.
    Commit History
    • Fix (#94) (ab12c4c)
    • Update changelog (#96) (256e20d)
    • Add check before publishing pip packages (#95) (6485cd9)
    • Fix ctest for python examples (#93) (7bc965b)
    • FEAT688: Fix writer invalid path issue. (#91) (2a4c19c)
    Source code(tar.gz)
    Source code(zip)
  • v2.2.1(Jan 24, 2022)

    [2.2.1] - 2022-01-24

    Added

    • [Python] Pip release workflow

    Changed

    • [Python] Python build uses scikit-build instead of custom solution
    Commit History
    • Update changelog (582168e)
    • Small fixes for conda build (#90) (e01fe22)
    • Add readme to pypi description (#88) (f2d0498)
    • Add pip pipeline for wheels (#87) (fa49690)
    • Fix prdf type & simplify writer examples (#86) (ce6004c)
    • Fix lazperf version requirement and make it dynamic. (#84) (9ab3333)
    Source code(tar.gz)
    Source code(zip)
  • v2.2.0(Jan 11, 2022)

    Library is now compatible with lazperf's new conda release (3.0.0).

    [2.2.0] - 2022-01-10

    Added

    • [Python/C++] Add UnscaledX, UnscaledY, UnscaledZ properties to las::Points

    Changed

    • [Python/C++] Add point_format_id argument to Writer constructor to allow update of the point format between reader and writer.
    • [Python/C++] Implement CopcExtentVlr for compatibility with lazperf 3.0.0
    • [Python/C++] Update lazperf dependency version to 3.0.0
    Commit History
    • [pre-commit.ci] pre-commit autoupdate (#80) (35b15a3)
    • COPCv1.0 and Laz-perf 3.0.0 compatibility (#79) (12765cf)
    • [pre-commit.ci] pre-commit autoupdate (#78) (dcc6490)
    • Add unscaled x,y,z to python Points bindings (#77) (3b0f2b2)
    • FEAT-580: Add point_format_id argument to Writer constructor. (#76) (49bd852)
    • [pre-commit.ci] pre-commit autoupdate (#74) (20e6d74)
    Source code(tar.gz)
    Source code(zip)
  • v2.1.3(Nov 17, 2021)

    [2.1.3] - 2021-11-17

    Changed

    • [Python/C++] Update CopcFileWriter constructor to provide optional arguments to update information when using a CopcConfig object from a Reader. Optional arguments are scale, offset, wkt, extra_bytes_vlr, and has_extended_stats.
    • [Python/C++] Make LasHeader's scale and offset read-only.
    Commit History
    • New writer constructor (#73) (2f43fea)
    Source code(tar.gz)
    Source code(zip)
  • v2.1.2(Nov 12, 2021)

    [2.1.2] - 2021-11-12

    Fixed

    • [General] Fix unintentional CMakeList version bump
    Commit History
    • Update changelog (99f0e5c)
    • Fix unintentional CMakeList version bump (7cad98d)
    Source code(tar.gz)
    Source code(zip)
  • v2.1.1(Nov 12, 2021)

    [2.1.1] - 2021-11-12

    Fixed

    • [Python] Add pickling of Node::page_key
    Commit History
    • Update changelog for #70 (792d9de)
    • Node pickle parent key hotfix (#70) (4e10a17)
    Source code(tar.gz)
    Source code(zip)
  • v2.1.0(Nov 11, 2021)

    [2.1.0] - 2021-11-11

    Added

    • [Python/C++] Add PageExists(VoxelKey key) to Writer
    • [Python/C++] Add GetParentAtDepth(int32_t depth) to VoxelKey
    • [Python/C++] Add GetPageList() to Reader
    • [Python/C++] Add page member to Node
    • [Python/C++] Add ChangeNodePage to Writer

    Changed

    • [Python/C++] Write WKT as EVLR instead of VLR to align with laspy
    • [Python/C++] Remove the error when scan angle is not within LAS specs [-30000,30000]
    • [Python/C++] !!!Potential Breakage!!! Replaced Page page argument with optional VoxelKey page_key in Writer's AddNode and AddNodeCompressed. If no page_key is provided the node is added to the root page, if a page_key is provided then the node is added to that page. If the requested page doesn't exist, it is created using the nearest existing hierarchical parent as page parent.
    Commit History
    • Improve subpage handling; small changes; rework addnode api (#66) (3c17210)
    • [pre-commit.ci] pre-commit autoupdate (#68) (81e500a)
    • Remove beta API warning (354c699)
    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(Oct 28, 2021)

    This release brings copc-lib up to current COPC.io spec at commit a6e8654. This includes removing support for PRDF 1-5 and adding support for CopcExtents. Additionally, the means of interacting with the LasHeader, CopcInfo, and other COPC elements were simplified under one CopcConfig object. Other existing functions and variables were renamed, and the style format was explicitly defined.

    [2.0.0] - 2021-10-28

    Added

    • [Python/C++] Add CopcExtent and CopcExtents classes
    • [Python/C++] Add extended stats (mean/var) to CopcExtent using an additional Lazperf extents VLR (see README.md for more info).
    • [Python/C++] Add GetCopcExtents function to CopcConfig
    • [Python/C++] Add GetCopcExtents and SetCopcExtents functions to Writer
    • [Python] Add reader.extents property
    • [Python/C++] Add CopcInfo class
    • [Python/C++] Add vector(c++)/list(python) constructor to VoxelKey
    • [Python/C++] Add CopcConfig class
    • [Python/C++] Add GetCopcConfig function to BaseIO
    • [Python/C++] Support COPC Extents, WKT, and Extra Bytes as VLR or EVLR
    • [Python/C++] Add SetCopcExtents and SetCopcInfo to Writer
    • [Python/C++] Add LasHeaderBase class
    • [Python/C++] Add ToString to LasHeader class
    • [Python/C++] Add VlrHeader class
    • [Python/C++] Add a check for WKT byte in LasHeader::FromLazPerf

    Changed

    • [Python/C++] Supported LAS point formats are now strictly 6 to 8 throughout the library
    • [Python/C++] Remove point_count_14, points_by_return_14, header_size_, wave_offset, and version from LasHeader
    • [Python/C++] Change lazperf version requirement to > 2.1.0
    • [Python/C++] Update autzen-classified.copc.laz test file to be latest official
    • [Python/C++] Change use of las::CopcVlr::span to CopcInfo::spacing
    • [Python/C++] Change CopcConfig::GetWkt return type from las::WktVlr to std::string
    • [Python/C++] Rename CopcConfig::GetCopc to CopcConfig::GetCopcInfo and now returns a CopcInfo class
    • [Python/C++] Rename Reader::GetCopcHeader to Reader::GetCopcInfo and now returns a CopcInfo class
    • [Python/C++] VoxelKey::Resolution and VoxelKey::GetResolutionAtDepth now take CopcInfo argument instead of las::CopcVlr
    • [Python/C++] Remove Writer::LasConfig, now using CopcConfig instead.
    • [Python/C++] Writer and FileWriter constructors now takes a CopcConfig class as argument
    • [Python/C++] Rename NumExtraBytes to EbByteSize
    • [Python] Change reader.GetCopcHeader() function to reader.copc_info property
    • [Python] Change reader.CopcConfig().LasHeader() function to reader.las_header property
    • [Python] Change reader.CopcConfig().Wkt() function to reader.wkt property
    • [Python] Change reader.CopcConfig().ExtraBytesVlr() function to reader.extra_bytes_vlr property
    • [C++] Add create_test_data.py and create_test_data.sh to create data for writer_node_test.cpp
    • [Python] Make VoxelKey.BaseKey and VoxelKey.InvalidKey static functions
    • [Python] Update Point and Points property names from CamelCase to under_score
    • [Python/C++] Rename Reader::GetAllChildren(VoxelKey) to Reader::GetAllChildrenOfPage(VoxelKey)
    • [Python/C++] Rename Reader::GetAllChildren() to Reader::GetAllNodes()
    • [C++] Rename PointFormatID to PointFormatId
    • [C++] Rename PointSourceID to PointSourceId
    • [C++] Rename HasRGB and HasNIR to HasRgb and HasNir respectively
    • [C++] Rename NIR to Nir
    • [Python/C++] Rename ScanAngleFloat to ScanAngleDegrees
    • [Python] Rename unscaled_x, unscaled_y, unscaled_z to x, y, z
    • [General] Rename CMake flag WITH_TESTS_AND_EXAMPLES to WITH_TESTS
    • [Python/C++] Rename Box::ZeroBox to Box::EmptyBox
    • [Python/C++] Rename VoxelKey::BaseKey to VoxelKey::RootKey
    Commit History
    • copc-lib v2 (update to latest spec, incl. extents and prdf 6-8) (#51) (6b8e92c)
    • Add RGB getter setter to Points. (#63) (1fae509)
    Source code(tar.gz)
    Source code(zip)
  • v1.3.1(Oct 19, 2021)

    Added

    • [Python/C++] Add spatial function Crosses to VoxelKey
    • [Python/C++] Add resolution function Resolution and GetResolutionAtDepth to VoxelKey
    • [Python/C++] Add Vector3 operators to Vector3
    • [Python/C++] Add resolution query functions GetDepthAtResolution, GetNodesAtResolution and GetNodesWithinResolution to Reader
    • [Python/C++] Add BoundsTrimFileExample and ResolutionTrimFileExample to example-writer files
    • [Python/C++] Add Classification and PointSourceID getter and setter to Points
    • [Python/C++] Add GetChildren to VoxelKey
    • [Python] Make Node and VoxelKey picklable
    • [Python/C++] Add a new constructor to Box using Vector3
    • [Python/C++] Add scaling functions to LasHeader
    • [Python/C++] Add ValidateSpatialBounds function to Reader

    Changed

    • [Python/C++] Change order of arguments in VoxelKey spatial functions Intersects, Contains, and Within
    • [Python/C++] Add optional resolution argument to Reader spatial query functions GetNodesWithinBox, GetNodesIntersectBox, GetPointsWithinBox, and GetAllPoints . resolution can be used to limit the resolution during spatial queries
    • [Python/C++] Update span of autzen-classified.copc.laz test file from 0 to 128

    Fixed

    • [Python] Fix typo in pickling of Node
    • [Python] Fix scale error and reformat NewFileExample() in example_writer.py and .cpp
    Commit History
    • FEAT-472: Spatial bounds check. (#60) (a303231)
    • FEAT-458: General Improvements (#59) (61c16e6)
    • FEAT-449: Resolution query functions (#48) (e9b7c5e)
    • Pin clang format version (#57) (89f5404)
    • "fix" formatting (ba94e0d)
    • disable mdformat, tracking: https://github.com/executablebooks/mdformat/issues/273 (e6d865a)
    • Update CHANGELOG.md (113b910)
    Source code(tar.gz)
    Source code(zip)
  • v1.3.0(Oct 5, 2021)

    [1.3.0] - 2021-10-04

    Added

    • [Python/C++] Indexing directly on Points object in C++/python, including slicing support in python
    • [Python] Pickle support for LasHeader, Vector3
    • [Python/C++] Update header min, max, and points by return after the writer has been created
    • [Python/C++] Add spatial functions Intersect, Contains, Within to Box, VoxelKey
    • [Python/C++] Add spatial function Within to Point, Points
    • [Python/C++] Add query functions GetNodesWithinBox and GetPointsWithinBox to Reader
    • [C++] Support for Windows build

    Changed

    • [Python] VoxelKey is implicitly convertible to a python tuple
    • [Python/C++] las::Points can be indexed directly with []
    • [Python/C++] las::Points holds shared pointers of point objects, so changes to the Point object within the Points container are properly reflected
    • [Python] points.Size() has been removed in python, replaced by len(points)
    • [Python] points.Get() and points.Get(i) have been replaced by __getitem__ and __iter__
    • [C++] las::Point objects are now solely referenced by shared pointers, so pointer accessors must be used
    • [C++] CMakeLists have been restructured to allow for building python/test/examples independently of the main library
    • [C++] The copc-lib library now must be referenced with the COPCLIB:: namespace in CMake
    Commit History
    • update (79ded84)
    • Update sh permissions (916094d)
    • Create generate-release-notes.sh (5384898)
    • Update .release-it.json (ae39f66)
    • Update release.yml (ecefdb8)
    • Create CHANGELOG.md (ef9a5a3)
    • Restructure cmake lists (#50) (b008d24)
    • FEAT-390: Spatial Queries (#39) (573dd6c)
    • Python Shared Pointers (#41) (29a34fd)
    • Fix pickling of char vector byte data (#46) (49c5f02)
    • Add pickle support to LasHeader with tests. (#45) (3aca30d)
    • Allow users to update header min/max/points by return (#44) (24d061d)
    • Add decompressor helper functions (#42) (60e7c2d)
    • [pre-commit.ci] pre-commit autoupdate (#40) (4696e37)
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Oct 4, 2021)

    • Change release-it to use admin token to push to protected branch (7f4ca14)
    • Add CI Release framework (#36) (09550c9)
    • Update readme with python info (#35) (95d40ba)
    • Python bindings (#26) (9d2ced9)
    • Compressor example fix (#34) (628cfd0)
    • [pre-commit.ci] pre-commit autoupdate (#33) (a4b0d5d)
    • Changing Reader/Writer to take file_path in constructor (#30) (89d3fe9)
    • Points class chris (#29) (2387622)

    BREAKING:

    • Point::X was renamed to Point::UnscaledX() - Point::X() now refers to the scaled point
    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Sep 8, 2021)

    • Removed Copc object, now use Reader and Writer classes to do processing
    • Add functional writer for creating new files
    • Add functional Point class for handling point creation
    Source code(tar.gz)
    Source code(zip)
  • v1.0(Aug 31, 2021)

Owner
Rock Robotic
Rock Robotic
FG-Net: Fast Large-Scale LiDAR Point Clouds Understanding Network Leveraging Correlated Feature Mining and Geometric-Aware Modelling

FG-Net: Fast Large-Scale LiDAR Point Clouds Understanding Network Leveraging Correlated Feature Mining and Geometric-Aware Modelling Comparisons of Running Time of Our Method with SOTA methods RandLA and KPConv:

Kangcheng LIU 68 Jun 23, 2022
NeeDrop: Self-supervised Shape Representation from Sparse Point Clouds using Needle Dropping

NeeDrop: Self-supervised Shape Representation from Sparse Point Clouds using Needle Dropping by: Alexandre Boulch, Pierre-Alain Langlois, Gilles Puy a

valeo.ai 25 May 24, 2022
Ground segmentation and point cloud clustering based on CVC(Curved Voxel Clustering)

my_detection Ground segmentation and point cloud clustering based on CVC(Curved Voxel Clustering) 本项目使用设置地面坡度阈值的方法,滤除地面点,使用三维弯曲体素聚类法完成点云的聚类,包围盒参数由Apol

null 9 Jul 15, 2022
An implementation on Fast Ground Segmentation for 3D LiDAR Point Cloud Based on Jump-Convolution-Process.

An implementation on "Shen Z, Liang H, Lin L, Wang Z, Huang W, Yu J. Fast Ground Segmentation for 3D LiDAR Point Cloud Based on Jump-Convolution-Process. Remote Sensing. 2021; 13(16):3239. https://doi.org/10.3390/rs13163239"

Wangxu1996 36 Jul 22, 2022
A LiDAR point cloud cluster for panoptic segmentation

Divide-and-Merge-LiDAR-Panoptic-Cluster A demo video of our method with semantic prior: More information will be coming soon! As a PhD student, I don'

YimingZhao 57 Aug 1, 2022
The code implemented in ROS projects a point cloud obtained by a Velodyne VLP16 3D-Lidar sensor on an image from an RGB camera.

PointCloud on Image The code implemented in ROS projects a point cloud obtained by a Velodyne VLP16 3D-Lidar sensor on an image from an RGB camera. Th

Edison Velasco Sánchez 4 Apr 21, 2022
An unified library for fitting primitives from 3D point cloud data with both C++&Python API.

PrimitivesFittingLib An unified library for fitting multiple primitives from 3D point cloud data with both C++&Python API. The supported primitives ty

Yueci Deng 10 Jun 30, 2022
DeepI2P - Image-to-Point Cloud Registration via Deep Classification. CVPR 2021

#DeepI2P: Image-to-Point Cloud Registration via Deep Classification Summary Video PyTorch implementation for our CVPR 2021 paper DeepI2P. DeepI2P solv

Li Jiaxin 124 Jul 29, 2022
GA-NET: Global Attention Network for Point Cloud Semantic Segmentation

GA-NET: Global Attention Network for Point Cloud Semantic Segmentation We propose a global attention network, called GA-Net, to obtain global informat

null 4 Jul 18, 2022
High performance, easy-to-use, and scalable machine learning (ML) package, including linear model (LR), factorization machines (FM), and field-aware factorization machines (FFM) for Python and CLI interface.

What is xLearn? xLearn is a high performance, easy-to-use, and scalable machine learning package that contains linear model (LR), factorization machin

Chao Ma 3k Aug 1, 2022
International Business Machines 9 Jul 21, 2022
A library for creating Artificial Neural Networks, for use in Machine Learning and Deep Learning algorithms.

iNeural A library for creating Artificial Neural Networks, for use in Machine Learning and Deep Learning algorithms. What is a Neural Network? Work on

Fatih Küçükkarakurt 5 Apr 5, 2022
Deep Learning in C Programming Language. Provides an easy way to create and train ANNs.

cDNN is a Deep Learning Library written in C Programming Language. cDNN provides functions that can be used to create Artificial Neural Networks (ANN)

Vishal R 11 Apr 18, 2022
cudnn_frontend provides a c++ wrapper for the cudnn backend API and samples on how to use it

cuDNN Frontend API Introduction The cuDNN Frontend API is a C++ header-only library that demonstrates how to use the cuDNN C backend API. The cuDNN C

NVIDIA Corporation 105 Jul 25, 2022
Lite.AI 🚀🚀🌟 is a user-friendly C++ lib for awesome🔥🔥🔥 AI models based on onnxruntime, ncnn or mnn. YOLOX, YoloV5, YoloV4, DeepLabV3, ArcFace, CosFace, Colorization, SSD

Lite.AI ?????? is a user-friendly C++ lib for awesome?????? AI models based on onnxruntime, ncnn or mnn. YOLOX??, YoloV5??, YoloV4??, DeepLabV3??, ArcFace??, CosFace??, Colorization??, SSD??, etc.

Def++ 1.9k Jul 29, 2022
Lite.AI 🚀🚀🌟 is a user friendly C++ lib of 60+ awesome AI models. YOLOX🔥, YoloV5🔥, YoloV4🔥, DeepLabV3🔥, ArcFace🔥, CosFace🔥, RetinaFace🔥, SSD🔥, etc.

Lite.AI ?? ?? ?? Introduction. Lite.AI ?? ?? ?? is a simple and user-friendly C++ library of awesome ?? ?? ?? AI models. It's a collection of personal

Def++ 1.9k Aug 3, 2022
WFA2-lib: Wavefront alignment algorithm library v2

WFA2-lib 1. INTRODUCTION 1.1 What is WFA? The wavefront alignment (WFA) algorithm is an exact gap-affine algorithm that takes advantage of homologous

Santiago Marco-Sola 64 Jul 21, 2022
A tiny C++11 library for reading BVH motion capture data

bvh11 A tiny C++11 library for reading (and writing) BVH motion capture data. Dependencies C++11 standard library Eigen 3 http://eigen.tuxfamily.org/

Yuki Koyama 32 May 23, 2022
A easy-to-use image processing library accelerated with CUDA on GPU.

gpucv Have you used OpenCV on your CPU, and wanted to run it on GPU. Did you try installing OpenCV and get frustrated with its installation. Fret not

shrikumaran pb 4 Aug 14, 2021