Main Content


Detect lanes in a grayscale intensity image



birdsEyeBW = segmentLaneMarkerRidge(birdsEyeImage,birdsEyeConfig,approxMarkerWidth) returns a binary image that represents lane features. The function segments the input grayscale intensity image, birdsEyeImage, using a lane ridge detector. birdsEyeConfig transforms point locations from vehicle coordinates to image coordinates. The approxMarkerWidth argument is in world units, and specifies the approximate width of the lane-like features that are detected.

birdsEyeBW = segmentLaneMarkerRidge(___,Name,Value) returns a binary image with additional options specified by one or more Name,Value pair arguments.


collapse all

Load a bird's-eye-view configuration object.

load birdsEyeConfig

Load the image captured from the sensor that is defined in the bird's-eye-view configuration object.

I = imread('road.png');
title('Original Image')

Figure contains an axes. The axes with title Original Image contains an object of type image.

Create a bird's-eye-view image.

birdsEyeImage = transformImage(birdsEyeConfig,I);

Figure contains an axes. The axes contains an object of type image.

Convert bird's-eye-view image to grayscale.

birdsEyeImage = im2gray(birdsEyeImage);

Set the approximate lane marker width to 25 cm, which is in world units.

approxMarkerWidth = 0.25;

Detect lane features.

birdsEyeBW = segmentLaneMarkerRidge(birdsEyeImage,birdsEyeConfig,approxMarkerWidth);

Figure contains an axes. The axes contains an object of type image.

Input Arguments

collapse all

Bird’s-eye-view image, specified as a nonsparse matrix.

Data Types: single | int16 | uint16 | uint8

Object to transform point locations from vehicle to image coordinates, specified as a birdsEyeView object.

Approximate width of lane-like features for the function to detect in the bird’s-eye-view image, specified as a real scalar in world units, such as meters.

Name-Value Pair Arguments

Specify optional comma-separated pairs of Name,Value arguments. Name is the argument name and Value is the corresponding value. Name must appear inside quotes. You can specify several name and value pair arguments in any order as Name1,Value1,...,NameN,ValueN.

Example: 'ROI' []

Region of interest in world units, specified as the comma-separated pair consisting of 'ROI' and a 1-by-4 vector in the format [xmin,xmax,ymin,ymax]. The function searches for lane-like features only within this region of interest. If you do not specify ROI, the function searches the entire image.

Sensitivity factor, specified as the comma-separated pair consisting of 'Sensitivity' and a real scalar in the range [0, 1]. You can increase this value to detect more lane-like features. However, the higher sensitivity can increase the risk of false detections.

Output Arguments

collapse all

Bird’s-eye-view image, returned as a binary image that represents lane features.

More About

collapse all

Vehicle Coordinate System

This function uses a vehicle coordinate system to define point locations, as defined by the sensor in the birdsEyeView object. It uses the same world units as defined by the birdsEyeConfig.Sensor.WorldUnits property. See Coordinate Systems in Automated Driving Toolbox.


segmentLaneMarkerRidge selects lanes by searching for pixels that are lane-like. Lane-like pixels are groups of pixels with high-intensity contrast compared to neighboring pixels on either side. The function chooses the filter used to threshold the intensity contrast based on the approxMarkerWidth value. The filter has high responses for pixels with intensity values higher than those of the left and right neighboring pixels that have a similar intensity at a distance of approxMarkerWidth. The function retains only certain values from the filtered image based on the Sensitivity factor.


[1] Nieto, M., J. A. Laborda, and L. Salgado. “Road Environment Modeling Using Robust Perspective Analysis and Recursive Bayesian Segmentation.” Machine Vision and Applications. Volume 22, Issue 6, 2011, pp. 927–945.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

See Also

Introduced in R2017a