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),
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.
To verify that the compilers and libraries necessary for running this example are set up correctly, use the
envCfg = coder.gpuEnvConfig('host'); envCfg.BasicCodegen = 1; envCfg.Quiet = 1; coder.checkGpuInstall(envCfg);
The Simulink model for lane detection is shown.
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.