OpenCV 视频监控(Video Surveilance)的算法体系
如前面说到的,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();
整合上述多种分析方法
OpenCV 视频监控(Video Surveilance)的算法体系的更多相关文章
- VSAM:视频监控系统 A System for Video Surveillance and Monitoring
VSAM(VideoSurveillance and Monitoring)视频监控系统 Robotics Institute CMU 1:引言 2:试验床介绍 3:基本的视频分析算法:运动目标检测, ...
- opencv 视频处理相关
包含视频格式知识(编解码和封装格式):如何获取视频信息及视频编解码格式:opencv读取及保存视频,及opencv fourcc编码格式 一.基础知识 视频的编解码格式和封装格式 参考如山似水 视频编 ...
- 【miscellaneous】监狱智能视频监控系统设计解决方案
监狱智能视频监控系统设计解决方案 一.系统概况 随着司法监狱管理系统内视频监控系统的日益发展,现有的被动式人工监控这一传统模式已无法满足新形势下的监管工作需求,尤其是现在靠轮询的视频监控方式,无法对突 ...
- GIS和视频监控的集成
本文讨论了使用增强现实(AR)技术的三维(3D)地理信息系统(GIS)和视频监视系统的集成.进行这种集成的动机是要克服常规视频监视系统面临的问题.关于哪个摄像机当前监视此类系统中哪个区域的明确信息:因 ...
- H5 的直播协议和视频监控方案
H5 的直播协议和视频监控方案 一.流媒体主要实现方式 二.流媒体技术 2.1 流媒体 2.2 直播 2.3 流协议 2.3.1 HLS 协议 2.3.2 RTMP 协议 2.3.3 RTSP 协议 ...
- 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(一)开放源代码
本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 开源倾情奉献系列链接 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(一)开放源代码 开源倾 ...
- 基于.NET打造IP智能网络视频监控系统
开源倾情奉献:基于.NET打造IP智能网络视频监控系统(一)开放源代码 开源倾情奉献系列链接 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(一)开放源代码 开源倾情奉献:基于.NET打造 ...
- 开源视频监控系统:iSpy
iSpy是一个开源的视频监控软件,目前已经支持中文.自己用了一下,感觉还是很好用的.翻译了一下它的介绍. iSpy将PC变成一个完整的安全和监控系统 iSpy使用您的摄像头和麦克风来检测和记录声音或运 ...
- Qt编写视频监控画面分割界面(开源)
其实qt应用在安防领域还是蛮多的,尤其是视频监控系统,但是网上几乎没有看到qt做的最基础的视频监控画面分割的demo,今天特意花几分钟提取出来,开源放出来.欢迎大家多多点赞!源码下载:点击打开链接 运 ...
随机推荐
- java转义符的一些用法
那么这里在列上一些转义字符 \\ 反斜杠 \t 间隔 ('\u0009')\n 换行 ('\u000A')\r 回车 ('\u000D')\d 数字 等价于 [0-9]\D 非数字 等价于 [^0-9 ...
- AppDomain.CurrentDomain.BaseDirectory
在winform中的OnPaint事件中,AppDomain.CurrentDomain.BaseDirectory得到的是下面这个路径 C:\Program Files (x86)\Microsof ...
- Maven——安装配置
MAVEN 一.介绍:(待填) 二.下载:http://maven.apache.org/download.cgi(官网下载) 选择二进制的zip文件,这种的可直接使用. 三.环境配置 1.前提条件: ...
- JavaWeb -- Servlet Filter 过滤器
1. Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter.通过Filter技术,开发人员可以实现用户在 ...
- Linux ls命令参数详解
-a -- 全部(all).列举目录中的全部文件,包括隐藏文件(.filename).位于这个列表的起首处的 .. 和 . 依次是指父目录和你的当前目录. -l -- 长(long).列举目 ...
- UOJ222 【NOI2016】区间
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- 5.2 Selenium2环境搭建
1.Java开发环境的搭建 本课程中将使用Java语言编写Selenium自动化测试脚本,在Eclipse集成开发环境中运行. (1)jdk的安装 a.下载 官网下载,http://www. ...
- MRC与ARC混合编程的编译器标记
如果是MRC项目创建ARC源文件,给这个源文件加上 -fobjc-arc 的编译器标记, 如果是ARC项目创建MRC源文件,给这个源文件加上 -fno-objc-arc 的编译器标记. 步骤: 1. ...
- C#中的线程(四)高级话题
C#中的线程(四)高级话题 Keywords:C# 线程Source:http://www.albahari.com/threading/Author: Joe AlbahariTranslato ...
- nginx RTMP FFmpeg 视频直播
/**************************************************************************** * nginx RTMP FFmpeg 视频 ...