Road Navigation
Road finder demo.
By Laurent Ittiitti@usc.eduhttp://jevois.orgGPL v3
 Language: C++Supports mappings with USB output: YesSupports mappings with NO USB output: Yes 
 Video Mapping:   NONE 0 0 0 YUYV 320 240 30.0 JeVois RoadNavigation
 Video Mapping:   NONE 0 0 0 YUYV 176 144 120.0 JeVois RoadNavigation
 Video Mapping:   YUYV 320 256 30.0 YUYV 320 240 30.0 JeVois RoadNavigation
 Video Mapping:   YUYV 176 160 120.0 YUYV 176 144 120.0 JeVois RoadNavigation

Module Documentation

This algorithm detects road using a compination of edge detection and tracking, and texture analysis. The algorithm is an implementation of Chang, Siagian and Itti, IROS 2012, available at

The algorithms combines detection and tracking of line segments at the edges of the road or on the road (e.g., lane dividers), and texture analysis to distinguish the road region from its surroundings. One strength of this algorithm is that it requires no training. No need to drive your robot on many roads to learn about the appearance of roads. The flipside of this, of course, is that driving on roads which do not look like standard roads or trails may fail.

The algorithm outputs the horizontal coordinate of the vanishing point of the road, which usually is a good indication of the road heading (except in very tight bends or corners).

Demo display outputs

Detected line segments are shown in black and white, while segments that have been reliably tracked over multiple frames are shown in thick purple. Estimated vanishing point location and confidence is shown as a big green disk on the horizon line.

Note that the demo display runs much slower than the algorithm with no video output (which should be used on autonomous cars), simply because drawing all the detected line segments takes a lot of time.

Serial Messages

This module can send standardized serial messages as described in Standardized serial messages formatting. One 1D message is issued on every video frame for the vanishing point's horizontal location.

  • Serial message type: 1D
  • id: always vp (shorthand for vanishing point)
  • x: standardized 2D horizontal coordinate of the vanishing point
  • w: always 0.
  • extra: none (empty string)

See Standardized serial messages formatting for more on standardized serial messages, and Helper functions to convert coordinates from camera resolution to standardized for more info on standardized coordinates.

Trying it out

To casually try out this module, just search the web for pictures of roads and point the JeVois camera to one of them. Make sure that you align the horizon line of the algorithm (which has a number of purple and green disks) roughly with the horizon line in your picture. As you move the camera left and right, the location of the large green disk that marks the detected vanishing point should move left and right, and should point to the vanishing point of the road in your image.

When using on a mobile robot in the real world, setting the proper horizon line is essential for good operation of the algorithm. This is determined by parameter horizon, which should be tuned according to the height and tilt angle of the JeVois camera on your vehicle.

ParameterTypeDescriptionDefaultValid Values
(RoadNavigation) vpconffloatMinimum vanishing point confidence required to send a serial message. Note that currently, confidence values are binary (only 0 or 1), and quite conservative (many good detections may get a confidence of 0 if they are not very clean).0.0F-
(RoadFinder) horizonintEstimated vertical (Y) position of the horizon (pixels, with 0 at the top of the frame). Adjust this depending on the tilt angle of your camera and video input resolution.70-
(RoadFinder) supportintOffset (in pixels) between horizon line and horizon support line (positive values means support line is below horizon line.20-
(RoadFinder) spacingunsigned intSpacing between vanishing point candidates (pixels).20-
(RoadFinder) distthreshunsigned intVanishing point distance threshold (pixels).40-
params.cfg file
# Default paremeters that are set upon loading the module

# y position of the horizon line, on our toy car and using 176x144 inputs:
#horizon = 70

# y position of the horizon line, on our toy car and using 320x240 inputs:
horizon = 110
Detailed docs:RoadNavigation
Copyright:Copyright (C) 2016 by Laurent Itti, iLab and the University of Southern California
License:GPL v3
Support URL:
Other URL:
Address:University of Southern California, HNB-07A, 3641 Watt Way, Los Angeles, CA 90089-2520, USA