Denoise LIDAR PointCloud using Spherical Proection and Image Processing.
Updated: 15/06/2021 by Vu-Hoi HUYNH
- Test white noise from LIDAR data, which contains following multidimensional varibales:
- Azimuth angle
- Elevation angle
- Distance
- Intensity
- The idea is to project LIDAR PointCloud from spherical space into a 2D image, then to denoise each channel of the image by Computer Vision methods:
- Azimuth vector:
$\bm{A} = [a_0 ; a_1 ; \dots ; a_n]^T = [a_j]^T_{0 \leq j \leq n}$ - Distance vector:
$\bm{D} = [d_j]^T_{0 \leq j \leq n}$ - Where
$d_j = [32 a_j + k]^T_{e_{max} \geq k \geq e_{min}}$ and$k$ lies from maximum elevation angle to minimum one.
- Where
- Intensity vector:
$\bm{I} = [i_j]^T_{0 \leq j \leq n}$ - Where
$i_j = [32 a_j + k]^T_{e_{max} \geq k \geq e_{min}}$ and$k$ lies from maximum elevation angle to minimum one.
- Where
- The principle of
Spherical projection
:
-
Where:
-
In our case, PointCloud is already in spherical space so we ignore the first step of
Cartesian Spherical Convertor
.
- The
Channel Splitting
is to split multi-channel image into grayscale ones. - In our case, the
Distance
andIntensity
are studied.
- The principle of
Image Denoising
:
- Where:
Denoising
uses fastNlMeansDenoising.Noise Filtering
uses Thresh to zero to consider pixels which are smaller than a level, as non-noise pixels and then counters the quantity ratio ofNumber of nonzero pixels / Number of all pixels
as a varibale which shows the noisy level of theGrayscale image
.
- Prerequisites: OpenCV and TinyXML2
- The paramters should be modified inside
parameters/parameterFile.xml
- Installation and testing:
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_INSTALL_PREFIX=../install
$ make
$ ./PointCloud_Denoising ../parameters/parameterFile.xml