opencv中常用的检测和跟踪算法原理介绍

合集下载

opencv原理

opencv原理

opencv原理OpenCV的工作原理基于图像处理、计算机视觉和机器学习的一系列方法和算法。

它的设计目标是提供一个简单、高效、通用的计算机视觉库,使开发者能够快速地开发实时的计算机视觉应用程序。

以下是OpenCV的一些主要原理:1. 图像采集与加载:OpenCV可以从摄像头、视频文件或图像文件中采集图像数据。

它支持多种图像格式,包括JPEG、PNG、BMP等。

2. 图像预处理:在进行进一步处理之前,OpenCV通常需要对图像进行预处理。

这包括调整图像大小、灰度化、去噪、直方图均衡化和边缘检测等。

3. 特征提取:在计算机视觉任务中,特征提取是一个关键步骤。

OpenCV提供了各种方法来检测图像中的特征,如角点、边缘、线条、斑点等。

这些特征可以用于图像分类、对象识别、目标跟踪等任务。

4. 特征匹配:在一些应用中,需要在不同图像中找到相似的特征点或对象。

OpenCV提供了各种特征匹配算法,如基于模板匹配、基于特征描述符的匹配和基于兴趣点的匹配等。

5. 目标检测与跟踪:OpenCV可以通过使用分类器、机器学习算法和深度学习模型来检测和跟踪图像中的目标。

这可以用于人脸检测、行人检测、车辆检测等应用。

6. 图像分割:图像分割是将图像分成多个区域或对象的过程。

OpenCV提供了多种图像分割算法,如基于颜色、纹理、边缘等的分割方法。

7. 图像配准:图像配准是将多个图像对齐以进行比较或融合的过程。

OpenCV提供了多种图像配准方法,如特征点配准、基于几何变换的配准和基于深度学习的配准等。

8. 机器学习和深度学习:OpenCV集成了各种机器学习和深度学习算法,如支持向量机(SVM)、卷积神经网络(CNN)和循环神经网络(RNN)等。

这些算法可以用于图像分类、目标检测、图像生成等任务。

9. 图像的存储与输出:OpenCV可以将处理后的图像数据保存到文件中,支持多种图像格式。

它还可以将图像以各种方式显示出来,如窗口显示、视频流显示和Web显示等。

Cv运动分析与对象跟踪(OpenCV)

Cv运动分析与对象跟踪(OpenCV)

Cv运动分析与对象跟踪(OpenCV)目录[隐藏]• 1 背景统计量的累积o 1.1 Acco 1.2 SquareAcco 1.3 MultiplyAcco 1.4 RunningAvg• 2 运动模板o 2.1 UpdateMotionHistoryo 2.2 CalcMotionGradiento 2.3 CalcGlobalOrientationo 2.4 SegmentMotion• 3 对象跟踪o 3.1 MeanShifto 3.2 CamShifto 3.3 SnakeImage• 4 光流o 4.1 CalcOpticalFlowHSo 4.2 CalcOpticalFlowLKo 4.3 CalcOpticalFlowBMo 4.4 CalcOpticalFlowPyrLK• 5 预估器o 5.1 CvKalmano 5.2 CreateKalmano 5.3 ReleaseKalmano 5.4 KalmanPredicto 5.5 KalmanCorrecto 5.6 CvConDensationo 5.7 CreateConDensationo 5.8 ReleaseConDensationo 5.9 ConDensInitSampleSeto 5.10 ConDensUpdateByTime[编辑]背景统计量的累积[编辑]Acc将帧叠加到累积器(accumulator)中void cvAcc( const CvArr* image, CvArr* sum, const CvArr* mask=NULL );image输入图像, 1- 或 3-通道, 8-比特或32-比特浮点数. (多通道的每一个通道都单独处理).sum同一个输入图像通道的累积,32-比特或64-比特浮点数数组.mask可选的运算 mask.函数 cvAcc 将整个图像 image 或某个选择区域叠加到 sum 中:sum(x,y)=sum(x,y)+image(x,y) if mask(x,y)!=0[编辑]SquareAcc叠加输入图像的平方到累积器中void cvSquareAcc( const CvArr* image, CvArr* sqsum, const CvArr* mask=NULL );image输入图像, 1- 或 3-通道, 8-比特或32-比特浮点数 (多通道的每一个通道都单独处理)sqsum同一个输入图像通道的累积,32-比特或64-比特浮点数数组.可选的运算 mask.函数cvSquareAcc 叠加输入图像image 或某个选择区域的二次方,到累积器 sqsum 中sqsum(x,y)=sqsum(x,y)+image(x,y)2 if mask(x,y)!=0[编辑]MultiplyAcc将两幅输入图像的乘积叠加到累积器中void cvMultiplyAcc( const CvArr* image1, const CvArr* image2, CvArr* acc, const CvArr* mask=NULL );image1第一个输入图像, 1- or 3-通道, 8-比特 or 32-比特浮点数 (多通道的每一个通道都单独处理)image2第二个输入图像, 与第一个图像的格式一样acc同一个输入图像通道的累积,32-比特或64-比特浮点数数组.mask可选的运算 mask.函数 cvMultiplyAcc 叠加两个输入图像的乘积到累积器 acc:acc(x,y)=acc(x,y) + image1(x,y)?image2(x,y) if mask(x,y)!=0[编辑]RunningAvg更新running average 滑动平均(Hunnish: 不知道running average 如何翻译才恰当)void cvRunningAvg( const CvArr* image, CvArr* acc, double alpha, const CvArr* mask=NULL );image输入图像, 1- or 3-通道, 8-比特 or 32-比特浮点数 (each channel of multi-channel image is processed independently).同一个输入图像通道的累积,32-比特或64-比特浮点数数组.alpha输入图像权重mask可选的运算 mask函数cvRunningAvg 计算输入图像image 的加权和,以及累积器 acc 使得 acc 成为帧序列的一个 running average:acc(x,y)=(1-α)?acc(x,y) + α?image(x,y) if mask(x,y)!=0其中α (alpha) 调节更新速率 (累积器以多快的速率忘掉前面的帧).[编辑]运动模板[编辑]UpdateMotionHistory去掉影像(silhouette) 以更新运动历史图像void cvUpdateMotionHistory( const CvArr* silhouette, CvArr* mhi,double timestamp, double duration );silhouette影像 mask,运动发生地方具有非零象素mhi运动历史图像(单通道, 32-比特浮点数),为本函数所更新timestamp当前时间,毫秒或其它单位duration运动跟踪的最大持续时间,用 timestamp 一样的时间单位函数 cvUpdateMotionHistory 用下面方式更新运动历史图像:mhi(x,y)=timestamp if silhouette(x,y)!=00 if silhouette(x,y)=0 and mhi(x,y)<timestamp-durationmhi(x,y) otherwise也就是,MHI(motion history image)中在运动发生的象素点被设置为当前时间戳,而运动发生较久的象素点被清除。

OpenCV上八种不同的目标追踪算法

OpenCV上八种不同的目标追踪算法

OpenCV上⼋种不同的⽬标追踪算法⽬标跟踪作为机器学习的⼀个重要分⽀,加之其在⽇常⽣活、军事⾏动中的⼴泛应⽤,受到极⼤的关注。

在AI潮流中,⼤家对于深度学习,⽬标跟踪肯定都会有过接触了解:在GPU上通过⼤量的数据集训练出⾃⼰想使⽤的垂直场景后再在实际场景中使⽤。

但⿇烦的是,⼤数⼈拥有的是CPU,有没有办法能在⾃⼰的电脑上⽤CPU就能实现⾃⼰的⽬标跟踪能⼒。

OpenCV的跟踪API给出了答案:我⾏。

在这篇⽂章中,我们会介绍在OpenCV上的8种⽬标检测算法,优势和局限性,然后会给出代码⽰例,如何使⽤它。

我们的⽬标不是对每⼀个跟踪器都有深⼊的理论理解,⽽是从实际使⽤的⾓度来理解它们。

⽬标跟踪基本原则在视频⽬标跟踪中的期望是在当前帧中正确找到跟踪的对象,因为我们已经在所有(或⼏乎所有)以前的帧中成功跟踪了该对象,所以我们知道对象是如何移动的。

换句话说,我们知道运动模型的参数。

运动模型只是⼀种奇特的表达⽅式,它会知道物体在前⼀帧中的位置和速度(速度+运动⽅向)。

⽽如果对这个物体⼀⽆所知,则可以根据当前的运动模型来预测新的位置,从⽽⾮常接近物体的新位置。

我们还可以建⽴⼀个外观模型来编码对象的外观。

外观模型可⽤于在运动模型预测的位置的邻域内搜索,以便更准确地预测物体的位置。

⽬标跟踪可以描述为:运动模型预测物体的⼤致位置。

外观模型微调此估计,以便根据外观提供更准确的估计。

如果对象⾮常简单,并且没有改变它的外观,我们可以使⽤⼀个简单的模板作为外观模型并查找该模板。

然⽽,现实⽣活并不那么简单。

对象的外观可能会发⽣显著变化。

为了解决这个问题,在许多现代追踪器中,这个外观模型是⼀个在线训练的分类器。

分类器的任务是将图像的矩形区域分类为对象或背景。

分类器接受图像区域作为输⼊,并返回介于0和1之间的分数,以指⽰图像区域包含对象的概率。

如果确定图像区域是背景,则分数为0;如果确定区域是对象,则分数为1。

在机器学习中,我们使⽤“在线”这个词来指的是在运⾏时动态训练的算法。

视觉目标检测与跟踪算法

视觉目标检测与跟踪算法

视觉目标检测与跟踪算法随着计算机视觉和人工智能的快速发展,视觉目标检测与跟踪算法成为了该领域的热门研究课题。

视觉目标检测与跟踪算法的应用十分广泛,包括自动驾驶、智能监控、机器人导航等领域。

对于实时场景中的目标检测与跟踪,准确性和实用性是评估算法性能的重要指标。

在本文中,我们将介绍几种常见的视觉目标检测与跟踪算法,并对其原理和应用进行详细的分析。

一、视觉目标检测算法1. Haar特征检测算法Haar特征检测算法是一种基于机器学习的目标检测算法,其原理是通过计算目标区域内的Haar-like特征来判断目标是否存在。

该算法在检测速度方面表现出色,但对目标外貌的变化和旋转不具有很好的鲁棒性。

2. HOG特征检测算法HOG特征检测算法通过计算图像局部梯度的方向直方图来描述目标的外貌特征,并通过支持向量机等分类器进行目标检测。

该算法在复杂背景下的目标检测效果较好,但对于目标遮挡和旋转等情况的处理能力较差。

3. 基于深度学习的目标检测算法基于深度学习的目标检测算法通常基于卷积神经网络(CNN)结构,如Faster R-CNN、YOLO、SSD等。

这些算法通过在网络中引入特定的层和损失函数,能够实现更高的目标检测准确性和实时性。

然而,由于网络结构复杂,算法的运行速度较慢。

二、视觉目标跟踪算法1. 卡尔曼滤波器卡尔曼滤波器是一种常用的目标跟踪算法,其基本原理是将目标的状态建模为高斯分布,并通过状态预测和观测更新两个步骤来实现目标跟踪。

该算法在实时性和鲁棒性方面表现出色,但对目标的运动模型假设较强。

2. 文件特征跟踪算法文件特征跟踪算法通过提取目标区域的特征信息,并通过计算特征匹配度来判断目标位置的变化。

该算法对于目标的尺度变化和旋转等问题有一定的鲁棒性,但对于目标确切形状的要求较高。

3. 基于深度学习的目标跟踪算法基于深度学习的目标跟踪算法通常基于卷积神经网络(CNN)结构,如SiameseRPN、SiamFC等。

《2024年基于OPENCV的运动目标检测与跟踪技术研究》范文

《2024年基于OPENCV的运动目标检测与跟踪技术研究》范文

《基于OPENCV的运动目标检测与跟踪技术研究》篇一一、引言随着计算机视觉技术的飞速发展,运动目标检测与跟踪技术已经成为计算机视觉领域研究的热点。

该技术广泛应用于智能监控、交通流量管理、人机交互等众多领域。

OpenCV作为一个强大的计算机视觉库,为运动目标检测与跟踪提供了有效的工具。

本文旨在研究基于OpenCV的运动目标检测与跟踪技术,探讨其原理、方法及实际应用。

二、运动目标检测技术研究1. 背景及原理运动目标检测是计算机视觉中的一项基本任务,其目的是从视频序列中提取出运动的目标。

OpenCV提供了多种运动目标检测方法,如背景减除法、光流法、帧间差分法等。

其中,背景减除法是一种常用的方法,其原理是将当前帧与背景模型进行比较,从而检测出运动目标。

2. 关键技术与方法(1)背景建模:背景建模是运动目标检测的关键步骤。

OpenCV提供了多种背景建模方法,如单高斯模型、混合高斯模型等。

其中,混合高斯模型能够更好地适应背景的动态变化。

(2)阈值设定:设定合适的阈值是运动目标检测的重要环节。

阈值过低可能导致误检,阈值过高则可能导致漏检。

OpenCV通过统计像素值分布,自动设定阈值,从而提高检测的准确性。

3. 实验与分析本文通过实验对比了不同背景建模方法和阈值设定对运动目标检测效果的影响。

实验结果表明,混合高斯模型结合合适的阈值设定能够获得较好的检测效果。

此外,本文还对不同场景下的运动目标检测进行了实验,验证了该方法的稳定性和泛化能力。

三、运动目标跟踪技术研究1. 背景及原理运动目标跟踪是指在视频序列中,对检测到的运动目标进行持续跟踪。

OpenCV提供了多种跟踪方法,如光流法、Meanshift 算法、KCF算法等。

这些方法各有优缺点,适用于不同的场景和需求。

2. 关键技术与方法(1)特征提取:特征提取是运动目标跟踪的关键步骤。

OpenCV可以通过提取目标的颜色、形状、纹理等特征,实现稳定的目标跟踪。

此外,还可以采用深度学习等方法,提取更高级的特征,提高跟踪的准确性。

opencv mog2 原理

opencv mog2 原理

opencv mog2 原理OpenCV MOG2(Mixture of Gaussians)是一种常用的背景建模算法,用于视频中的移动目标检测。

MOG2算法基于高斯混合模型,能够自动学习和更新背景模型,从而准确地提取前景目标。

本文将介绍MOG2算法的原理和应用。

一、背景建模算法介绍背景建模是计算机视觉中的一项重要任务,广泛应用于视频监控、智能交通等领域。

其主要目的是从视频中提取出静态背景,以便于后续的目标检测和跟踪。

MOG2算法是背景建模算法中的一种,相比于传统的MOG算法,它具有更好的适应性和鲁棒性。

二、MOG2算法原理MOG2算法使用高斯混合模型来对每个像素的颜色进行建模,即假设每个像素的颜色值来自于多个高斯分布的混合。

通过学习像素颜色的分布,MOG2算法能够自动地建立起背景模型,并根据新的观测数据进行模型的更新。

MOG2算法的具体步骤如下:1. 初始化背景模型:对于每个像素,初始化一个包含K个高斯分布的混合模型,其中K是一个预先设定的常数。

2. 前景检测:对于每一帧输入图像,计算每个像素与其对应的背景模型之间的匹配度。

如果像素的颜色与背景模型的某个高斯分布的匹配度低于一个阈值,那么该像素被认为是前景。

3. 模型更新:对于被认为是前景的像素,更新其对应的高斯分布的参数;对于被认为是背景的像素,不进行更新。

通过这种方式,MOG2算法能够自动地适应场景变化,减少误检率。

4. 背景更新:定期对背景模型进行更新,以适应长时间运行中的光照变化和场景变化。

三、MOG2算法的优点MOG2算法相比于传统的背景建模算法具有以下优点:1. 自适应性:MOG2算法能够自动地学习和适应场景的变化,减少了手动调参的工作量。

2. 鲁棒性:MOG2算法能够处理光照变化、动态背景等复杂场景,具有更好的鲁棒性。

3. 低延迟:MOG2算法使用了基于高斯分布的建模方法,计算效率高,能够实时处理视频流。

四、MOG2算法的应用MOG2算法在视频监控、智能交通等领域得到了广泛的应用。

跟踪算法的基本原理

跟踪算法的基本原理

跟踪算法的基本原理
跟踪算法的基本原理是根据给定的初始状态,利用数学模型和算法来估计和预测目标的轨迹。

该算法通常包括以下步骤:
1. 初始化:在目标被发现时,需要设置初始状态,包括目标的位置、速度和其他重要参数。

2. 目标检测:利用传感器或图像处理技术检测目标,并获取目标的位置信息。

3. 数据关联:将当前的目标检测结果与之前被跟踪的目标进行关联,确定是否为同一目标。

4. 目标预测:根据目标的历史数据和模型,预测目标在下一个时间步的位置。

5. 跟踪更新:根据新的目标检测结果和预测值,利用滤波算法(如卡尔曼滤波器)对目标状态进行更新,以获得更准确的目标位置估计。

6. 跟丢处理:如果目标检测失败或目标位置与预测位置差距过大,就需要进行跟丢处理,例如重新初始化、重新检测目标等。

7. 输出结果:根据跟踪更新的结果,输出目标的轨迹或其他关键信息。

跟踪算法的基本原理可以根据具体的应用和算法设计而有所不同,但以上步骤是常见的基本原理。

跟踪算法通常使用了统计学、信号处理、模式识别等相关技术,以实现对目标的准确跟踪和预测。

模型opencv摄像头的检测原理

模型opencv摄像头的检测原理

模型opencv摄像头的检测原理
OpenCV是一款开源的计算机视觉库,它的应用非常广泛,其中
一个常见的应用就是使用摄像头进行物体检测。

在这个过程中,我们需要了解一些基本的原理和概念。

首先,我们需要明确的是,OpenCV使用的是机器学习算法进行
物体检测。

其基本原理是通过训练一组已知样本的图像,让计算机自动学习识别这些图像的特征,然后在新的未知图像中寻找相似的特征,从而实现物体检测的目的。

在具体实现过程中,我们需要用到一些预先训练好的模型,如Haar级联分类器、LBP级联分类器、HOG+SVM等。

这些模型都是基于机器学习算法的,通过训练大量的正负样本图像,学习并提取出一些特征,从而在新的图像中进行分类和识别。

在使用这些模型进行物体检测时,我们需要将待检测的图像通过均衡化等方法进行预处理,然后将其送入模型中进行分类和识别。

如果检测到目标物体,则可以通过框选或者标记等方式进行显示和处理。

总之,OpenCV摄像头检测的原理是基于机器学习算法进行的,
通过训练一组样本图像,学习提取出一些特征,然后在新的图像中进行分类和识别,从而实现物体检测的目的。

- 1 -。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、背景减法 背景减法的原理是利用当前图像与背景图像的差分来检测运动区域的一 种技术。它一般能够提供最完整的特征数据,而且速度快,能适合实时系统 的要求。但是对于动态场景的变化,如光照和外来无关事件的干扰特别敏感。
2、时间差分 时间差分方法利用图像序列中前后几个相邻帧图像之间的差分来提取图 像中的运动区域例如Lipton等利用两帧差分方法从实际视频图像中检测出运 动目标,进而用于目标的分类与跟踪。一个改进的方法是利用三帧差分代替 两帧差分,如VSM开发了一种自适应背景减除与三帧差分相结合的混合算法, 它可以快速有效地从背景中检测出运动目标。时间差分运动检测方法对于动 态环境具有较强的自适应性,但它一般不能完全提取出所有相关的特征像素 点,在运动实体内部容易产生空洞现象。 3、光流 光流方法的运动检测采用了运动目标随时间变化的光流场特性,从而有 效地提取和跟踪运动目标。该方法的优点是在摄像机运动存在的前提下也能 检测出独立的运动目标,而缺点在于计算方法相当复杂,且抗噪声性能差, 如果没有特别的硬件装置则不能被应用于全帧视频流的实时处理。 4、统计方法 统计方法是利用单个像素或几组像素的变化特征建立背景模型,克服了 传统背景减法对动态干扰因素较敏感的问题。如利用背景注册技术构建可靠 的背景模型,将当前帧与背景模型相减提前前景区域。该方法能成功克服噪 声和光照变化的影响,但是需要捕获大量数据建立背景模型,如果背景变化 较大,则前若干帧则无法获得完整的背景模型。
OPENCV中常用物体检测算法和跟踪算法的介绍
一、运动物体的检测方法
运动目标检测指从图像序列中将前景变化区域从背景图像中提取 出来;现阶段运动目标的检测的难点主要在:动态变化着的背景的提 取与更新、光线变化(渐变、突变、反光)问题、阴影干扰、目标遮 挡、背景物体变化(如树叶、水波、天气变化等)、及目标运动过程 不连续、速度缓慢、往返运动等问题上。现阶段主要的基本的检测算 法视频图像的时域和空域信息;主要检测算法如下:
2.4)CamShift算法
1.原理 在了解了MeanShift算法以后,我们将MeanShift算法扩展到连续图像序列 (一般都是指视频图像序列),这样就形成了CamShift算法。CamShift算法 的全称是“Continuously Apaptive Mean-SHIFT”,它的基本思想是视频图像 的所有帧作MeanShift运算,并将上一帧的结果(即Search Window的中心 和大小)作为下一帧MeanShift算法的Search Window的初始值,如此迭代 下去,就可以实现对目标的跟踪。整个算法的具体步骤分5步: (1)将整个图像设为搜寻区域。 ( 2)初始话Search Window的大小和位置。 (3)计算Search Window内的彩色概率分布,此区域的大小比Search Window要稍微大一点。 (4)运行MeanShift。获得Search Window新的位置和大小。 (5)在下一帧视频图像中,(3)获得的值初始化Search Window的位置和 大小。跳转到( 3)继续运行。 2.实现 在OpenCV中,有实现CamShift算法的函数,此函数的原型是: cvCamShift(IplImage* imgprob, CvRect windowIn, CvTermCriteria criteria, CvConnectedComp* out, CvBox2D* box=0); 其中: imgprob:色彩概率分布图像。 windowIn:Search Window的初始值。 Criteria:用来判断搜寻是否停止的一个标准。 out:保存运算结果,包括新的Search Window的位置和面积。 box:包含被跟踪物体的最小矩形。
2、Camshift算法
CamShift算法,即"Continuously Apative Mean-Shift"算法,是一种运动跟踪算法。它 主要通过视频图像中运动物体的颜色信息来达到跟踪的目的。我把这个算法分解成三个部分, 便于理解: 1) Back Projection计算 2) Mean Shift算法 3) CamShift算法
2.3)mean-shift算法 Mean-shift算法是一种在一组数据的密度分布中寻找局部极值的稳定的方法。 mean-shift算法的步骤如下: (1)选择搜索窗口。

窗口的初始化位置; 窗口的类型(均匀、多项式、指数或者高斯类型); 窗口的形状(对称的或歪斜的,可能旋转的,圆形或矩形); 窗口的大小(超出窗口的则被截除)。
首先我们要利用系统的过程模型,来预测下一状态的系统。假设现在的系 统状态是k,根据系统的模型,可以基于系统的上一状态而预测出现在状态: X(k|k-1)=A X(k-1|k-1)+B U(k) ……….. (1) 式(1)中,X(k|k-1)是利用上一状态预测的结果,X(k-1|k-1)是上一状态最优的 结果,U(k)为现在状态的控制量,如果没有控制量,它可以为0。 到现在为止,我们的系统结果已经更新了,可是,对应于X(k|k-1)的 covariance还没更新。我们用P表示covariance: P(k|k-1)=A P(k-1|k-1) A’+Q ……… (2) 式 (2)中,P(k|k-1)是X(k|k-1)对应的covariance,P(k-1|k-1)是X(k-1|k-1)对应 的 covariance,A’表示A的转置矩阵,Q是系统过程的covariance。式子1,2 就是卡尔曼滤波器5个公式当中的前两个,也就是对系统的预测。现在我们 有了现在状态的预测结果,然后我们再收集现在状态的测量值。结合预测值 和测量值,我们可以得到现在状态(k)的最优化估算值X(k|k): X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1)) ……… (3) 其中Kg为卡尔曼增益(Kalman Gain): Kg(k)= P(k|k-1) H’ / (H P(k|k-1) H’ + R) ……… (4) 到现在为止,我们已经得到了k状态下最优的估算值X(k|k)。但是为了要使卡 尔曼滤波器不断的运行下去直到系统过程结束,我们还要更新k状态下X(k|k) 的covariance: P(k|k)=(I-Kg(k) H)P(k|k-1) ……… (5) 其中I 为1的矩阵,对于单模型单测量,I=1。当系统进入k+1状态时,P(k|k) 就是式子(2)的P(k-1|k-1)。这样,算法就可以自回归的运算下去。
二、运动物体的跟踪方法
运动物体跟踪就是在图像序列间创建基于位置、速度、形状等有关 特征的对应匹配问题。运动跟踪算法与运动检测算法会进行大量的信 息交互。跟踪通常是利用点、线、或区域等特征在后续图像中进行运 动目标的匹配;常用的算法有Kalman算法,mean-shift和camshift算法, condensation算法等。
1、Kalman滤波器
卡尔曼滤波是基于高斯分布的状态预测方法,可实时地进行跟踪预测。其 基本思想是,若有一组强而合理的假设,给出系统的历史测量值,则可以建 立最大化这些早期测量值的后验概率的系统状态模型。即重复更新系统状态 模型。 Kalman滤波器需要二个重要的假设(1)被建模的系统是线性的;即k时 刻的系统状态可以用某个矩阵与k-1时刻的系统状态的乘积表示。(2)假设 噪声是高斯分布的白噪声,即噪声与时间不相关。 Kalman算法流程:
(。 (4)返回第(2)步,直到窗口的位置不再变化。
在OpenCV中,提供Mean Shift算法的函数,函数的原型是: int cvMeanShift(IplImage* imgprob,CvRect windowIn, CvTermCriteria criteria,CvConnectedComp* out); 需要的参数为: 1.IplImage* imgprob:2D概率分布图像,传入; 2.CvRect windowIn:初始的窗口,传入; 3.CvTermCriteria criteria:停止迭代的标准,传入; 4.CvConnectedComp* out:查询结果,传出。 (注:构造CvTermCriteria变量需要三个参数,一个是类型,另一个是迭代的 最大次数,最后一个表示特定的阈值。例如可以这样构造criteria: criteria=cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,10,0. 1)。)返回的参数int:迭代的次数。
2.2)算法分析 用在cvCalcBackProject处理中的模板是目标图像色调(HUE)的直方图,而直方图可 以看作是一种概率分布图。在处理前,目标图像中的每一个象素的值描述的在这一点 的颜色信息,而处理后,图像中每一个象素的值就变成了这个颜色信息出现在此处的 可能性的一种离散化的度量,出现的可能性大,象素的值就大,反之则小。这样就为 后面的匹配和跟踪提供了线索。
2.1)Back Projection 计算Back Projection的步骤是这样的: 1. 计算被跟踪目标的色彩直方图。在各种色彩空间中,只有HSI空间(或与HSI类似的色彩空 间)中的H分量可以表示颜色信息。所以在具体的计算过程中,首先将其他的色彩空间的值转 化到HSI空间,然后会其中的H分量做1D直方图计算。 2. 根据获得的色彩直方图将原始图像转化成色彩概率分布图像,这个过程就被称作"Back Projection"。 在OpenCV中的直方图函数中,包含Back Projection的函数,函数原型是: void cvCalcBackProject(IplImage** img, CvArr** backproject, const CvHistogram* hist); 传递给这个函数的参数有三个: 1. IplImage** img:存放原始图像,输入。 2. CvArr** backproject:存放Back Projection结果,输出。 3. CvHistogram* hist:存放直方图,输入
相关文档
最新文档