This example shows how to generate CUDA® code for a Simulink® model that can detect and output lane marker boundaries on an image. This example takes RGB image as an input and uses the imresize
(Image Processing Toolbox), rgb2gray
, ordfilt2
(Image Processing Toolbox), hough
(Image Processing Toolbox), houghpeaks
(Image Processing Toolbox), and houghlines
(Image Processing Toolbox) functions that are part of Image Processing Toolbox™ to detect lane markings. This example closely follows Lane Detection on the GPU by Using the houghlines Function.
This example illustrates the following concepts:
Model a lane detection application in Simulink by using image processing functions.
Configure the model for GPU code generation.
Generate a CUDA executable for the Simulink model.
CUDA enabled NVIDIA® GPU with compute capability 3.2 or higher.
NVIDIA CUDA toolkit and driver.
Image Processing Toolbox™.
Environment variables for the compilers and libraries. For more information, see Third-Party Hardware and Setting Up the Prerequisite Products.
To verify that the compilers and libraries necessary for running this example are set up correctly, use the coder.checkGpuInstall
function.
envCfg = coder.gpuEnvConfig('host');
envCfg.BasicCodegen = 1;
envCfg.Quiet = 1;
coder.checkGpuInstall(envCfg);
houghlines
Simulink ModelThe Simulink model for lane detection is shown.
open_system('lane_detection');
The Lane Detection
subsystem contains a MATLAB Function
block that takes an intensity image as input and provides detected lanes as output. This function is based on the lane detection algorithm implementation using houghlines
as described in Lane Detection on the GPU by Using the houghlines Function example. When the model runs, the Visualization
block displays the lane detected output image.
Open Configuration Parameters dialog box.
In Simulation Target pane, select GPU acceleration.
Run the simulation in Normal mode.
set_param('lane_detection', 'SimulationMode', 'Normal'); sim('lane_detection');
In Code Generation pane, select the Language as C++ and enable Generate GPU code.
Open Simulation Target pane. In the Advanced parameters, enable Dynamic memory allocation threshold in MATLAB functions. For more information, see Dynamic memory allocation in MATLAB functions (Simulink)
Open Code Generation > GPU Code pane. In the subcategory Libraries, enable cuBLAS, cuSOLVER and cuFFT.
Generate and build the Simulink model on the host GPU by using the rtwbuild
command. The code generator places the files in a build folder, a subfolder named lane_detection_ert_rtw
under your current working folder.
status = evalc("rtwbuild('lane_detection')");
Close the Simulink model.
close_system('lane_detection');