Skip to content

useful functions for processing point cloud(GPU or CPU version)

Notifications You must be signed in to change notification settings

liuyuan-pal/PointUtil

Repository files navigation

Description

This repository contains some useful functions for processing point cloud, which uses GPU to get better performance. We provide python bindings for these functions.

How to build

1. Dependency

  • CUDA
  • Boost-Python
  • FLANN(built with CUDA)

2. Revise CMakeLists.txt

Set following 6 variables according to your installation directory.

set(BOOST_PYTHON_INCLUDE_DIR /home/liuyuan/software/boost/include)      # path contains boost/python/object_core
set(BOOST_PYTHON_LIBRARY_DIR /home/liuyuan/software/boost/lib)          # path contains boost/python/libboost_numpy*

set(FLANN_INCLUDE_DIR /usr/local/include)   # path contains flann/flann.h
set(FLANN_LIBRARY_DIR /usr/local/lib)       # path contains libflann.so*

# !!! note the python here should be consistent with the python used for building boost-python
set(PYTHON_INCLUDE_DIRS /home/liuyuan/anaconda3/include/python3.6m)   # path contains Python.h
set(PYTHON_LIBRARIES /home/liuyuan/anaconda3/lib/libpython3.6m.so)

3. Build

mkdir build
cd build
cmake ..
make -j

4. test

cd test
python test_downsample.py

If the program output "cost xxxxx.xxxx s ", then the lib is built successfully. The downsampled point clouds are saved in the test/output directory as two txt files, whic can be visualized by CloudCompare or other tools. The result may look like this:

Some API

still under construction

def gridDownsampleGPU(pts,sample_stride,output_gidxs=False,gpu_id=0):
    '''
    split space into voxels, which have side length of sample_stride, 
    and retain only one point every voxel.
    Known issue: the space of point cloud should be smaller than 2^15*sample_stride, otherwise it will cause overflow in the computation.
    :param pts:				np.array, shape is [pn,fn] fn must >= 3, which are [x,y,z,(r,g,b,intensity,label,...)]
    :param sample_stride: 	float,
    :param output_gidxs: 	bool, whether output the grid idx for each raw point
    :param gpu_id:			int, which gpu to use
    :return: 
    	ds_idx: np.array [ds_pn] int32
    	(optional: grid_idx: np.array [pn] int32)
    	downsampled point clouds: ds_pts=pts[ds_idx]
    '''

About

useful functions for processing point cloud(GPU or CPU version)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages