视频中对运动物体跟踪的算法5282

上传人:mg****2 文档编号:122066348 上传时间:2020-02-29 格式:DOC 页数:8 大小:42KB
返回 下载 相关 举报
视频中对运动物体跟踪的算法5282_第1页
第1页 / 共8页
视频中对运动物体跟踪的算法5282_第2页
第2页 / 共8页
视频中对运动物体跟踪的算法5282_第3页
第3页 / 共8页
视频中对运动物体跟踪的算法5282_第4页
第4页 / 共8页
视频中对运动物体跟踪的算法5282_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《视频中对运动物体跟踪的算法5282》由会员分享,可在线阅读,更多相关《视频中对运动物体跟踪的算法5282(8页珍藏版)》请在金锄头文库上搜索。

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

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

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

4、被跟踪。(5)处理新的当前帧时,首先将目标链MB中每个元素(代表前一帧中所有运动目标)依次与当前帧中记录的每个运动目标进行距离计算,求出其中最小距离d(假设是MBi与当前帧中运动目标t的质心距离)则判断d与门限值的大小,若d则说明该最小值不足以证明它们是对应目标,可能MBi代表的目标已经不在跟踪窗口,则做如下处理:检查对应MBi代表的目标质心位置的最新记录,如果MBi1(纵坐标)ymax,可认为目标离开观测窗口,并且方向是进入,则计数器加1;如果MBi1 ymin,目标离开观测窗口,但方向是出去,计数器不动作。(6)设置数组CCmn,存储离开观测窗口并且方向是进入的运动目标质心位置记录,象(5

5、)中的MBi若是进入就将对应位置记录WZi存放在数组CC中,同时清除MBi中的特征值和WZi中的质心记录。这里可以另外设置一个空闲位置数组KWZi,记录被清空的WZ中的位置,每次有新目标到来,须分配数组空间就先检查是否有被清空的记录。(7)直至目标链中的目标检查完毕,则查看当前祯中的各运动目标,如有未被标记的,且在新目标区域中则将其加入到目标链中,标记设为已被跟踪。(8)接收新的当前祯,继续如此处理。处理过程中可能出现的几个问题为:(1) 如果当前祯中一个运动目标t已经被标记,但是当处理到目标链中下一个目标是最小距离的仍是t,说明目标链中有两个目标都与t的距离最小,这样就需要调整。(2) 如果

6、门限值设置不当,则可能产生误判。(3) 如果目标链中所有目标检查完毕,但是在当前祯中有未被标记并且不在新目标区域,即不是新目标,又不是被跟踪目标的相应目标,则有差错出现,可能是噪声。(4) 是否将离开观测窗口并且运动方向是出去的目标质心位置存储在数组CC中。4算法实现数据结构:a. 设置数组WZmn用来存放跟踪过程中被跟跟踪目标的各时刻质心位置,WZi0存放下次填写质心记录的位置,从WZ01开始记录横坐标。b. 设置数组MBM2存放目标链,记录被跟踪目标的最新质心位置,MB00存放被跟踪目标的个数,MB01闲置。c. 设置数组CChl存放离开观察窗口已跟踪完毕的各目标的质心位置,供若质心位置曲

7、线,提高精度用。d. 设置KWZm记录清空的WZ数组序号;KWZ0表示清空的WZ数组元素的个数,若再次分配数组空间给新目标时,先检查KWZ数组中KWZ0是否为0,若为0,则分配新数组空间,否则重新利用被清空的数组位置e. 设置门限值,ymax,ymin.f.接收到的运动目标为一个struct初始化:For (I=0;Im;I+) WZI0=1; MBI0=-1; 置初值;MBI1=-1;for(I=0;In;I+)CCI0=-1; 初始化数组CC,初始化数组KWZ;KWZ0=0; 初始化时没有清空的数组MB00=0;记录目标链中目标的数目Cursorm=1; 记录目标链中最末位置Cursorc

8、=0; 记录数组CC中最末位置Count=0; 计数器While ( 有下一祯数据传送 ) for( I=1;Icursorm;I+) 依次对目标链各目标进行处理 x=MBI0;y=MBI1;p=head; p指向一祯数据的头do 接收当前祯的数据;d=sqrt(pow(x-p.x,2)+pow(y-p.y,2);if(dnext;while ( 当前祯的数据接收完全 )if ( dymax) 离开观测窗口方向是进入 count+;将WZI中的记录转存到CC数组中;cursorc+;清除WZI和MBI中的数据;KWZ0+; 标记空闲数组元素个数KWZKWZ0=I;if(MBI1ymin) 离开

9、观测窗口方向是出去 清除WZI和MBI;KWZ0+;KWZKWZ0=I;目标链中的所有目标处理结束且目标链不空则: 判断当前祯中各运动目标的标记;p=head; 重新指向一祯的开头while ( p!=null) if(p.mark=n)if(p.yymax) 将该新目标加入到目标链中;p.mark=y;else 出错处理,修正;出现既非新目标又非被跟踪目标p=p-next;if (MB00=0) 说明还未有被跟踪目标,目标链为空 依次读取当前祯的数据;p=head;while (当前祯数据未完) if ( p.mark=n&(p.y ymax) 在新目标区域 MBcursorm0=p.x;M

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

11、序中全局变量数组WZ和MB初始化,kwhead是指向空闲数组位置的指针,初始化为NULL,cursorm的值表示数组WZ和MB的最大下标+1;其中MB00存放正在被跟踪目标个数,WZI0存放第I个被跟踪目标的下一个轨迹质心存放位置(在数组WZ中),countin,countout分别记录进入和出去的人数;(2)void Addkw(int xh):功能:将释放的数组元素下标加入一个链表中,便于以后分配。输入:刚释放的数组元素的下标xh;输出:无输出,下次分配时,利用指针头kwhead依次分配数组空间。(3)int Delkw():功能:有新的目标出现在运动区域,找到合适的数组下标,将此数组空间

12、分配给该目标。输入:无输入,直接调用该函数,从kwhead所指的链表中(为空闲数组下标)依次分配空间。输出:输出要分配的数组下标。(5) int Getxymax(int WZtempNmax):功能:从数组Wztemp所记录的运动轨迹中找到最大的横坐标或纵坐标。输入:输入该运动目标的所有运动轨迹记录Wztemp.输出:输出找到的最大的横坐标或纵坐标(如果定义Coordinate则找最大的横坐标,此时运动目标在横轴上运动幅度较大而纵轴上几乎不变)(6) int Getxymin(int WZtempNmax):功能:从数组Wztemp所记录的运动轨迹中找到最小的横坐标或纵坐标。输入:输入该运动目标的所有运动轨迹记录Wztemp;输出:输出找到的最小的横坐标或纵坐标。(7) void HandledataY():如果没有定义Coordinate(表示目标运动方向是顺着或逆着纵坐标)则运行该程序。功能:处理得到的运动质心,将各质心位置一一对应,找到各个运动目标的运动轨迹,并记数。输入:无输入,数据的得到靠指针的传递,Crhead是每一帧目标质心位置的头指针,靠指针的移动来读取数据。输出:无输出,直接修改全局变量,得到被跟踪目标的运

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

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号