2
$\begingroup$

I want to analyze a traffic scene. My source data is a point cloud like this one (see images at the bottom of that post). I want to be able to detect objects that are on the road (cars, cyclists etc.). So first of all I need know where the road surface is so that I can remove or ignore these points or simply just run a detection above the surface level.

What are the ways to detect such road surface? The easiest scenario is a straight and flat road - I guess I could try to registrate a simple plane to the approximate position of the surface (I quite surely know it begins just in front of the car) and because the road surface is not a perfect plane I have to allow some tolerance around the plane.

More difficult scenario would be a curvy and wavy (undulated?) road surface that would form some kind of a 3D curve... I will appreciate any inputs.

$\endgroup$

2 Answers 2

2
$\begingroup$

RANSAC is usually used to segment planes from the point cloud (see: http://www.pointclouds.org/documentation/tutorials/planar_segmentation.php).

As an alternative, when you detect objects that are on the road you could neglect surfaces/points for which the curvature is close or equal to zero. However, this requires you to have some way to get the curvature information, for example, normals (see: http://pointclouds.org/documentation/tutorials/normal_estimation.php).

$\endgroup$
1
  • $\begingroup$ The SACMODEL_PLANE works nicely, but I would need to specify where to search (I approximately know where the road is), because otherwise it tends to jump to other planar surfaces (maybe to a nearby flat building etc.) and I do not want that. Do you know how to do this easily? I surely could take only part of the cloud (copy part of cloud) and run segmentation on it, but better would be to specify say something like "bounding box" for the segmentation on the whole cloud. $\endgroup$
    – Kozuch
    Oct 30, 2014 at 23:05
1
$\begingroup$

There are couple of ways to detect road surface. One is to use planar gradients (like linear gradients in 3D) as mentioned in @ArminMeisterhirn 's answer. (http://www.pointclouds.org/assets/uploads/3DRP-PCL14_Bellone.pdf)

Other one is to use associative learning; We can identify objects in image (like cars, roads etc some hints can be found in this video https://www.youtube.com/watch?v=j8zj5lBpFTY ) and use corresponding point cloud data and train the second stage with corresponding 3D objects. (Like using CNN for object classification/ training as per ImageNet) (Example attempt: https://people.csail.mit.edu/fisher/publications/papers/mastin09cvpr.pdf)

I prefer second option and usage of AI. There is a database containing both images and other sensors' data timestamped by software automatically as available http://grandchallenge.mit.edu/wiki/index.php?title=PublicData .

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.