当前位置: 首页 > 编程日记 > 正文

OpenCV运动检测跟踪(blob track)框架组成模块详解

在..\opencv\doc\vidsurv文件夹中有三个doc文件,Blob_Tracking_Modules、Blob_Tracking_Tests、TestSeq,其中Blob_Tracking_Modules必须需要详读的。

FG/BG Detection” module performsforeground/background segmentation for each pixel.

Blob Entering Detection” module uses theresult (FG/BG mask) of “FG/BG Detection” module to detect new blob objectentered to a scene on each frame.

Blob Tracking” module initialized by“Blob Entering Detection” results and tracks each new entered blob.

Trajectory Generation” module performs asaving function. It collects all blobs positions and save each whole blobtrajectory to hard disk when it finished (for example tracking is lost).

Trajectory PostProcessing” moduleperforms a blob trajectory smoothing function. This module is optional and cannot be included in specific pipeline.

OpenCV所提供的这个运动物体跟踪框架只是一个基本的框架,开发者可以根据自己的实际需要对其中的一些模块进行自定义扩展,以满足实际应用中的具体要求。

1、  前景检测模块CvFGDetector:它的输入数据为当前帧图像,输出结果数据为当前帧图像的前景图像(mask)。前景图像是一个和输入的视频帧具有同样大小的二值图像,即如果当前帧中的像素点被判断为运动前景,则前景掩码中相应位置的像素点值为1,否则,相应的像素点值为0。

开发者需要继承CvFGDetector类,并实现其中的纯虚函数。其中在函数Virtual void process(IplImage *pImg){}中写入自己开发的运动目标检测算法。而函数Virtual IplImage *GetMask()是得到前景检测的结果图像,并负责传递到后续的模块中。而函数Virtual void Release()负责一些动态分配内存的释放。

2、  新团块检测模块CvBlobDetector:该模块的作用是检测进入监控范围的新目标的位置和大小。模块的输入是当前帧的前景图像(前景检测模块的结果)和已经检测并标定的团块,输出的结果是新检测到的团块。

开发者可以将虚类实例化,然后将自己的新团块检测算法写入到相应的函数中。

新团块检测模块的处理流程为:首先从前景图像中检测出所有团块,然后将较小的团块(可能是由噪声引起的)和与已经被跟踪团块有重叠的团块丢弃,并对剩余的团块按照大小顺序排列,只保留其中几个比较大的团块(默认为10)。最后利用特定规则筛选,筛选不合标准的团块,将真正的新团块保存到团块列表中。

3、  团块跟踪模块CvBlobTracker:该模块的作用就是在前面两个模块(前景检测模块、新团块检测模块)对运动目标检测的基础上,实现对运动目标的跟踪。此模块的输入为当前帧的前景图像和团块列表以及当前帧图像,输出结果是当前视频帧中所有运动目标的信息,以团块表示(ID,pos,size)。使用新团块检测模块的结果初始化该模块,并跟踪新进入的团块。

开发者根据自己的算法开发相应的跟踪系统时,可以继承该类,然后用自己的算法实现函数Virtural void process(IplImage *pImg,IplImage *pImgFG=NULL)。此虚类中还定义了许多其他的辅助处理函数接口,例如跟踪索引或ID返回指定团块指针的函数,根据索引或ID为指定团块设置参数函数等。

团块跟踪模块的处理流程为:首先从前景图像提取所有团块,并计算团块的质心、宽度和高度;然后对每一个已被跟踪的轨迹,利用卡尔曼滤波器预测该轨迹在当前帧的团块的位置和大小;最后对每个跟踪的轨迹进行处理,寻找离上一帧里的团块最近的当前帧的团块,将此团块添加到跟踪轨迹。

4、轨迹生成模块CvBlobTrackGen:该模块的作用是生成运动目标的运动轨迹,然后将轨迹导出到指定数据库或文件中(如.txt、.csv文件)。该模块的输入是代表当前处理视频帧中各个运动目标的团块,输出结果是存储在指定位置下的轨迹文件。该模块主要是保存操作,它收集所有团块的位置,并在每条轨迹结束时(例如跟踪丢失时或者物体离开场景时)将其保存到硬盘上,同时也可以为每个团块计算一些特征并保存。

5、轨迹后处理模块CvBlobTrackPostProc:该模块的作用是在前一个模块所产生的团块轨迹上做一些处理,例如采用Kalman滤波或平滑滤波处理等。此模块是可选的,可以不包含在处理流程中。它的输入是当前处理图像的所有团块,输出结果是处理后所处理图像的团块列表。

6、轨迹分析模块CvBlobTrackAnalysis:当某个目标跟踪结束后,会产生一个轨迹,CvBlobTrackAnalysis的子类用于对轨迹进行数据分析;

7、跟踪流程模块CvBlobTracterAuto:为了方便开发者开发自己的系统,同时也为了保证系统的模块化设计,OpenCV设计了此虚类描述整个跟踪流程,这个代表整个跟踪流程的虚类将各个模块相互联系起来成为一个有机的整体。本模块将前面提到的五个模块连接起来,形成一个完整的处理流程。

此类中的函数Process负责调用其它各个子模块,首先对背景图像进行更新并检测前景,将获取的前景图像保存于成员变量m_pFG中。获取前景图像后,便依次调用团块跟踪模块(注意:而不是新团块检测模块,这样做的主要目的是先执行跟踪可将当前帧的跟踪结果传入新团块检测模块,以提供新团块检测的准确度。如果团块跟踪在后,则新团块跟踪模块只能与上一帧的团块列表进行比较,新团块检测的准确度将会有所降低),轨迹后处理模块,团块检测模块,轨迹生成模块,轨迹分析模块。

如果想将自己实现的算法加入到以上模块中也很方便,如将背景差分算法加入到前景检测模块中,只要继承CvFGDetector类,然后主要在Process函数中实现自己的算法就可以了。

 

    原始代码中,用红色标注运动目标的表示跟踪不稳定,绿色则表示稳定跟踪。

 

    轨迹生成模块中默认有两种方法实现数据的保存,其中一种是RawTracks方法,每行存放一个运动目标数据,单位为像素,依次为运动目标出现的起始帧,运动目标中心x坐标,运动目标中心y坐标,运动目标宽度,运动目标高度,运动目标中心x坐标,运动目标中心y坐标,运动目标宽度,运动目标高度,……

参考文献:

1、http://www.doc88.com/p-896576154875.html

2、http://blog.csdn.net/wk119911/article/details/7664478

3、http://www.opencv.org.cn/forum/viewtopic.php?t=11128

相关文章:

vi和软件安装

一 vi编辑器简介 vim 全屏幕纯文本编辑器 二 vim使用 1 vi 模式 vi 文件名 命令模式 输入模式 末行模式 命令----》输入 a:追加 i:插入 o:打开 i 命令----》末行 :w 保存 :q 不保存退出 2 命令模式操作 1)…

鸟哥学习笔记---网络安全基础

yum clean [packages|header|all] packages:将已下载的软件文件删除 headers:将下载的软件文件头删除 all:将所有容器数据都删除 添加镜像站点:mirrorlisthttp://ftp.twaren.net/Linux/CentOS/6/os/x86_64/ http://free.nchc.org.tw/drbl-core/i386/RPMS…

使用纯C++实现SQL Server2005 数据库读写操作详细步骤

环境:虚拟机windows xp,vs2008 SQLServer 2005 Express 数据库访问技术采用ADO。 需要安装的软件包括:microsoft_dotnetfxchs2.0.exe、WindowsInstaller-KB893803-v2-x86.exe、SQLEXPR32_CHS.EXE、SQLServer2005_SSMSEE.msi、SQLServer200…

硬核吃瓜!上万条数据撕开微博热搜真相

作者 | 徐麟来源 | 转载自数据森麟(ID:shujusenlin)吃瓜前言关于新浪微博,向来都是各路吃瓜群众聚集之地,大家在微博中可以尽情吃瓜,各种类型的瓜应有尽有,只有你想不到的,没有你吃不到的。微博…

python类的__slots__属性、__del__属性、上下文(__enter__和__exit__)、

常规情况下,类的属性字典是共享的,而实例的字典是独立的。如果一个类的属性较少,但是拥有很多的实例,这些实例的属性字典会占用较多的内存空间。对这样的类来说,为了节省内存空间,可以使用__slots__类变量代…

普通帧,关键帧,空白关键帧的区别

1. 特点 帧——是进行flash动画制作的最基本的单位,每一个精彩的flash动画都是由很多个精心雕琢的帧构成的,在时间轴上的每一帧都可以包含需要显示的所有内容,包括图形、声音、各种素材和其他多种对象。 关键帧——顾名思义,有关键…

Spark入门系列(二)| 1小时学会RDD编程

作者 | 梁云1991转载自Python与算法之美(ID:Python_Ai_Road)导读:本文为 Spark入门系列的第二篇文章,主要介绍 RDD 编程,实操性较强,感兴趣的同学可以动手实现一下。RDD 是弹性分布式数据集(Resilient Dist…

Office2010启动慢的解决方法

以word2010为例: 解决启动慢的问题: 转自:http://www.blue1000.com/bkhtml/2011-12/70698.htm 首先启动Word2010,-->单击进入“文件”选项卡-->选择左边的“选项”按钮-->弹出“word选项”对话框窗口,-->…

如何在 Vue 项目中使用 echarts

数据的重要性我们大家都知道,就算再小的项目中都可能使用几个图表展示,我最近在做项目的过程中也是需要用到图表,最后选择了echarts 图表库,为什么选择 echarts,第一:简单上手容易,第二&#xf…

OpenCV实现在图像中写入汉字

由于OpenCV自带的cvInitFont和cvPutText函数不支持向图像中写入中文,参考http://www.opencv.org.cn/forum/viewtopic.php?t2083 中的方法,在windows7 64位机上用vs2008OpenCV2.3.1实现具体步骤如下: 1、新建一个控制台工程Test,先…

Operations Manager 2012 SP1配置部署系列之(二) SCOM监控SCVMM

你可以使用Operations Mangager连接到VMM上去监控VMM管理的虚拟机和虚拟机的主机的健康和可用性.你还可以监视VMM管理服务器的健康和可用性,VMM数据库服务器、存储库服务器,和矢量调制法的自服务门户web服务器.当你把VMM与Operations Mangager集成、VMM的…

ROS中base_link, odom, fixed_frame, target_frame和虚拟大地图map的关系

前面已经介绍了如何使用URDF建造机器人小车并显示在Rviz的仿真环境里面,但是小车是静止的。下面介绍如何让它在Rviz里面动起来,并理清URDF,TF 和 odom 的关系。 1. ROS中base_link, odom, fixed_frame, target_frame和虚拟大地图map的关系 一般在urdf文件…

谷歌新研究:基于数据共享的神经网络快速训练方法

作者 | Google Brain译者 | 凯隐责编 | 夕颜出品 | AI科技大本营(ID:rgznai100)导读:神经网络技术的普及离不开硬件技术的发展,GPU 和 TPU 等硬件型训练加速器带来的高算力极大的缩短了训练模型需要的时间,使得研究者们…

制作一个简单的linux

我这里是借助宿主机做的一个简单的Linux,我们只要知道一个Linux启动过程需要什么,这里制作就简单的多了。不过没有基础的也没关系,我写的很详细,没有基础的看了我写的步骤只要细心也是会做出来的,我这里的小Linux是很简…

nginx是什么,如何使用

一:nginx是什么? 二:nginx作为网关,需要具备什么?(nginx可以作为web服务器,但更多的时候,我们把它作为网关,因为它具备网关必备的功能:) 反向代理…

OpenCV中Mat数据结构使用举例

#include "stdafx.h"#include <string>#include <iostream>#include <opencv2/opencv.hpp>using namespace std;using namespace cv;int _tmain(int argc, _TCHAR* argv[]){//创建一个用13j填充的 7 x 7 复矩阵-----1Mat M(7, 7, CV_32FC2, Scalar…

贾扬清加盟AI开发者大会!早鸟票抢购正式开启

整理 | 夕颜硬核 AI 技术大会&#xff0c;一年参加一次就够了。9 月 6日-7 日&#xff0c;2019 AI 开发者大会&#xff08;AI ProCon&#xff09;将在北京富力万丽酒店举行&#xff0c;人工领域技术领袖将再次齐聚一堂&#xff0c;探讨过去一年最新的 AI 技术趋势与变化&#x…

基本控件HyperlinkButton控件

HyperlinkButton控件可用来作为超链接按钮&#xff0c;支持页面导航。 若导航到MainPage.xaml&#xff0c;NavigateUri属性指定单击后导航页面的Uri 若导航到网页&#xff0c;必须同时指定TargetName&#xff0c;否则要报错。 <HyperlinkButton Width"200" Heigh…

江湖又现中科大少年班的传说

作者 | ——&#xff0c;夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;近日&#xff0c;《日本经济新闻》的一则报道指出&#xff1a;在左右着企业、国家和地区发展的人工智能领域&#xff0c;中科大少年班的人才支撑着中国的发展。中国自动驾…

[JOISC2014]バス通学

[JOISC2014]バス通学 题目大意&#xff1a; 有\(n(n\le10^5)\)个点和\(m(m\le3\times10^5)\)条交通线路。第\(i\)条交通线路可以让你在时间\(x_i\)从\(a_i\)出发&#xff0c;并在\(y_i\)时到达\(b_i\)。\(q(q\le10^5)\)次询问&#xff0c;每次询问若要在时间\(l_i\)到达\(n\)点…

Windows7在Notepad++中配置Python+OpenCV

1、 从http://notepad-plus-plus.org/下载最新的Notepad6.2.1安装&#xff1b; 2、 从http://www.python.org/下载python-2.7.3.msi安装到D:\Python27目录下&#xff0c;并将D:\Python27添加到环境变量Path中&#xff1b; 3、 打开Notepad&#xff0c;按下F5或者运行(R…

virtualenv 在windows下的绿化方法

virtualenv 在windows下的绿化方法测试环境&#xff1a;windows 7 32 en Python 2.7.3setuptools-0.6c11.win32-py2.7virtualenv-1.9.1-with-pip-1.3.11. f:\> virtualenv my2. 编辑 my/Scripts/activate.bat 前几行中设置VIRTUAL_ENV的那条语句&#xff0c;改为set VIRTUA…

当谈论迭代器时,我谈些什么?

作者 | 樱雨楼编辑 | 豌豆花下猫转载自python猫&#xff08;ID:python_cat&#xff09;导语&#xff1a;之前说过&#xff0c;我对于编程语言跟其它学科的融合非常感兴趣&#xff0c;但我还说漏了一点&#xff0c;就是我对于 Python 跟其它编程语言的对比学习&#xff0c;也很感…

Windows7在Eclipse中配置Python+OpenCV

1. 从http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u2-download-1377129.html下载jdk-7u2-windows-i586.exe&#xff0c;安装到D:\ProgramFiles\Java&#xff0c;并将D:\ProgramFiles\Java\jdk1.7.0_02\bin添加到环境变量中&#xff1b; 2. 从…

Pinterest基于AWS规模化使用Apache Kafka的实践经验

在Pinterest&#xff0c;Apache Kafka被用于为实时流应用程序传输数据、记录日志和可视化监控指标。Pinterest的Kafka托管在AWS上&#xff0c;为了实现复制和高可用性&#xff0c;其安装使用了MirrorMaker和DoctorKafka工具。 Pinterest的技术主管Yu Yang写道&#xff0c;Pinte…

Open×××以及其它IP层×××的完全链路层处理的实现

如果Open也能实现传输模式该有多好&#xff0c;如果基于Open实现的产品能仅仅作为一根昂贵的网线串接在用户网络环境&#xff0c;自动捕获感兴趣流量该有多好&#xff1b;如果它能做到只需要配置一个IP即可工作而无需配置任何路由该有多好。我们知道Open是一个用户态的程序&…

Windows 7 64位机上OpenCV2.4.3的编译、安装与配置

1. 从http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.3/下载OpenCV2.4.3&#xff1b; 2. 将OpenCV-2.4.3.exe放到D:\soft\OpenCV2.4.3文件夹下&#xff0c;解压到当前文件夹下&#xff0c;生成一个opencv文件夹&#xff1b; 3. 下载并安…

有望替代卷积神经网络?微软最新研究提基于关系网络的视觉建模

导语&#xff1a;最近两年&#xff0c;自注意力机制、图和关系网络等模型在NLP领域刮起了一阵旋风&#xff0c;基于这些模型的Transformer、BERT、MASS等框架已逐渐成为NLP的主流方法。这些模型在计算机视觉领域是否能同样有用呢&#xff1f;近日&#xff0c;微软亚洲研究院视觉…

Word 2013无法发布文章到博客园

2018年12月12日突然发现word2013无法发布文章到博客园了&#xff0c; 虽然不常发布博客&#xff0c; 但作为一个强迫症患者&#xff0c; 不折腾好了&#xff0c; 吃肉都不香呀&#xff01; 删除之前的账户&#xff0c; 想重新注册&#xff0c; 居然遇到了灰色对话框&#xff01…

1 sec on Large Judge (java): https://github.com/l...

1 sec on Large Judge (java): https://github.com/leoyonn/leetcode/blob/master/src/q029_substring_of_all_words/Solution.java转载于:https://www.cnblogs.com/codingtmd/archive/2013/03/31/5079017.html