玖叶教程网

前端编程开发入门

MATLAB环境下使用单目相机追踪多辆车

该程序运行环境为MATLAB R2018A。本例简单讲解如何使用安装在车辆中的单目相机检测和追踪多辆车。

MATLAB的自动驾驶系统工具箱Automated Driving System Toolbox提供了经过预训练的车辆检测器和多目标追踪器(multi-object tracker),以便在自驾汽车周围追踪车辆。车辆检测器基于ACF特征和Faster R-CNN网络。

追踪流程主要包括以下步骤:

1.定义相机内参和相机安装位置

2.加载并配置预训练的车辆检测器

3.设置多目标追踪器。

4.为每个视频帧进行检测

5.使用检测结果更新追踪器。

6.显示追踪结果。

配置车辆检测器和多目标追踪器

在本例中,使用预训练的ACF车辆检测器,并配置此检测器以包含摄像头信息。默认情况下,检测器以多种比例扫描整张图像。

加载包含相机信息的monoCamera对象。

d = load('FCWDemoMonoCameraSensor.mat', 'sensor');

加载预训练的ACF车辆检测器

detector = vehicleDetectorACF('full-view');

使用单目相机信息配置检测器

普通车辆的宽度在1.5至2.5米之间。只有此范围内宽度的边界框被视为candidate

vehicleWidth = [1.5, 2.5];

配置检测器

detector = configureDetectorMonoCamera(detector, d.sensor, vehicleWidth);

初始化多目标追踪器

[tracker, positionSelector] = setupTracker();

在视频中追踪车辆

在每个时间步长中,运行检测器,使用检测结果更新追踪器,并在视频中显示追踪结果。

设置视频读取器和播放器

videoFile   = '05_highway_lanechange_25s.mp4';
videoReader = VideoReader(videoFile);
videoPlayer = vision.DeployableVideoPlayer();
currentStep = 0;
snapshot = [];
snapTimeStamp = 120;
cont = hasFrame(videoReader);
while cont
    % 更新帧计数器
    currentStep = currentStep + 1;
        
    % 读取下一帧
    frame = readFrame(videoReader);
    
    % 运行检测器
    detections = detectObjects(detector, frame, currentStep);
    
    confirmedTracks = updateTracks(tracker, detections, currentStep);
    
    % 移除远处车辆的轨迹
    confirmedTracks = removeNoisyTracks(confirmedTracks, positionSelector, d.sensor.Intrinsics.ImageSize);
   
    frameWithAnnotations = insertTrackBoxes(frame, confirmedTracks, positionSelector, d.sensor);

    % 显示
    videoPlayer(frameWithAnnotations);  
    
   
    if currentStep == snapTimeStamp
        snapshot = frameWithAnnotations;
    end   
    
    cont = hasFrame(videoReader) && isOpen(videoPlayer);
end

显示追踪的车辆并显示到自驾车的距离。

if ~isempty(snapshot)
    figure
    imshow(snapshot)
end

其中:

setupTracker函数创建一个多目标追踪器,使用卡尔曼滤波器追踪多个对象。

initBboxFilter函数定义了一个卡尔曼滤波器对边界框测量值进行滤波。

detectObjects函数检测图像中的车辆。

removeNoisyTracks函数去除嘈杂的轨迹。如果轨迹的预测边界框太小,则认为该轨迹是有噪声的。通常,这意味着车辆很远。

insertTrackBoxes函数在图像中插入边界框。

代码如下

https://mianbaoduo.com/o/bread/Y5mZl5Zv

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言