opencv跟踪视频上的目标(理论分析框架)

出处:http://hi.baidu.com/icekeydnet/blog/item/965b25154a19f3dea6ef3ffe.html如前面说到的,OpenCVVS提供了6组算法的接口,分别是:前景检测、新目标检测、目标跟踪、轨迹生成、跟踪后处理、轨迹分析,除了轨迹生成用于轨迹数据的保存以外,其他5个部分都是标准的视频监控算法体系中不可或缺的部分。      OpenC

大家好,又见面了,我是你们的朋友全栈君。

出处:http://hi.baidu.com/icekeydnet/blog/item/965b25154a19f3dea6ef3ffe.html

如前面说到的,OpenCV VS提供了6组算法的接口,分别是:前景检测、新目标检测、目标跟踪、轨迹生成、跟踪后处理、轨迹分析,除了轨迹生成用于轨迹数据的保存以外,其他5个部分都是标准的视频监控算法体系中不可或缺的部分。

       OpenCV在Blob_Tracking_Modules.doc文档中,提供了算法的关系图.

图中唯独缺少了轨迹分析部分,可能是因为在该文档形成的时候轨迹分析部分还没有完成。重新整理后如下。

 

下面针对VS算法体系中的各个算法接口进行介绍,并给出算法的参考文献。

1 算法流程控制(CvBlobTrackerAuto)

       整个视频监控算法流程的设置和数据的传递在接口类CvBlobTrackerAuto的子类中完成,VS中提供了一个范本,就是CvBlobTrackerAuto1,该类是接口CvBlobTrackerAuto的子类,通过查看CvBlobTrackerAuto1::Process(),可以洞悉整个算法的标准流程。当然您也可以在遵循接口CvBlobTrackerAuto的基础上进行扩展。

用户调用接口:

CvBlobTrackerAuto* cvCreateBlobTrackerAuto1(CvBlobTrackerAutoParam1* param);

 

2 前景检测(CvFGDetector):

       CvFGDetector是前景检测类的接口,前景检测一般是指提取固定场景中运动部分的像素,比较常用的一大类方法是背景差。在其子类CvFGDetectorBase中包含了两种背景差方法的实现:

(1)《Foreground Object Detection from Videos Containing Complex Background》2003

(2)《An Improved Adaptive Background Mixture Model for Real-time tracking with shadow detection》 2001

后者就被广泛研究和应用的混合高斯模型背景差(MOG-Mixture Of Gaussians),其开创者是MIT的著名学者Chris Stauffer,可参考文献《Learning patterns of activity using real-time tracking》2000。

       OpenCV中还实现了一种基于码本的背景差方法,《Real-time foreground–background segmentation using codebook model》2005,可以参考例程bgfg_codebook.cpp,只是这种算法还没有整合进VS架构中,这个扩展工作有待完成。

用户调用接口:

CvFGDetector* cvCreateFGDetectorBase(int type, void *param);

 

3 新目标检测(CvBlobDetector):

       CvBlobDetector在前景掩模的基础上检测新进入场景的Blob(块),子类有两个,分别是CvBlobDetectorSimple和CvBlobDetectorCC,参考文献为《Appearance Models for Occlusion Handling 》2001,检测新目标的基本原则是:当连续多帧图像中包含该连通区域,且具有一致的合理的速度。CvBlobDetectorCC与CvBlobDetectorSimple一个最显著的不同在于引入了 CvObjectDetector,用于检测分离的目标块。

用户调用接口:

CvBlobDetector* cvCreateBlobDetectorSimple();

CvBlobDetector* cvCreateBlobDetectorCC();

 

4 目标跟踪(CvBlobTracker):

       目标跟踪部分的子类众多,在这里不一一列举,给出相应的接口及对应的功能。对MeanShift和粒子滤波感兴趣的读者可参考:《Real-time tracking of non-rigid objects using mean shift》2000,《A Tutorial on Particle Filters for Online Nonlinear Non-Gaussian Bayesian Tracking》2002,《Particle Filters for Positioning, Navigation and Tracking》2002。

用户调用接口:

CvBlobTracker* cvCreateBlobTrackerCC();

连通区域跟踪

CvBlobTracker* cvCreateBlobTrackerCCMSPF();

连通区域跟踪 + 基于MeanShift 粒子滤波的碰撞分析

CvBlobTracker* cvCreateBlobTrackerMS();

Mean shift 算法

CvBlobTracker* cvCreateBlobTrackerMSFG();

基于前景的Mean shift 算法

CvBlobTracker* cvCreateBlobTrackerMSPF();

基于Mean shift 权重的粒子滤波

 

5 轨迹生成(CvBlobTrackGen)

       该接口为CvBlobTrackGen,用于目标跟踪结束后,轨迹数据的保存。子类包括CvBlobTrackGen1和CvBlobTrackGenYML,前者以目标轨迹为单位保存整个轨迹的(x,y,sx,sy)数据为文本格式,后者与视频数据同步,以帧为单位保存当前目标信息为YML格式。

用户调用接口:

CvBlobTrackGen* cvCreateModuleBlobTrackGen1();

CvBlobTrackGen* cvCreateModuleBlobTrackGenYML();

 

6 跟踪后处理(CvBlobTrackPostProc)

       跟踪后处理是一个可选模块,主要用于跟踪过程中目标轨迹的平滑,子类众多,这里给出三个主要的用户接口和说明。

用户调用接口:

CvBlobTrackPostProc* cvCreateModuleBlobTrackPostProcTimeAverRect()

轨迹矩形窗时间平均

CvBlobTrackPostProc* cvCreateModuleBlobTrackPostProcTimeAverExp()

轨迹指数窗时间平均

CvBlobTrackPostProc* cvCreateModuleBlobTrackPostProcKalman()

目标方位、尺寸的Kalman滤波平滑

 

7 轨迹分析(CvBlobTrackAnalysis)

       当某个目标跟踪结束后,会产生一个轨迹,CvBlobTrackAnalysis的子类用于对轨迹进行数据分析。子类众多,这里给出六个主要的用户接口和说明。

用户调用接口:

CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistPVS();

5维矢量直方图分析(x,y,vx,vy,state)

CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistP();

2维矢量直方图分析(x,y)

CvBlobTrackAnalysis*  cvCreateModuleBlobTrackAnalysisHistPV();

4维矢量直方图分析(x,y,vx,vy)

CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistSS();

起始点4维矢量直方图分析(startpos,endpos)

CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisTrackDist();

目标轨迹之间比较距离

CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisIOR();

整合上述多种分析方法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127678.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • potPlayer 快捷键[通俗易懂]

    potPlayer 快捷键[通俗易懂]空格:播放/暂停 Enter/Alt+Enter:全屏  c–加速  x–减速  z–恢复原速度,再次则恢复上次速度(类似以前电视机的【回看】功能) Tab:显示当前播放视频信息 H:书签管理器 P:添加书签 M:静音 第一行除【p】外:调整图像色彩、亮度、对比度、饱和度、复位 D:定位上一帧,省去截屏与倒退的烦恼 F:定位下一帧 G:直接输入定位位置 0:…

    2022年5月11日
    172
  • Spring中Responsebody注解的作用[通俗易懂]

    Spring中Responsebody注解的作用[通俗易懂]好长一段时间以来都只是写些测试代码,好久没写项目代码了,以至于sping那套东西日渐生疏了。最近在折腾一个小项目,写了一个controller用来响应ajax请求,结果断点调试发现一直返回"404…notresponse…",折腾了快2小时,一直没想到是注解的问题,万般无赖之下上了度娘,方才如梦初醒,特意记录一下,一来提醒一下自己,二来也让跟我遇到一样问题的朋友少受些折磨。这个注解表示…

    2022年5月8日
    70
  • 能与PowerDesigner媲美的数据库建模工具PDMan[通俗易懂]

    软件生存周期分为:1、可行性分析与项目开发计划2、需求分析3、概要设计4、详细设计5、编码6、测试7、维护而数据库建模工作就发生在“编码”之前,“概要设计”与“详细设计”中。在设计数据库时,对现实世界进行分析、抽象、并从中找出内在联系,进而确定数据库的结构,这一过程就称为数据库建模。当然,一款实用、便利的工具,会使我们的工作效率大大提高,今天我们就来介绍一款能与PowerD…

    2022年4月8日
    251
  • LaTeX详细教程+技巧总结[通俗易懂]

    LaTeX详细教程+技巧总结[通俗易懂]LaTeX技巧总结,包含LaTeX工具,LaTeX模板,LaTeX技巧,LaTeX基础,文章架构,字体、大小和颜色,链接,列表,图片,表格,数学公式,算法(伪代码),代码块,论文写作,等等。

    2022年5月16日
    59
  • RPC是什么意思?[通俗易懂]

    原文地址:http://baike.baidu.com/link?url=ZV6b0T5v04pem1NluXrFwslmhOosGK3YAeKYBfXHF3J-cg96O7CE9j_opGpKCftpBKWqLtY9-LycDAX0ULaLpssX4IIVmK6fSdtZBzz6nbFRsA-vXppB4IV1KBfDu07pY2dgZYTn5A65RkuhPO00bf5ngU6qfujFC14

    2022年4月4日
    137
  • springboot+dynamicDataSource动态添加切换数据源

    springboot+dynamicDataSource动态添加切换数据源

    2020年11月9日
    311

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号