视频中对多目标运动物体跟踪的算法解析.DOC

上传人:天*** 文档编号:1569007 上传时间:2019-03-05 格式:DOC 页数:8 大小:29KB
下载 相关 举报
视频中对多目标运动物体跟踪的算法解析.DOC_第1页
第1页 / 共8页
视频中对多目标运动物体跟踪的算法解析.DOC_第2页
第2页 / 共8页
视频中对多目标运动物体跟踪的算法解析.DOC_第3页
第3页 / 共8页
视频中对多目标运动物体跟踪的算法解析.DOC_第4页
第4页 / 共8页
视频中对多目标运动物体跟踪的算法解析.DOC_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、视频中对多目标运动物体跟踪的算法解析1 算法目的:运动目标跟踪算法的目的就是对视频中的图象序列进行分析,计算出目标在每帧图象上的位置。这里要根据区域分割过程给出的目标质心位置,计算出目标位移,并且根据质心位置的变化判断出目标的运动方向,以及运动目标是否在观察窗口,实现对客流量的统计。因为该跟踪是对多目标的追踪,需要找出运动目标在相邻帧上的对应区域。系统具有固有噪声,目标周围背景的干扰可能会产生误差,但这些噪声在前面的过程已经去除,如有必要可做适当调整修正。2 算法难点:(1)因为要跟踪的是多目标,需要找到相邻帧之间对应的运动目标区域不致跟踪混乱。(2)如何判断运动目标区域是否是新的目标进入观测

2、窗口(3)运动目标是否离开了观测窗口以及离开的方向;即计数器何时加 1、是否加 1(4)对跟踪过程中出现的一些偏差和问题,要进行必要的修正3 算法描述:(1)跟踪首先要判断的是:帧与帧之间如何将运动目标对应起来。追踪过程中的追踪特征是物体的质心(由运动区域分割过程中给出) ,这里判断对应目标可以:a.只利用质心间的最短距离做为特征; b.利用加权系数将最短距离,运动目标区域的长度,宽度以及长宽比和面积等综合起来作为特征。(2)根据判断特征设置目标链,记录每个被跟踪目标的最新质心位置,为下步判断提供条件。另外将每个目标的质心位置存储起来,可以随时掌握目标的运动情况,为以后要输出目标的运动曲线做基

3、础。(3)每进入观察窗口一个新的运动目标,就将它的最新质心位置加入该目标链。如何判断该运动目标是新的:设置门限值 ymin,ymax(当 yminymax 或 yymax 并且它的标志位为未被跟踪,则肯定是新目标(在新目标区域出现的目标有可能是要离开观测窗口的目标,不过它们的标志位肯定为被跟踪) 。这样判断出来的新目标方向是有出、入之分的。(4)与目标链(MBhl)相对应的还有位置数组(WZmn),用来存放目标链中相应目标的质心位置。最初进行处理时,目标链是空的,在当前帧中若有新目标,则将其横、纵坐标加入到目标链中,并存储在对应的位置数组中,置标记为被跟踪。(5)处理新的当前帧时,首先将目标链

4、 MB 中每个元素(代表前一帧中所有运动目标)依次与当前帧中记录的每个运动目标进行距离计算,求出其中最小距离 d(假设是 MBi与当前帧中运动目标 t 的质心距离)则判断 d 与门限值 的大小,若 d 则说明该最小值不足以证明它们是对应目标,可能 MBi代表的目标已经不在跟踪窗口,则做如下处理:检查对应 MBi代表的目标质心位置的最新记录,如果 MBi1(纵坐标)ymax,可认为目标离开观测窗口,并且方向是进入,则计数器加 1;如果 MBi1next;while ( 当前祯的数据接收完全 )if ( dymax) 离开观测窗口方向是进入 count+;将 WZI中的记录转存到 CC 数组中;c

5、ursorc+;清除 WZI和 MBI中的数据;KWZ0+; 标记空闲数组元素个数KWZKWZ0=I;if(MBI1ymax) 将该新目标加入到目标链中;p.mark=y;else 出错处理,修正;出现既非新目标又非被跟踪目标p=p-next;if (MB00=0) 说明还未有被跟踪目标,目标链为空 依次读取当前祯的数据;p=head;while (当前祯数据未完) if ( p.mark=nMBcursorm1=p.y; 修改最新质心位置MB00+;WZcursormWZcursorm0=p.x;WZcursormWZcursorm0=p.y; WZcursorm0=WZcursorm0+2

6、;p.mark=y;cursorm+;p=p-next; 接收下一祯运动目标的数据结构; 对应 while 循环5 算法优化:其中 ,ymin 和 ymax 的取值要得当,否则会出现差错,这需要反复测试得到合适的值。另外对图象的噪声影响和跟踪过程中出现的不期望的结果如果进行修正,则结果可能会更精确。6 各个函数功能及其输入输出所有函数在程序 track.c 中存放。(1)void Init() 初始化函数,将程序中全局变量数组 WZ 和 MB 初始化,kwhead 是指向空闲数组位置的指针,初始化为 NULL,cursorm 的值表示数组 WZ 和 MB 的最大下标+1;其中 MB00存放正在

7、被跟踪目标个数, WZI0存放第 I 个被跟踪目标的下一个轨迹质心存放位置(在数组 WZ 中) ,countin,countout 分别记录进入和出去的人数;(2)void Addkw(int xh):功能:将释放的数组元素下标加入一个链表中,便于以后分配。输入:刚释放的数组元素的下标 xh;输出:无输出,下次分配时,利用指针头 kwhead 依次分配数组空间。(3)int Delkw():功能:有新的目标出现在运动区域,找到合适的数组下标,将此数组空间分配给该目标。输入:无输入,直接调用该函数,从 kwhead 所指的链表中(为空闲数组下标)依次分配空间。输出:输出要分配的数组下标。(5)

8、int Getxymax(int WZtempNmax):功能:从数组 Wztemp 所记录的运动轨迹中找到最大的横坐标或纵坐标。输入:输入该运动目标的所有运动轨迹记录 Wztemp.输出:输出找到的最大的横坐标或纵坐标(如果定义 Coordinate 则找最大的横坐标,此时运动目标在横轴上运动幅度较大而纵轴上几乎不变)(6) int Getxymin(int WZtempNmax):功能:从数组 Wztemp 所记录的运动轨迹中找到最小的横坐标或纵坐标。输入:输入该运动目标的所有运动轨迹记录 Wztemp;输出:输出找到的最小的横坐标或纵坐标。(7) void HandledataY():如

9、果没有定义 Coordinate(表示目标运动方向是顺着或逆着纵坐标)则运行该程序。功能:处理得到的运动质心,将各质心位置一一对应,找到各个运动目标的运动轨迹,并记数。输入:无输入,数据的得到靠指针的传递,Crhead 是每一帧目标质心位置的头指针,靠指针的移动来读取数据。输出:无输出,直接修改全局变量,得到被跟踪目标的运动轨迹和最新位置,并根据相应的情况修改 countin 和 countout。在该函数中处理了一般情况和一些特殊情况,比如:运动目标在运动区域来回运动、以及停止不动,几帧之后重新运动、丢失一些帧的相关处理等等。(8) void HandledataX()如果定义 Coordinate(表示目标运动方向是顺着或逆着横坐标)则运行该程序。功能,输入和输出同(7) 。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 1

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。