zoukankan      html  css  js  c++  java
  • OpenCV 视频监控(Video Surveilance)的算法体系

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

           OpenCV在Blob_Tracking_Modules.doc文档中,提供了算法的关系图,如下。OpenCV 视频监控(Video Surveilance)的算法体系 - 海水和火焰 - 视频监控 形态学 OpenCV

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

    OpenCV 视频监控(Video Surveilance)的算法体系 - 海水和火焰 - 视频监控 形态学 OpenCV
     

    下面针对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();

    整合上述多种分析方法

  • 相关阅读:
    idea 连接 hive
    css img自适应
    测试视频文件
    ubuntu不显示ipv4地址的解决办法
    nginx path捕获
    union all两个结果集报ORA-12704: character set mismatch错误
    润乾报表试用指南
    报表工具对比之润乾报表与锐浪报表对比
    项目微管理36
    docker远程调用
  • 原文地址:https://www.cnblogs.com/alan666/p/8312341.html
Copyright © 2011-2022 走看看