Figure 1: Raw point cloud.
The color represents a point's reflextion intensity: red is 1; blue is 0.
Figure 2: Eight lanes are detected from the point cloud and are marked as red lines. Left: 2D view on x-y plane. Right: 3D view.
Authors: Feiyu Chen, Zunran Guo
Time: June 5th, 2019
Course: Geospatial Vision and Visualization
Report: Report.pdf, or view it on this google slide.
Code: main.ipynb
Detect lanes from the point cloud of a 80-meter highway road
To detect the lanes, we observed and made the following assumptions:
- Lanes are in the road surface. The road is a thin and flat region in point cloud data.
- Lane points have larger reflection intensity than other road points.
- The shape of lane is piece-wise straight.
- Lanes are parrerel to each other
Based on these, we designed the following procedures to detect lanes from the point cloud data:
- Preprocessing: Change coordinate to Cartesian; Downsample the points while retraining max intensity; Filter out noise points.
- Remove non-planar regions; Then detect the plane of the road surface by RANSAC.
- Thresholding on point intensity to get possible lane points.
- Estimate the direction of lanes by RANSAC.
- Do clustering to get each lane, and estiamte their 3D line equations.
For more details, please see the report and code.
main.ipynb
Run through it using jupyter notebook to obtain the lane detection result.
The library functions are in utils/.
-
Format:
Each row uses 4 number to represent a point:1. latitude (degree) 2. longitude (degree) 3. altitude (meter) 4. point reflexion intensity (0~100)
Please use Python3 and jupyter notebook to run the program.
The command for install the required packages is:
$ pip install jupyter numpy scipy sklearn matplotlib open3d-python opencv-python
Result will be displayed inside the jupyter notebook, as well as saved to the "result/" folder. You could use the "pcl_viewer" to view the saved ".pcd" files.
To install "pcl_viewer":
$ sudo apt-get install pcl-tool