基于OpenCv目标跟踪系统的实现.docx

上传人:b****3 文档编号:3095283 上传时间:2022-11-17 格式:DOCX 页数:14 大小:713.23KB
下载 相关 举报
基于OpenCv目标跟踪系统的实现.docx_第1页
第1页 / 共14页
基于OpenCv目标跟踪系统的实现.docx_第2页
第2页 / 共14页
基于OpenCv目标跟踪系统的实现.docx_第3页
第3页 / 共14页
基于OpenCv目标跟踪系统的实现.docx_第4页
第4页 / 共14页
基于OpenCv目标跟踪系统的实现.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

基于OpenCv目标跟踪系统的实现.docx

《基于OpenCv目标跟踪系统的实现.docx》由会员分享,可在线阅读,更多相关《基于OpenCv目标跟踪系统的实现.docx(14页珍藏版)》请在冰豆网上搜索。

基于OpenCv目标跟踪系统的实现.docx

基于OpenCv目标跟踪系统的实现

基于OpenCV的运动目标跟踪系统的实现

徐俊斌SA11009039

摘要:

运动目标跟踪在军事制导、视觉导航、机器人、智能交通、公共安全等领域有着广泛的应用.例如在车辆违章抓拍系统中,车辆的跟踪就是必不可少的.在入侵检测中,人、动物、车辆等大型运动目标的检测与跟踪也是整个系统运行的关键所在.因此在计算机视觉领域中目标跟踪是一个很重要的分支。

传统的的运动目标检测主要有三种方法:

背景图像差分法,时态差分法和光流法。

然而这几种算法均不能很好地解决目标存在旋转或部分遮挡等复杂情况下的跟踪难题。

本文基于OpenCV设计出改进的运动目标检测与跟踪算法---CAMSHIFT算法来实现运动目标的跟踪,并在VC++编译环境下,利用USB摄像头作为视频采集器,通过观察实验结果可以看出,本文的运动目标检测算法能够正确地检测出视频图像中的运动目标,而且在检测性能上优于传统的检测算法。

关键词:

目标跟踪;OpenCV;CAMSHIFT算法;VC++

0引言

目标跟踪是计算机视觉的一个重要分支,日益广泛应用于科学技术、国防安全、航空、医药卫生以及国民经济等领域。

实现目标跟踪的关键在于完整地分割目标、合理提取特征和准确地识别目标,同时,要考虑算法实现的时间,以保证实时性。

当视频图像中被跟踪目标发生姿态变化,存在旋转或部分遮挡时,简单的灰度模板或者Hausdorff距离匹配一般很难达到实时跟踪目标的要求,出现误匹配或者跟踪丢失的情况,而且跟踪效果较低。

GaryR.Bradski提出的CAMSHIFT(ContinuouslyAdaptiveMeanShift)算法是以颜色直方图为目标模式的目标跟踪算法,可以有效地解决目标变形和部分遮挡的问题,而且运算效率很高。

该文首先详细介绍CAMSHIFT算法,并结合Intel公司开发的开源OpenCV计算机视觉库,实现了运动目标跟踪,并验证了CAMSHIFT算法的有效性以及展现OpenCV计算视觉库的灵活性和优越性。

1CAMSHIFT算法原理

CAMSHIFT算法是利用目标的颜色直方图模型将图像转换为颜色概率分布图,初始化一个搜索窗的大小和位置,并根据上一帧得到的结果自适应调整搜索窗口的位置和大小,从而定位出当前图像中目标的中心位置。

这个算法可以分为三个部分:

1、色彩投影图(反向投影):

(1).RGB颜色空间对光照亮度变化较为敏感,为了减少此变化对跟踪效果的影响,首先将图像从RGB空间转换到HSV空间。

(2).然后对其中的H分量作直方图,在直方图中代表了不同H分量值出现的概率或者像素个数,就是说可以查找出H分量大小为h的概率或者像素个数,即得到了颜色概率查找表。

(3).将图像中每个像素的值用其颜色出现的概率对替换,就得到了颜色概率分布图。

这个过程就叫反向投影,颜色概率分布图是一个灰度图像。

2、MEANSHIFT

MEANSHIFT算法是一种密度函数梯度估计的非参数方法,通过迭代寻优找到概率分布的极值来定位目标。

算法过程为:

(1).在颜色概率分布图中选取搜索窗W

(2).计算零阶距:

计算一阶距:

计算搜索窗的质心:

(3).调整搜索窗大小

宽度为

;长度为1.2s;

(4).移动搜索窗的中心到质心,如果移动距离大于预设的固定阈值,则重

(2)(3)(4),直到搜索窗的中心与质心间的移动距离小于预设的固定阈值,或者循环运算的次数达到某一最大值,停止计算。

关于MEANSHIFT的收敛性证明可以google相关文献。

3、CAMSHIFT

将MEANSHIFT算法扩展到连续图像序列,就是CAMSHIFT算法。

它将视频的所有帧做MEANSHIFT运算,并将上一帧的结果,即搜索窗的大小和中心,作为下一帧MEANSHIFT算法搜索窗的初始值。

如此迭代下去,就可以实现对目标的跟踪。

算法过程为:

(1).初始化搜索窗

(2).计算搜索窗的颜色概率分布(反向投影)

(3).运行MEANSHIFT算法,获得搜索窗新的大小和位置。

(4).在下一帧视频图像中用(3)中的值重新初始化搜索窗的大小和位置,再跳转到

(2)继续进行。

CAMSHIFT算法能有效解决目标变形和遮挡的问题,对系统资源要求不高,时间复杂度低,在简单背景下能够取得良好的跟踪效果。

但当背景较为复杂,或者有许多与目标颜色相似像素干扰的情况下,会导致跟踪失败。

因为它单纯的考虑颜色直方图,忽略了目标的空间分布特性,所以这种情况下需加入对跟踪目标的预测算法。

2计算机视觉库OpenCV简介

OpenCV(opensourcecomputervisionlibrary)诞生于Intel研究中心,是近年来推出的开源、免费的计算机视觉库,利用其所包含的函数可以很方便地实现数字图像和视频处理。

同时利用面向对象的VC++6.0编程工具,采用C/C++语言编写,可以在Linux/Windows/Mac等操作系统上运行,大大提高了计算机的运行速度。

OpenCV还提供了Python、Ruby、MATLAB以及其他语言的接口。

它包含的函数有500多个,覆盖了计算机视觉的许多应用领域。

OpenCV主要用于对图像进行一些高级处理,比如说特征检测与跟踪、运动分析、目标分割与识别以及3D重建等。

与其他计算机视觉工具相比,OpenCV的优越性如表1所示:

表1图像处理、计算机视觉工具比较(IPL,OpenCV,IPP,VisDSK与Matlab)

开发工具

开发单位

应用领域

免费情况

源码公开与否

备注

IPL

Intel

图像处理

Free

不公开

已被并入到IPP

OpenCV

Intel

图像处理、计算机视觉

Free

公开

基于Intel芯片代码优化

IPP

Intel

集成开发环境库

NotFree

不公开

基于Intel芯片代码优化

VisDSK

Microsoft

图像处理

Free

公开

无优化

Matlab

MathWorks

多学科、多种工作平台

NotFree

不公开

速度慢,不易编译成可执行文件

作为一种开源数据库,OpenCV具有如下一些特征:

a)采用C/C++编写,开放源码

b)统一的结构和功能定义

c)独立于操作系统、硬件、图像管理器

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

e)支持Windows和Linux操作系统

f)具有底层和高层的应用开发包

以上OpenCV函数库的功能特点,使得开发人员可以很快掌握图像、视频处理,计算机视觉等方面的设计方法,能够更快的实现开发人员的算法思想,省去了传统设计方法中重复性的底层开发工作。

由于OpenCV良好的移植性和统一的结构及其稳定性,可以缩短系统设计的开发周期,系统运行更稳定。

2.1OpenCV的数据结构

OpenCV设计一些基本数据类型,基本的数据类型包括:

图像类的Iplmage,矩阵类的CvMat,可变集合类的CvSeq,CvSet,CvGraph以及用于多维柱状图的混合CvHistogram。

辅助数据类型包括:

用于表示二维点坐标的CvPoint,用于表示图像宽和高的CvSize等。

2.2OpenCV的函数体系

OpenCV中每个函数的命名都以“CV”开始,然后是该函数的行为及目标。

例如用来创建图像的函数“cvCreatelmage”,载入图像的函数“cvLoadlmage”。

OpenCV是为图像处理及计算机视觉在实际工程中的应用而设计的一个类库,其中所有的函数都由于其在实际应用中所实现的不同的功能而分属不同的类型,主要的函数类型有:

(1)基本的图像处理与分析函数。

这个类型的函数主要用于实现一些基本的图像处理与分析功能,例如图像平滑函数cvSmooth,Sobel,算子cvSobe,Canny,边缘分割函数cvCanny等。

(2)结构分析函数。

包括有轮廓处理函数,几何学函数以及平面细分函数。

(3)运动分析与目标跟踪函数。

包括有用于运动分析与目标跟踪的函数,例如背景重建函数cvAcc,用光流法或动态轮廓模型来实现目标跟踪的函数cvCalcOpticalFlowBM和cvSnakelmage以及卡尔曼滤波函数CvKalman等。

(4)摄像机标定和3D重建函数。

包括有用于摄像机标定,姿态估计以及从两个摄像机进行3D相似重构的函数。

(5)GUI与视频处理函数。

包括有高级图形用户接口highGUI用以实现对图像的载入、显示及保存等基本操作以及用以实现视频输入输出及处理的函数。

3CAMSHIFT算法实现

在OpenCV库中,CvCamShiftTracker类就是用来实现CAMSHIFT算法的,使得进行二次开发变得很简单。

该函数为:

intcvCamShift(constCvArr*prob_image,CvRectwindow,CvTermCriteriacriteria,CvConnectedComp*cornp,CvBox2D*box=NULL);

prob_image:

目标直方图的反向投影

window:

初始搜索窗口

criteria:

确定窗口搜索停止的准则

comp:

生成的结构,包含收敛的搜索窗VI坐标(comp→rect字段)与窗口部所有像

素点的和(comps→area字段)

box:

目标的带边界盒子。

如果非NULL则包含目标的尺寸和方向。

算法流程图如图1所示:

图1:

算法流程图

根据本文的算法,利用Windows平台下的VC++作为编译平台,利用OpenCV函数库,实现运动目标检测跟踪算法。

首先初始化摄像头,读取摄像头数据,用背景提取算法,建立初始背景,然后用当前帧与背景帧差分,提取运动目标,用质心投影算法计算目标的质心,最后用改进的CAMSHIFT算法读取质心投影算法返回的质心信息对目标进行实时跟踪。

程序框图如图2所示。

图2:

程序流程图

利用该函数,在VC6.0开发环境下,就很容易实现CAMSHIFT算法跟踪运动物体,图3是程序控制界面:

图3:

程序控制界面

4实验结果与分析

本实验中,用笔记本自带的USB摄像头来跟踪一运动物体,下图4-图7一系列图像是采用CAMSHIFT算法跟踪运动物体部分图像。

图4:

摄像头拍到的场景图5:

手动选择目标物体

图6:

物体快速移动时跟踪目标图7:

物体发生旋转、变形时跟踪目标

由此可见,基于颜色直方图的CAMSHIFT算法可以有效地解决目标变形和旋转问题,而且运算效率很高,可以实时跟踪运动目标。

5结论

本文在详细分析CAMSHIFT算法原理的基础上,采用Intel公司开发的OpenCV视觉库,在VC6.0开发环境下,实现了运动目标实时跟踪,解决了目标旋转、变形、部分遮挡问题。

同时,可以看到,在开源库OpenCV的基础上,根据自己所开发应用程序所要实现的功能选择所需的库函数,能够大大减少在计算机视觉领域中的开发时间和精力,缩短程序开发的周期。

6附录(程序代码部分)

#include"cv.h"

#include"highgui.h"

#include

#include

IplImage*image=0,*hsv=0,*hue=0,*mask=0,*backproject=0,*histimg=0;

CvHistogram*hist=0;

intbackproject_mode=0;

intselect_object=0;

inttrack_object=0;

intshow_hist=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1