运动物体跟踪算法的设计与实现论文_第1页
运动物体跟踪算法的设计与实现论文_第2页
运动物体跟踪算法的设计与实现论文_第3页
运动物体跟踪算法的设计与实现论文_第4页
运动物体跟踪算法的设计与实现论文_第5页
已阅读5页,还剩40页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

运动物体跟踪算法的设计与实现 摘要:运动目标的检测与跟踪是计算机视觉和图像编码领域的重要研究之一,在军事、 医学和科研等领域都有广泛的应用。运动目标检测与跟踪算法的设计直接影响跟踪效 果的准确性和稳定性,研究设计鲁棒性好、精确度高的跟踪算法一直是计算机视觉领 域的研究热点之一。 本文主要设计实现基于 OpenCV 的运动物体跟踪算法。论文首先概述了系统开发环 境和运动物体跟踪算法;然后论文详细描述了基于 OpenCV 实现运动物体跟踪算法的数 据结构;其次重点讨论了如何设计实现判断每一个像素是前景还是背景的前景检测模 块、使用前景检测的结果检测新进入场景的新团块检测模块、团块跟踪模块、轨迹生 成、轨迹后处理以及物体跟踪流程模块等;最后论文对运动物体跟踪算法进行了初步 理论分析。 关键词:图像处理;运动跟踪;目标检测;Kalman 滤波器 DesignDesign andand ImplementationImplementation ofof thethe MotionMotion ObjectObject TrackingTracking AlgorithmsAlgorithms Abstract: Motion object detection and tracking is the main research field in computer vision and image coding, which has been widely applied in military,medicine and scientific research etc. The accuracy and stability of tracking effect depend on the design of algorithms to a great extent. It is still one of research hot point to research design an accurate and robust algorithm in computer vision. This article main design realizes based on the OpenCV mobile track algorithm. The paper has first outlined the system development environment and the mobile track algorithm; Then the paper described in detail has realized the mobile track algorithm construction of data based on OpenCV; How did next discuss has designed realizes judges each picture element is with emphasis the prospect or the background prospect examination module, the use prospect examination result examination enters the scene newly the new briquetting examination module, the briquetting track module, the path production, the path post-processing as well as the object track flow module and so on; Finally the paper has carried on the preliminary theoretical analysis to the mobile track algorithm. Keywords: Image Processing,Motion Tracking,Object Detection,Kalman Filter I 目录 序言 .1 第 1 章 系统开发环境概述 .2 1.1 VISUAL C+ .2 1.1.1 Visual C+的特点 .2 1.1.2 VC+的组成 .2 1.2 OPENCV .3 1.2.1 OpenCV 的特点.3 1.2.2 OpenCV 的功能.4 1.2.3 OpenCV 模块.4 第 2 章 运动物体跟踪算法概述 .5 2.1 运动物体跟踪算法研究的背景和发展现状 .5 2.1.1 论文的背景及意义 .5 2.1.2 运动物体跟踪算法的研究和发展现状 .5 2.2 运动跟踪系统的技术概述 .7 第 3 章 运动物体跟踪算法具体描述 .8 3.1 背景统计量的累积 .8 3.2 运动模板 .9 3.3 对像跟踪 .11 II 3.4 光流 .14 3.5 预估器 .16 第 4 章 运动物体跟踪算法正确性测试 .20 4.1 基本结构 .20 4.1.1 团块 .20 4.1.2 团块列表 .21 4.1.3 团块跟踪参数 .21 4.2 模块描述 .22 4.2.1 前景检测模块 .22 4.2.2 新团块检测模块 .23 4.2.3 团块跟踪模块 .24 4.2.4 轨迹生成模块 .26 4.2.5 轨迹后处理模块 .27 4.2.6 跟踪流程模块 .29 4.3 程序运行结果与分析 .30 第 5 章 运动物体跟踪性能初步理论分析 .31 5.1 打印帮助 .31 5.2 分析输入参数 .31 5.3 打开视频 .32 5.4 打印参数 .32 5.5 创建所需要的模块 .33 5.6 处理视频 .34 III 结束语 .35 参考文献 .36 致谢 .38 江苏技术师范学院毕业设计说明书(论文) 第 1 页 共 38 页 运动物体跟踪算法的设计与实现 序言 随着计算机技术、通信技术、图像处理技术的不断发展,计算机视觉的应用领域 已经迅速拓宽,视频图像中运动物体的检测与跟踪已经成为该领域一个非常活跃的课 题。无论在民用还是军用方面,运动物体跟踪系统都获得了广泛的应用,例如在交通 监控、天文观测、医学研究、军事导航、运动分析等领域都有很高的实用价值。尤其 在军事应用中,运动物体跟踪技术已被成功地用于武器的成像制导、侦察和监视方面。 运动目标检测与跟踪处于整个视觉监视系统的最底层,是各种后续高级处理如目 标分类、行为理解等的基础。运动目标检测是指从视频流中实时提取目标,一般是确 定目标所在区域和颜色特征等。目标检测的结果是一种“静态”目标前景目标, 由一些静态特征所描述。运动目标跟踪则指对目标进行连续的跟踪以确定其运动轨迹。 受跟踪的目标是一种“动态”目标运动目标,与前景目标相比,描述它的特征中 多了动态特征(如运动参数等) 。 运动物体跟踪算法是为了实现对视频中运动物体的跟踪。算法主要通过提取视频 中的图像帧序列,运用数字图像分析技术,识别出运动物体,进而对运动物体进行跟 踪,最终得到运动物体的轨迹。运动物体跟踪算法是智能视频监控的重要组成部分, 设计实现该算法具有一定的实用价值。 江苏技术师范学院毕业设计说明书(论文) 第 2 页 共 38 页 第 1 章 系统开发环境概述 在 Windows 平台上使用 VC 开发环境,综合运用数字图像处理技术,基于 OpenCV 设计实现运动物体跟踪算法。 1.1 Visual C+ 1.1.1 Visual C+的特点 Visual C+是 Microsoft 公司推出的开发 Win32 环境程序,面向对象的可视化集 成编程系统。从功能上来看,它除了继承了 MFC1.0 的全部功能外,还增加了以下新 的特性: 1)全面支持文件的 Open、Save 和 Save As 等菜单项,并且采用了最近才使用的 文件列表形式。 2)可以方便地进行打印和打印预显。 3)支持滚动窗口和切分窗口(Splitter Window) 。 4)支持工具条(Toolbar)和状态条(Status bar) 。 5)能够处理 Microsoft Visual Basic 控制。 6)能够方便地实现上下文相关帮助(Context Sensitive Help) 。 7)能够自动处理进入对话框中的数据。 8)实现 OLE 的接口更加简单、方便。 因此,它现在已经成为开发 Win32 环境程序,包括图像处理程序的主要开发工具。 1.1.2 VC+的组成 Visual C+包含了两套完整的 Windows 应用开发系统。由以下的部分组成: 1)Visual 工作平台和创建过程:这是一个运行于 Windows 上的交互式开发环境, 它是直接从 Microsoft QuickC for Windows 演化而来的。 2)App Studio 资源编辑器:堪称是 Windows 应用,同时它本身就是通过使用 Visual C+工具及类库编写而成的,可以对自身的资源进行编辑。 江苏技术师范学院毕业设计说明书(论文) 第 3 页 共 38 页 3)C/C+编译器:Visual C+的编译器可以处理 C 和 C+源代码,它通过源代码文 件后缀来识别代码本身所使用的语言。 4)连接器:为了生成 EXE 文件,Visual C+的连接器需要对编译器所生成的 OBJ 文件进行处理。 5)资源编译器:在编译状态和联编状态都要用到资源编译器。 6)调试器:为了能够对程序进行调试,在创建程序时必须设置编译器和连接器相 应的选项以便产生相应的可调试信息。 7)AppWizard:它会按照用户通过对话框指定的特性、类名及源代码文件名来产 生 Windows 应用的工作构架。 8)ClassWizard:能够给出原型、函数体以及将消息同应用框架相联系的相应代 码。 9)源程序浏览器:能够使人们从类或函数的角度来了解程序。 10)联机帮助:有关 WindowsSDK 参考手册及类库参考手册的全部内容都包含在 Visual C+的联机帮助中。 11)Windows 诊断工具:用于对手工编制的 make 文件进行处理的 NMAKE 程序。 1.2 OpenCV OpenCV这一名称包含了Open和Computer Vision两者的意思。实际上,Open指 Open Source(开源,即开放源代码) ,Computer Vision则指计算机视觉。OpenCV 是Intel资助的开源计算机视觉库。它由一系列C函数和少量C+类构成,实现了图 像处理和计算机视觉方面的很多通用算法。 OpenCV拥有包括300多个C/C+函数的跨平台的中、高层 API。它不依赖与其它 的外部库,尽管也可以使用某些外部库。 1.2.1 OpenCV 的特点 OpenCV 作为开放的数字图像处理和计算机视觉软件平台,有以下特点: 1)开放 C 源码。 2)基于 Intel 处理器指令集开发的优化代码。 3)统一的结构和功能定义。 江苏技术师范学院毕业设计说明书(论文) 第 4 页 共 38 页 4)强大的图像和矩阵运算能力。 5)方便灵活的用户接口。 6)同时支持 MS-Windows 和 Linux 平台。 1.2.2 OpenCV 的功能 1)对图像数据的操作,包括分配、释放、复制、设置和转换数据。 2)对图像和视频的输入输出,指文件和摄像头作为输入,图像和视频文件作为输 出。 3)具有对矩阵和向量的操作以及线性代数的算法程序,包括矩阵积、解方程、特 征值以及奇异值等。 4)可对各种动态数据结构,如列表、队列、集合、树和图等进行操作。 5)具有基本的数字图像处理能力,如可进行滤波、边缘检测、角点检测、采样与 差值、色彩转换、形态操作、直方图和图像金字塔等操作。 6)可对各种结构进行分析,包括连接部件分析、轮廓处理、距离变换、各种距的 计算、模板匹配、Hough 变换、多边形逼近、直线拟合、椭圆拟合和 Delaunay 三角划 分等。 7)对摄像头的定标,包括发现与跟踪定标模式、定标、基本矩阵估计、齐次矩阵 估计和立体对应。 8)对运动的分析,如对光流、运动分割和跟踪的分析。 9)对目标的识别,可采用特征法和隐马尔可夫模型(HMM)法。 10)具有基本的 GUI 功能,包括图像与视频显示、键盘和鼠标事件处理及滚动条 等。 11)可对图像进行标注,如对线、二次曲线和多边形进行标注,还可以书写文字。 1.2.3 OpenCV 模块 OpenCV 包括以下几个模块,其具体功能是: 1)CV:主要的 OpenCV 函数。 2)CVAUX:辅助的(实验性的)OpenCV 函数。 3)CXCORE:数据结构与线性代数支持。 4)HIGHGUI:图像界面函数。 江苏技术师范学院毕业设计说明书(论文) 第 5 页 共 38 页 5)ML:机器学习,包括模式分类和回归分析等。 6)CVCAM:负责读取摄像头数据的模块。 江苏技术师范学院毕业设计说明书(论文) 第 6 页 共 38 页 第 2 章 运动物体跟踪算法概述 2.1 运动物体跟踪算法研究的背景和发展现状 2.1.1 论文的背景及意义 近年来,计算机视觉的研究重点已逐渐从对静态图像的研究过渡到对动态图像序 列的研究上面,多媒体技术和通讯技术一直将运动目标,例如人和车辆,作为一项重 要的考虑因素。 视频数据库、虚拟现实、智能房间、智能桌椅以及安全监控等技术的应用都需要 对运动目标进行检测和跟踪,并对运动目标的行为做出解释。因此,对运动目标的检 测与跟踪也成了视觉研究中的一个重要问题。 运动物体跟踪算法是为了实现对视频中运动物体的跟踪。算法主要通过提取视频 中的图像帧序列,运用数字图像分析技术,识别出运动物体,进而对运动物体进行跟 踪,最终得到运动物体的轨迹。 2.1.2 运动物体跟踪算法的研究和发展现状 运动目标检测与跟踪处于整个视觉监视系统的最底层,是各种后续高级处理如目 标分类、行为理解等的基础。运动目标检测是指从视频流中实时提取目标,一般是确 定目标所在区域和颜色特征等。目标检测的结果是一种“静态”目标前景目标, 由一些静态特征所描述。运动目标跟踪则指对目标进行连续的跟踪以确定其运动轨迹。 受跟踪的目标是一种“动态”目标运动目标,与前景目标相比,描述它的特征中 多了动态特征(如运动参数等)。 1 1、运动目标检测、运动目标检测 运动目标跟踪是对摄像机得到的图像序列进行视觉上的分析处理,其主要的目的 是实时地观测被监视场景的运动目标,并分析描述它们的行为。运动目标的提取主要 包括运动检测以及目标提取两个步骤,其中运动检测处于整个视觉监视系统的最底层, 是各种后续高级处理如目标分类,行为理解等的基础。运动检测可以分为静止背景下 的运动检测和运动背景下的运动检测。对于静止背景下序列图像的变化检测,主要有 江苏技术师范学院毕业设计说明书(论文) 第 7 页 共 38 页 三种方法:连续帧间差分法、背景差分法和光流场法。连续帧间差分法对于动态环境 有很好的适应性,在运动目标和背景有明显区别的时候且目标运动较快的时候比较有 效,算法简单,计算复杂度低,但不能完全提取出目标的所有相关点。背景差分法能 够较完整地提取目标点,对于背景较为稳定的情况,检测效果好。对于背景变化的场 景,例如光照、背景的抖动、背景中新物体的加入等情况比较敏感。光流场法,基于 光流的变化检测采用了运动目标随时间变化的光流特性,虽然能够直接用于摄像机运 动下的目标检测,但大多数光流方法运算量较大,若没有特定的硬件支持一般很难满 足实时处理的要求。在实时跟踪系统中,人们更热衷于使用帧差法或背景减法来获得 期望的结果。 2 2、运动目标跟踪、运动目标跟踪 所谓运动目标跟踪,就是在运动目标检测的基础上,利用目标有效特征,选择使 用适当的匹配算法,在序列图像中寻找与目标模板最相似的图像的位置,简单的说就 是给目标定位。在实际应用中,运动目标跟踪不仅可以提供目标的运动轨迹和准确定 位目标,为下一步的目标行为分析与理解提供了可靠的数据来源,而且也可以为运动 目标检测提供帮助。 首先,从算法过程上看,运动目标的跟踪方法主要分为基于图像帧内信息的跟踪 和基于帧内帧间信息的跟踪两种。 基于图像帧内信息的跟踪方法是对每帧图像信号进行单独处理,利用目标信号在 二维空间中的特征将目标从背景中分割出来,完成对目标的定位,其优点是仅对当前 帧进行计算,因此不会造成跟踪过程中的误差累积。根据实现过程的不同,该方法又 可以分为两类:形心跟踪和模板匹配跟踪。形心跟踪是利用目标检测方法将目标从背 景中分割出来,计算目标的形心(重心)在图像中的位置,以达到目标定位的目的。 形心跟踪法的优点是过程简单,计算效率高,但对于复杂背景中的目标的检测识别困 难较大。模板匹配跟踪法首先确定目标模板,然后将该模板在图像中逐点滑动进行相 关匹配,得到相关曲线,使得相关曲线达到最大值,即相关性最大的区域就是目标的 当前区域。模板匹配法的优点是可靠性较高,但是计算量较大,而且要对目标模板进 行定期更新。 基于帧内帧间相关性的跟踪方法除了利用目标信号在帧内的空间特征外,还 利用了它在时间域上的运动特性,即帧与帧之间的相关性,对目标在后继帧中的位置 和运动状态信息进行预测和更新。 江苏技术师范学院毕业设计说明书(论文) 第 8 页 共 38 页 2.2 运动跟踪系统的技术概述 一个完整的运动目标跟踪系统及过程可分为下面几步:图像预处理、目标检测与 分割、目标特征提取与识别、目标运动状态分析与跟踪。图 2-1 所示是一个运动目标 跟踪系统框图。 图 2-1 运动目标跟踪系统框图 现对这几部分分别介绍如下: (1)图像预处理。图像的预处理是将成像系统所得到的图像进行适当的处理,使得 处理后的图像更易于进行检测和分割。预处理通常是为了降低图像噪声、干扰和增强 目标、背景的对比度。针对不同的成像方法得到的图像,处理方法也不尽相同。 (2)目标检测与分割。目标检测和分割一直是图像处理领域中的重点和难点。目标 检测是对可能是目标的区域定位;目标分割是将目标从背景中分离出来。在绝大多数 检测和分割技术中,两者是不可分离的。在目标识别和跟踪系统中,对图像分割的质 量也有很大的依赖性。 (3)目标特征提取与识别。目标识别是目标跟踪中的重要一环,而特征提取是目标 识别中的关键技术。特征提取的优劣直接影响到目标识别以及跟踪系统的性能。目标 的特征可分为形状、灰度、边缘、区域、纹理等。不同的特征,对应不同的提取方法。 一般地,特征提取方法必须满足一些必要准则:不变性、唯一性和稳定性。 (4)目标运动状态分析与跟踪。经过目标识别环节后,就可以得到感兴趣的目标区 域,进而计算出图像中目标的形心位置。对序列图像而言,就可以描绘出目标大致的 运动轨迹,估算出运动速度和方向等参数信息。根据这些运动参数以及帧间的相关性, 预测下一帧或几帧中目标的位置,完成跟踪过程。 现有的跟踪算法多种多样,但最基本的两个要求是跟踪的可靠性和实时性。在应 用中,人们往往根据不同的目标特性和实际需求,选择不同的跟踪算法。 图像预处 理 目标检测 与分割 目标特征提取 与识别 视频帧 结果 目标运动 状态分析 与跟踪 江苏技术师范学院毕业设计说明书(论文) 第 9 页 共 38 页 第第 3 3 章章 运动物体跟踪算法具体描述运动物体跟踪算法具体描述 3.1 背景统计量的累积 1、Acc 功能:将帧叠加到累积器(accumulator)中。 格式:void cvAcc(const CvArr* image,CvArr* sum,const CvArr* mask=NULL ); 说明:函数cvAcc将整个图像image或某个选择区域叠加到sum中,其定义是: sum(x,y)=sum(x,y)+image(x,y) if mask(x,y)!=0 2、SquareAcc 功能:叠加输入图像的平方到累积器中。 格式:void cvSquareAcc(const CvArr* image,CvArr* sqsum,const CvArr* mask=NULL); 说明:函数cvSquareAcc叠加输入图像image或某个选择区域的二次方,到累积器sqsum 中,其定义是:sqsum(x,y)=sqsum(x,y)+image(x,y)2 if mask(x,y)!=0 3、MultiplyAcc 功能:将两幅输入图像的乘积叠加到累积器中。 格式:void cvMultiplyAcc(const CvArr* image1,const CvArr* image2,CvArr* acc,const CvArr* mask=NULL); 说明:函数cvMultiplyAcc叠加两个输入图像的乘积到累积器acc中,其定义是: acc(x,y)=acc(x,y)+image1(x,y)*image2(x,y) if mask(x,y)!=0 4、RunningAvg 功能:更新加权累加图像。 格式:void cvRunningAvg(const CvArr* image,CvArr* acc,double alpha,const CvArr* mask=NULL); 江苏技术师范学院毕业设计说明书(论文) 第 10 页 共 38 页 说明:函数cvRunningAvg计算输入图像image的加权和以及累积器acc,使得acc成为帧 序列的一个加权平均,其定义是:acc(x,y)=(1-)*acc(x,y) + *image(x,y) if mask(x,y)!=0 其中,(alpha)调节更新速率(即累积器以多快的速率忘掉前面的帧)。 例如:利用背景建模检测运动物体。 (运行结果如图3-1所示) 图3-1 背景建模检测运动物体 3.2 运动模板 1、UpdateMotionHistory 功能:去掉影像(silhouette)以更新运动历史图像。 格式:void cvUpdateMotionHistory(const CvArr* silhouette,CvArr* mhi,double timestamp,double duration); 参数: (1)silhouette 影像掩码,运动发生地方具有非零象素。 (2)mhi 运动历史图像(单通道,32-比特浮点数),被本函数更新。 (3)timestamp 当前时间,毫秒或其它单位。 (4)duration 运动跟踪的最大持续时间,用timestamp一样的时间单位。 说明:函数cvUpdateMotionHistory用下面方式更新运动历史图像: timestamp if silhouette(x,y)!=0 mhi(x,y)= 0 if silhouette(x,y)=0 and mhi(x,y)timestamp- duration mhi(x,y) otherwise 也就是,MHI(motion history image)中在运动发生的象素点被设置为当前时间戳, 江苏技术师范学院毕业设计说明书(论文) 第 11 页 共 38 页 而运动发生较久的象素点被清除。 2、CalcMotionGradient 功能:计算运动历史图像的梯度方向。 格式:void cvCalcMotionGradient(const CvArr* mhi,CvArr* mask,CvArr* orientation,double delta1,double delta2,int aperture_size=3); 参数: (1)mhi 运动历史图像。 (2)mask 掩码图像,用来标注运动梯度数据正确的点,为输出参数。 (3)orientation 运动梯度的方向图像,包含从 0 到 360 角度。 (4)delta1,delta2 函数在每个象素点(x,y)邻域寻找mhi的最小值m(x,y)和最大 值M(x,y),并且假设梯度是正确的,当且仅当: min(delta1,delta2) area字段)。 说明:函数cvMeanShift在给定反向投影和初始搜索窗口位置的情况下,用迭代方法寻 找目标中心。当搜索窗口中心的移动小于某个给定值时或者函数已经达到最大迭代次 数时停止迭代。函数返回迭代次数。 2、CamShift 功能:发现目标中心,尺寸和方向。 格式:int cvCamShift(const CvArr* prob_image,CvRect window,CvTermCriteria criteria,CvConnectedComp* comp,CvBox2D* box=NULL); 参数: (1)prob_image 目标直方图的反向投影。 (2)window 初始搜索窗口。 (3)criteria 确定窗口搜索停止的准则。 (4)comp 生成的结构,包含收敛的搜索窗口坐标(comp-rect字段)与窗口内部所有 像素点之和(comp-area字段)。 (5)box 目标的带边界盒子。如果非 NULL,则包含目标的尺寸和方向。 说明:函数cvCamShift实现了Camshift目标跟踪算法。首先它调用函数cvMeanShift寻 江苏技术师范学院毕业设计说明书(论文) 第 14 页 共 38 页 找目标中心,然后计算目标尺寸和方向,最后返回函数cvMeanShift中的迭代次数。 CvCamShiftTracker类在cv.hpp中被声明,函数实现了彩色目标的跟踪。 3、SnakeImage 功能:改变轮廓位置使得它的能量最小。 格式:void cvSnakeImage(const IplImage* image,CvPoint* points,int length,float* alpha,float* beta,float* gamma,int coeff_usage,CvSize win,CvTermCriteria criteria,int calc_gradient=1); 参数: (1)image 输入图像或外部能量域。 (2)points 轮廓点(snake)。 (3)length 轮廓点的数目。 (4)alpha 连续性能量的权,单个浮点数或长度为length的浮点数数组,每个轮廓点 有一个权。 (5)beta 曲率能量的权,与alpha类似。 (6)gamma 图像能量的权,与 alpha 类似。 (7)coeff_usage 表示前面三个参数的不同使用方法: CV_VALUE 表示每个alpha,beta,gamma都是指向为所有点所用的一个单独数值; CV_ARRAY 表示每个alpha,beta,gamma是一个指向系数数组的指针,轮廓上面各点 的系数都不相同。因此,各个系数数组必须与轮廓具有同样的大小,所有数组必须与 轮廓具有同样大小。 (8)win每个点用于搜索最小值的邻域尺寸,两个win.width和win.height都必须是 奇数。 (9)criteria 终止条件。 (10)calc_gradient 梯度符号。如果非零,函数为每一个图像象素计算梯度幅值, 且把它当成能量场,否则考虑输入图像本身。 说明:函数cvSnakeImage更新轮廓是为了最小化轮廓的整个能量,其中能量是依赖于 轮廓形状的内部能量(轮廓越光滑,内部能量越小)以及依赖于能量场的外部能量之和。 外部能量通常在哪些局部能量极值点中达到最小值(这些局部能量极值点与图像梯度表 示的图像边缘相对应)。 参数criteria.epsilon用来定义必须从迭代中除掉以保证迭代正常运行的点的最 江苏技术师范学院毕业设计说明书(论文) 第 15 页 共 38 页 少数目。 如果在迭代中去掉的点数目小于 criteria.epsilon 或者函数达到了最大的迭代次 数 criteria.max_iter,则终止函数。 例如:用 Camshift 算法进行彩色目标的跟踪。 (运行结果如图 3-3 所示) 图 3-3 彩色目标的跟踪 3.4 光流 1、CalcOpticalFlowHS 功能:函数 cvCalcOpticalFlowHS 为输入图像的每一个像素计算光流(使用 Horn & Schunck 算法) 。 格式:void cvCalcOpticalFlowHS(const CvArr* prev,const CvArr* curr,int use_previous, CvArr* velx,CvArr* vely,double lambda,CvTermCriteria criteria ); 参数: (1)prev 第一幅图像,8-比特,单通道。 (2)curr 第二幅图像,8-比特,单通道。 (3)use_previous 使用以前的(输入)速度域。 (4)velx 光流的水平部分,与输入图像大小一样,32-比特,浮点数,单通道。 (5)vely 光流的垂直部分,与输入图像大小一样,32-比特,浮点数,单通道。 (6)lambda Lagrangian 乘子。 (7)criteria 速度计算的终止条件。 江苏技术师范学院毕业设计说明书(论文) 第 16 页 共 38 页 2、CalcOpticalFlowLK 功能:函数 cvCalcOpticalFlowLK 为输入图像的每一个像素计算光流(使用 Lucas & Kanade 算法) 。 格式:void cvCalcOpticalFlowLK(const CvArr* prev,const CvArr* curr,CvSize win_size,CvArr* velx,CvArr* vely); 参数: (1)prev 第一幅图像,8-比特,单通道。 (2)curr 第二幅图像,8-比特,单通道。 (3)win_size 用来归类象素的平均窗口尺寸。 (4)velx 光流的水平部分,与输入图像大小一样,32-比特,浮点数,单通道。 (5)vely 光流的垂直部分,与 输入图像大小一样,32-比特,浮点数,单通道。 3、CalcOpticalFlowBM 功能:用块匹配方法计算两幅图像的光流。 格式:void cvCalcOpticalFlowBM(const CvArr* prev,const CvArr* curr,CvSize block_size,CvSize shift_size,CvSize max_range,int use_previous,CvArr* velx,CvArr* vely); 参数: (1)prev 第一幅图像,8-比特,单通道。 (2)curr 第二幅图像,8-比特,单通道。 (3)block_size 比较的基本块尺寸。 (4)shift_size 块坐标的增量。 (5)max_range 块周围象素的扫描邻域的尺寸。 (6)use_previous 使用以前的(输入)速度域。 4、CalcOpticalFlowPyrLK 功能:计算一个稀疏特征集的光流(使用金字塔中的迭代 Lucas-Kanade 方法) 。 格式:void cvCalcOpticalFlowPyrLK(const CvArr* prev,const CvArr* curr,CvArr* prev_pyr,CvArr*curr_pyr,const CvPoint2D32f* prev_features,CvPoint2D32f* curr_features,int count,CvSize win_size,int level,char* status,float* track_error,CvTermCriteria criteria,int flags ); 江苏技术师范学院毕业设计说明书(论文) 第 17 页 共 38 页 参数: (1)prev 在时间 t 的第一帧。 (2)curr 在时间 t+dt 的第二帧。 (3)prev_pyr 第一帧的金字塔缓存。如果指针非 NULL,则缓存必须有足够的空间来 存储金字塔从层 1 到层 level 的内容。尺寸(image_width+8)*image_height/3 比特足 够了。 (4)curr_pyr 与 prev_pyr 类似,用于第二帧。 (5)prev_features 需要发现光流的点集。 (6)curr_features 包含新计算出来的位置的点集。 (7)count 特征点的数目。 (8)win_size 每个金字塔层的搜索窗口尺寸。 (9)level 最大的金字塔层数。如果为 0,不使用金字塔(即金字塔为单层);如果为 1,使用两层,下面依次类推。 (10)status 数组。如果对应特征的光流被发现,数组中的每一个元素都被设置为 1;否则设置为 0。 (11)error 双精度数组,包含原始图像碎片与移动点之间的差。为可选参数,可以 是 NULL。 (12)criteria 准则,指定在每个金字塔层,为某点寻找光流的迭代过程的终止条件。 (13)flags 其它选项: CV_LKFLOW_PYR_A_READY,在调用之前,先计算第一帧的金字塔。 CV_LKFLOW_PYR_B_READY,在调用之前,先计算第二帧的金字塔。 CV_LKFLOW_INITIAL_GUESSES,在调用之前,数组 curr 包含特征点的初始坐标。 说明:函数 cvCalcOpticalFlowPyrLK 实现了金字塔中 Lucas-Kanade 光流计算的稀疏 迭代版本。它根据给出的前一帧特征点坐标计算当前视频帧上的特征点坐标。函数寻 找具有子像素精度的坐标值。 两个参数 prev_pyr 和 curr_pyr 都遵循下列规则: 如果图像指针为 0,函数在内 部为其分配缓存空间,计算金字塔,然后再处理过后释放缓存。否则,函数计算金字 塔且存储它到缓存中,除非设置标识 CV_LKFLOW_PYR_AB_READY。图像应该足够大以 便能够容纳 Gaussian 金字塔数据。调用函数以后,金字塔被计算而且相应图像的标识 江苏技术师范学院毕业设计说明书(论文) 第 18 页 共 38 页 可以被设置,为下一次调用准备就绪(比如:对除了第一个图像的所有图像序列,标识 CV_LKFLOW_PYR_A_READY 被设置)。 3.5 预估器 1、数据结构 (1)CvKalman 结构CvKalman用来保存Kalman滤波器状态。它由函数cvCreateKalman创建,由函 数cvKalmanPredict和cvKalmanCorrect更新,由cvReleaseKalman释放。通常该结构被 当做标准Kalman滤波器使用,其公式为: 系统运动方程: 系统观测方程: 其中:xk(xk 1) - 系统在时刻k(k-1)的状态向量,zk 为在时刻k的系统状态测量向量, uk 为应用于时刻k的外部控制向量,wk 和vk 分别为正态分布的运动和测量噪声向量, P(w) N(0,Q),P(v) N(0,R),其中,Q为运动噪声的协方差矩阵,可能为常量或 变量,R为测量噪声的协方差矩阵,可能为常量或变量。 对于标准 Kalman 滤波器,所有矩阵 A,B,H,Q 和 R 都是通过函数 cvCreateKalman 在分配结构 CvKalman 时初始化一次。但是,通过在当前系统状态邻域 中线性化扩展 Kalman 滤波器方程,同样的结构和函数可以用来模拟扩展 Kalman 滤波 器,在这种情况下,A,B,H (也许还有 Q 和 R)在每一步中都将被更新。 (2)CvConDensation 结构 CvConDensation 用来存储条件概率密度传播(是粒子滤波的一种特例, ConDensAtion 是词组(CONditional DENSity propagATION 的缩写)跟踪器的状态。 2、数据操作 (1)CreateKalman 功能:分配Kalman滤波器结构。 格式:CvKalman* cvCreateKalman(int dynam_params,int measure_params,int control_params=0); 说明:函数cvCreateKalman分配结构CvKalman及其所有矩阵和初始参数。 (2)ReleaseKalman 江苏技术师范学院毕业设计说明书(论文) 第 19 页 共 38 页 功能:释放Kalman滤波器结构。 格式:void cvReleaseKalman(CvKalman* kalman); 说明:函数cvReleaseKalman释放结构CvKalman和里面所有矩阵。 (3)KalmanPredict 功能:估计后来的模型状态。 格式:const CvMat* cvKalmanPredict(CvKalman*kalman,const CvMat* control=NULL); #define cvKalmanUpdateByTime cvKalmanPredict 说明: 函数cvKalmanPredict根据当前状态估计后来的随机模型状态,并存储于kalman- state_pre,其定义是: , 其中,xk 是预测状态(kalman-state_pre),xk 1 是前一步的矫正状态(kalman- state_post),应该在开始的某个地方初始化,即缺省为零向量,uk是外部控制,Pk 是先验误差相关矩阵,Pk 1 是前一步的后验误差相关矩阵(应该在开始的某个地方初 始化,即缺省为单位矩阵) 。 函数返回估计得到的状态值。 (4)KalmanCorrect 功能:调节模型状态。 格式:const CvMat* cvKalmanCorrect(CvKalman* kalman,const CvMat* measurement); #define c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论