APP下载

基于OpenCV的运动目标检测跟踪实验平台

2016-03-21贾红宾

卷宗 2016年1期
关键词:目标跟踪

贾红宾

摘 要:本文构建了一个基于OpenCV软件的运动目标检测跟踪实验平台,采用CamShift算法对摄像头视野中的运动目标进行实时检测和跟踪,取得较好的效果,为计算机视觉研究奠定基础。

关键词:目标跟踪;CamShift算法;OpenCV

1 引言

随着数字图像处理技术的发展,基于视频信息的目标检测跟踪技术成为当今计算机视觉领域研究的热点,其在安防监控、智能交通机、器人等领域有着广泛应用前景。OpenCV作为一个开源发行的跨平台计算机视觉库,实现了 数字图像处理和计算机视觉方面的很多通用算法,具有简单易用、功能强大、移植方便等优越性能,广泛用于计算机视觉领域研究。本文借助OpenCV计算机视觉库和VC++6.0编程环境,构建了一个运动目标检测跟踪实验平台,对从摄像头采集来的图像数据进行实时分析、处理,从而实现对运动物体的检测与跟踪。

2 OpenCV简介[1]

OpenCV是Intel开源计算机视觉库(Open Computer Vision)的简称。它由一系列 C 函数和少量 C++ 类构成。OpenCV实现了图像处理和计算机视觉方面的很多通用算法。OpenCV 拥有包括300多个C函数的跨平台的中、高层API。它不依赖与其它的外部库,尽管也可以使用某些外部库。OpenCV具有以下特点:

(1)开放源码

(2)基于Intel处理器指令集开发的优化代码

(3)统一的结构和功能定义

(4)强大的图像和矩阵运算能力

(5)方便灵活的用户接口

(6)支持Windows和Linux操作系统

由于有了以上性能特点,OpenCV函数库功能强大,简单易用,移植也很方便,不失为学生和科研人员进行数字图像处理和计算机视觉方面学习和研究的好工具。

3 运动物体的检测与跟踪

3.1 目标检测

目标检测即为从摄像机视野区域的序列图像中将进入该区域的运动物体从场景中提取出来。运动目标检测的算法依照目标与摄像机之间的关系可以分为静态背景下运动检测和动态背景下运动检测[2]。背景差分法、帧间差分法以及光流法等是静态背景下运动目标检测的常用方法。对于动态背景下运动目标检测,其算法要比静态背景下的运动目标检测复杂得多。

3.2 目标跟踪

视频信息中,运动目标跟踪就是在图像序列中寻找与检测目标匹配最相似目标区位置的过程。简单的说,就是在摄像机采集的序列图像中为目标确定在图像区域中的位置。跟踪算法通常有以下四类:基于主動轮廓的跟踪、基于特征的跟踪、基于区域的跟踪和基于模型的跟踪等。算法的精度、鲁棒性和实时性是衡量跟踪效果的主要指标。

4 运动目标检测跟踪的算法实现

4.1 运动检测跟踪算法

平台硬件由PC机和通用摄像机组成,摄像机所带开发包提供二次开发的API接口函数。平台在进行运动物体检测跟踪时所采用的算法是:首先利用“帧差法”检测出初始的运动目标;一旦认为此目标合法,便根据目标在HSI(色调、饱和度、强度)空间中H通道的色调特性,利用“连续适应性均值移动算法(CamShift)”,对目标进行跟踪。

CamShift算法简述如下:首先,在图像HSI空间中计算H通道(色彩通道)分量的1D直方图;接着,利用此1D直方图将原图改建成2D概率分布图;第三步,计算出目标区域的重心;第四部,利用经典的“Mean Shift”算法,不断平移调整窗口中心到与目标重心重合;第五步,将上一帧的窗口大小和中心,作为下一帧Mean Shift算法搜索窗口的初始值,在下一帧中继续Mean Shift运算。

上述运动物体检测和跟踪的算法运算量小,跟踪效果好。只要初始抓取目标无误,并且在色彩空间上目标与背景有一定偏差,视频跟踪便能够达到相当的准确度。更好的一点是,此算法在跟踪同一场境内多个运动目标其中的一个时的效果,是其它同样计算复杂度的算法所难以比拟的。

4.2 VC++6.0编程环境下的实现

目标检测与跟踪的算法程序编写在VC++6.0环境下结合OpenCV进行实现。为了达到良好的实时性能,充分利用CPU资源,本平台采用多线程并发处理模式进行编程,以达到提高程序运行效率的目的[3]。

本平台中,算法程序由两个线程组成:MainThread线程和GetImageThread线程。MainThread线程是算法实现的主线程,主要功能就是利用OpenCV函数库,对从摄像头获取的图像数据进行分析处理,同时,它负责启动GetImageThread线程。GetImageThread线程的主要工作就是循环地从摄像头读取数据放到缓存中,以供主线程分析。在视频采集处理的过程中,GetImageThread线程向缓存中写数据与从缓存中读数据将不可避免地操作同一块缓存。因此,为防止数据读写冲突出错,两线程在操作这块缓存时都必须上锁,可以通过“互斥量”来实现的。此外,为防止主线程重复地分析同一帧图像,要求MainThread线程必须等待GetImageThread线程的一个信号才能进行数据读取和分析。

5 实验结果

经过实验证明,本文构建的基于OpenCV计算机视觉库的运动目标检测跟踪实验平台可以在实时显示图像的基础上,实时检测和跟踪运动目标,并且检测和跟踪都具有较高的鲁棒性。在跟踪过程中,即使目标保持静止,程序也不会丢失对目标的跟踪。以橙色小球检测跟踪实验为例,检测跟踪结果如图1所示:

实践表明,OpenCV使得在PC机上的数字图像处理和计算机视觉处理变得更加简单便捷、高效优化。本平台的构建为计算机视觉研究提供了一个基础平台,对学习和掌握OpenCV、熟悉图像处理技术,特别是运动目标跟踪方面的知识,以及提高Windows操作系统下的C++编程能力等方面,能够起到很大的作用。

参考文献

[1] 布拉德斯基.学习OpenCV [M], 北京:清华大学出版社,2009.

[2] 张娟,毛晓波,等.运动目标跟踪算法研究综述[J],《计算机应用研究》, 2009, 26(12):4407-4410

[3] Jeffery Richter. Windows核心编程[M],北京: 机械工业出版社,2008.

猜你喜欢

目标跟踪
多视角目标检测与跟踪技术的研究与实现
基于改进连续自适应均值漂移的视频目标跟踪算法
基于重采样粒子滤波的目标跟踪算法研究
空管自动化系统中航迹滤波算法的应用与改进
智能视频技术在电力系统领域的应用
基于车牌识别的机混车道视频测速算法