静止背景下的多目标追踪(附matlab程序)

静止背景下的多目标追踪
随着计算机技术以及智能汽车行业的发展,多目标的检测与追踪的实用性与研究价值逐渐提高。在计算机视觉的三层结构中,目标跟踪属于中间层,是其他高层任务,例如动作识别以及行为分析等的基础。其主要应用可包括视频监控,检测异常行为人机交互,对复杂场景中目标交互的识别与处理,以及虚拟现实及医学图像。
不再失落目标跟踪又包括单目标跟踪和多目标跟踪。单目标跟踪可以通过目标的表观建模或者运动建模,以处理光照、形变、遮挡等问题,而多目标跟踪问题则更加复杂,除了单目标跟踪回遇到的问题外,还需要目标间的关联匹配。另外在多目标跟踪任务中经常会碰到 目标的频繁遮挡、轨迹开始终止时刻未知、目标太小、表观相似、目标间交互、低帧率等等问题。
静止背景下的多目标追踪可分为两步来实现,第一步是在视频文件的每帧中检测出移动的目标,第二步是将检测到的目标与跟踪轨迹实时匹配。在本次实验中,利用混合高斯模型进行背景减除,使用形态学操作消除噪声,通过卡尔曼滤波预测目标位置,最后利用匈牙利算法进行匹配,实现静止背景下的多目标追踪。
1 实验原理
1.1 混合高斯模型
单高斯模型是利用高维高斯分布概率来进行模式分类:
其中用训练样本均值代替,用样本方差代替,X为d维的样本向量。通过高斯概率公式就可以得出类别C属于正(负)样本的概率。
而混合高斯模型就是数据从多个高斯分布中产生,每个GMM由k个单高斯分布线性叠加而成。相当于对各个高斯分布进行加权,权系数越大,那么这个数据属于这个高斯分布的可能性越大。
利用混合高斯模型(GMM)可以进行背景减除,将前后景分离,得到移动的目标。对每个像素点建立由k个单高斯模型线性叠加而成的模型,在这些混合高斯背景模型中,认为像素之
间的颜信息互不相关,对各像素点的处理都是相互独立的。单个像素点在t时刻服从混合高斯分布概率密度函数:
其中k为分布模式总数,为t时刻第i个高斯分布,为其均值,为其协方差矩阵。
在获得新一帧图像后更新混合高斯模型。用图像中的每个像素点与混合高斯模型匹配,如果成功则判定该点为背景点, 否则为前景点。当背景更新完成后,高斯模型与背景相关程度越大,标准差就越小,权值越大。按照权值与标准差的比值从大到小进行排序,取前B个模型作为背景。
1.2 卡尔曼滤波
卡尔曼滤波是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。其核心思想是,根据当前的测量值、上一时间的预测值以及误差,计算得到当前值,并可以持续预测下一时间的值。
试验中利用卡尔曼滤波计算并预测每个轨迹在下一帧中的位置,建立帧间轨迹的关系。卡尔曼滤波将跟踪分为5种状态:新目标出现、目标匹配、目标遮挡、目标分离以及目标消失。其状态方程如下所示:
其中x,y,w,h分别表示目标外接矩形的横纵坐标以及长、宽,为不相关的高斯白噪声。
定义其观测方程为
定义好了观测方程与状态方程之后就可以用卡尔曼滤波器实现运动目标的跟踪,步骤如下:
1)计算运动目标的特征信息(运动质心,以及外接矩形)。
2)用得到的特征信息初始化卡尔曼滤波器。
3)用卡尔曼滤波器对下一帧中对应的目标区域进行预测,当下一帧到来时,在预测区域内进行目标匹配。
4)如果匹配成功,则更新卡尔曼滤波器。
1.3 匈牙利匹配算法
匈牙利匹配算法是一种利用增广路径求取二分图最大匹配的算法。匈牙利树一般由宽度优先搜索(BFS)构成。从一个未匹配点出发运行 BFS,且必须走交替路,直至不能再扩展为止。交替路指的是,从一个未匹配点出发,依次经过非匹配边、匹配边...循环往复,形成的路径称为交替路。
示意图如图1所示:
图1 匈牙利树匹配
匈牙利算法的要点如下:
1)从左边第一个顶点开始,挑选未匹配点进行搜索,寻增广路。
2)如果经过一个未匹配点,则寻成功。更新路径信息,匹配变数+1,停止搜索。
3)如果一直没有到增广路,则不再从这个点开始搜索。
4)到增广路之后需要沿着路径更新匹配,通过prev 数组来记录路径上的点。
在实验中,用匈牙利算法将新一帧图片中检测到的运动物体匹配到对应的轨迹。匹配的过程是通过最小化卡尔曼预测得到的质心与检测到的质心之间的欧氏距离之和实现的。
通过卡尔曼滤波计算并预测每个轨迹在下一帧中的位置,然后计算预测的轨迹位置和每个新检测到的目标之间的欧几里得距离,将度量结果作为损失函数矩阵。损失矩阵的大小为(M,N),其中M是轨迹数目,N是检测到的运动物体数目。
2 实验内容
2.1 目标检测
要实现目标检测,首先利用混合高斯模型区分前景背景。通过调用函数vision.ForegroundDetector设置检测子为混合高斯模型,其中参数分别为高斯核数目、训练背景帧数以及背景阈值。函数的返回值为一个二进制掩码,其中1的像素值对应前景,0的像素值对应背景。在实验中,选取前150帧图像作为背景帧,并设置阈值为0.6,高斯核数目为3。
完成背景减除后,通过设置blob分析子来寻连通域,函数设置的参数为最小区域面积,
返回值为目标面积、质心和边界框。实验中,设置最小区域面积为400,代码如下所示:
obj.detector = vision.ForegroundDetector('NumGaussians', 3, 网趣电影...
            'NumTrainingFrames', 150, 'MinimumBackgroundRatio', 0.6);     
obj.blobAnalyser = vision.BlobAnalysis('BoundingBoxOutputPort'两河文明,                true,'AreaOutputPort', true, 'CentroidOutputPort', true,                'MinimumBlobArea', 400);
完成混合高斯混合模型以及blob分析子后,逐帧读取视频,为后续目标检测以及追踪的过程做准备:
    frame = ader.step();
在检测目标的过程中,利用形态学运算中的开运算以及闭运算可以消除噪声,使目标检测更为准确。开运算是通过先腐蚀再膨胀,去除孤立的像素点、总的位置和结构不变。而闭运算是先膨胀再腐蚀,弥合小裂缝,而总的位置和形状不变,通过填充图像的凹角来滤波图像。其效果如图2所展示:
           
图2.1 原始像素点                    图2.2 开运算效果图
图2.3 闭运算效果图
图2  形态学运算效果图
实验中,首先使用检测子,即混合高斯模型得到前景图,对前景图使用8*8矩形进行开运算,切断临近物体间的联系。再使用15*15矩形进行闭运算,消除细小物体,最后填补物体中间的空洞。滤除噪声后,使用blob分析得到所有连通域的中心以及边界框的大小。代码如下所示:
function [centroids, bboxes, mask] = detectObjects(frame)
        % Detect foreground.
        mask = obj.detector.step(frame);
        % Apply morphological operations to remove noise and fill in holes.
        mask = imopen(mask, strel('rectangle', [8,8]));
        mask = imclose(mask, strel('rectangle', [15,15]));
        mask = imfill(mask, 'holes');
        % Perform blob analysis to find connected components.
        [~, centroids, bboxes] = obj.blobAnalyser.step(mask);
end
视频中对移动目标的检测结果如图3.1,图3.2所示:
图3.1 移动目标检测结果1
图3.2 移动目标检测结果2
2.2 目标跟踪
要进行目标跟踪,首先需要进行轨迹初始化,通过函数initializeTracks()来进行初始化,每一个轨迹代表视频中一个移动的目标。轨迹的结构包含如下信息:
1) ID,轨迹编号;
2) Bbox,目标的边界框;
3) kalmanFilter,用于预测目标位置的卡尔曼滤波器;
4) Age,目标被检测到的总帧数;
5) totalVisibleCount,目标可被检测到的全部帧数;
6) consecutiveInvisibleCount:连续未检测到目标的帧数。
代码如下所示:
function tracks = initializeTracks()
        % create an empty array of tracks
        tracks = struct(...
            'id', {}, ...
            'bbox', {}, cdn服务...
            'kalmanFilter', {}, ...
            'age', {}, ...
国务院关于促进节约集约用地的通知
            'totalVisibleCount', {}, ...
            'consecutiveInvisibleCount', {});
end
为消除噪声对目标追踪的影响,仅在totalVisibleCount超过阈值时才显示目标的轨迹。当连续几帧没有检测到与跟踪相关的信息时,则假设该对象已经离开了可视图画面。通过参数c
onsecutiveinvisiblecount可判断这种情况,当其超过阈值时,删除跟踪轨迹。如果跟踪时间较短,并且在大多数帧中标记为不可见,那么轨迹也可能作为噪声被删除。

本文发布于:2024-09-23 02:29:16,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/31782.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:目标   检测   进行   匹配   跟踪
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议