|
<p[][[id_[][id_[]]88[]64]d_1[id_[]5886[[]0362]94][[]56840]id_[]]</p>
大家好。今天给大家介绍的是关于基于运动目标的监测与跟踪系统的设计以及其原理。
视频图像分析主要是对运动图像序列进行处理和分析。它通常包含运动检测、目标分类、目标跟踪以及行为理解与描述等过程。在这些过程中,运动目标检测与跟踪处于整个视觉监视系统的最底层,是视频图像分析中最基本的方法,也是各种后续高级处理(如目标分类、行为理解等)的基础。
文章目录:
[]
提出了一种针对所要求场景的方法,此方法可以检测运动物体并跟踪运动物体。利用背景差分来获取运动人体的区域,借助卡尔曼滤波对人体进行跟踪,并且给出了相关实例。
目前,对于运动物体的检测以及运动参数测量,其研究方法主要有两种,分别是人工神经网络方法和图像处理方法。本文主要研究运用图像处理的方法来进行运动物体的检测。这种方法大致可以分成以下四类:一类是基于帧间差分的方法;另一类是基于背景差分的方法;还有一类是基于特征的方法;最后一类是基于光流场的方法。
[]
1.在图像序列中检测出运动物体及运动区域
2.对检测到的运动物体提取特征建立目标匹配模板
[]
预测目标在下一时刻可能运动到的位置,接着确定目标在下一时刻的搜索范围
在预测的搜索范围内,使用前一时刻的模板进行匹配搜索。然后寻找最佳匹配位置。如果在预测范围内没有找到目标,就需要进行例外处理。
2、难度指数
[]
适用场景:相关题目的毕业设计及相关领域的应用研究
3、运行环境:
环境配置:
本项目所使用的版本为 7.8.0()
注:可适配绝大部分版本
项目技术:
轮廓提取算法,图像分割算法,背景差分算法,图像预处理,卡尔曼滤波算法,进行运动跟踪,以及物体检测识别等等。
4、项目详解:
以下是项目的详细介绍,在文末可查看项目源码及项目设计文档的下载地址。
4.1运动物体的检测方法
运动目标的检测是重要且困难的研究课题。它不仅能把运动分量和背景分量分割开,还能利用检测出的运动块,为后续的识别、分类以及行为分析提供感兴趣的区域。从分割角度而言,运动物体检测被视为视频对象的空间域分割。具体来讲,就是把序列图像中独立运动的区域逐帧进行检测分割。所谓运动物体检测,即当场景中出现新物体进入或者物体移动的情况时,能够利用检测算法知晓有物体出现。而分割的作用是把进入场景的物体从背景图像里分割出来。
4.1.1运动物体的常用检测方法
运动物体检测通常采用差分图像的方法。
差分图像一般有两种情况:
1.当前图像与固定背景图像之间的差分,通常称为背景差分;
2.当前连续两幅图像之间的差分,通常称为帧间差分。
本项目采用背景差分的方法以获取运动物体。过程如下:
目前运动分割中最常用的一种方法是基于背景差分的方法。它通过利用当前图像与背景图像的差分,来检测运动区域。该方法通常能够提供完全的特征数据。不过,它对动态场景的变化特别敏感,比如光照的变化以及外来无关事件的干扰等。
4.1.2灰度图像的背景提取
运动目标检测和跟踪可以不直接运用原始彩色图像序列,而是采用灰度图像序列。具体做法是把彩色视频图像序列转化为灰度图像序列,接着在灰度图像序列上对背景进行提取。
彩色图像转换成灰度图像:
因为人眼感知红、绿、蓝三种颜色的权重是不一样的。JPEG 图像压缩格式采用的是 YUV 空间,并且 YUV 空间是 RGB 空间的线性变换。其转换公式为:
R 表示红色分量的灰度值,G 表示绿色分量的灰度值,B 表示蓝色分量的灰度值。Y 分量代表图像的亮度,这与人眼对颜色的感知是相符的。我们把 Y 分量当作图像像素的灰度。将彩色像素转换为灰度像素的公式为:
GRAY=0.299R+0.587G+0.114B
将彩色图像转换为灰度图像的算法如下:
遍历彩色图像的每一个像素矢量,将矢量的红、绿、蓝三色分量值分别设为 R、G、B,那么
输出的灰度图像的对应像素的值包含 0.299 乘以 R 、0.587 乘以 G 以及 0.114 乘以 B 。
运动检测的目的在于从图像序列里把前景运动区域从背景图像中提取出来。运动检测是运动物体分类、跟踪以及行为理解的基础,这个阶段处理结果的质量,会对之后的处理效果产生直接影响,因此运动检测在人体运动分析中的作用极为重要。然而,背景图像会有动态变化,比如天气、光照、影子以及混乱干扰等情况。这些变化使得运动检测成为一项相当困难的工作。
本项目中用于对象检测的是背景相减的方法。这种方法在目前的运动分割中较为常用,它通过利用当前图像与背景图像的差分来检测运动区域。其主要工作过程如下:首先依据公式计算背景图像与当前图像的差;接着对差分图像进行二值化处理;然后对二值化后的图像进行连通性分析;当某一连通区域的面积(像素数)超过一定阈值时,就认为检测到目标出现,并且这个连通的区域即为提取出的目标图像。
基于背景相减的运动检测算法流程图:
该方法通常可以提供最为完备的特征数据。然而,它对于动态场景的变化极为敏感,比如光照的变化以及外来无关事件的干扰等。时间平均图像是最简单的背景模型。目前,大部分研究人员都在努力开发不同的背景模型,目的是减少动态场景变化对动态分割所产生的影响。
利用最小强度值、最大强度值和最大时间差分值为场景中的每个像素进行统计建模,同时进行周期性的背景更新。
利用像素色彩和梯度信息相结合的自适应背景模型,以解决影子和不可靠色彩线索对分割所产生的影响。
采用基于卡尔曼滤波的自适应背景模型,从而能够适应天气和光照的时间变化;
利用自适应的混合高斯背景模型,也就是对每个像素用混合高斯分布来建模,同时利用在线估计来更新模型,这样就能够可靠地应对光照变化、背景混乱运动的干扰等情况。
此外还有以下其他方法:
时间差分方法是一种在连续的图像序列中,通过对两个或三个相邻帧采用基于像素的时间差分并进行阈值化,从而提取图像中运动区域的方法,其基本过程如图所示。首先,通过公式来计算第 k 帧图像与第 k - 1 帧图像的差别,从而得到差分后的图像。接着,对差分后的图像进行二值化处理。如果差分图像中的某一像素值大于某个给定的阈值,那么就将该像素认定为前景像素;反之,如果差分图像中的某一像素值不大于给定的阈值,就将该像素认定为背景像素。差分图像二值化后得到结果,接着进行连通性分析。如果某一连通的区域的面积大于给定的阈值,那么就检测到目标,并且认为该区域就是目标所占的区域。
基于时间差分的检测算法流程图:
光流法:运动检测运用了基于光流的方法,利用了运动目标随时间变化所具有的光流特性。例如,Meyer 等通过对位移向量光流场进行计算,以此来初始化基于轮廓的跟踪算法,这样就能有效地提取并跟踪运动目标。这种方法的优势在于,即便摄像机处于运动状态,也能够检测出独立的运动目标。大多数光流计算方法较为复杂,并且抗噪性能不佳。如果没有特别的硬件装置,就不能将其应用于全帧视频流的实时处理。
时间差分在运动实体内部容易出现空洞现象,也难以精确获取运动物体的轮廓信息。光流方法时间开销较大,抗噪性能较差,在复杂背景下不适用。背景相减通过利用当前图像与背景图像的差分来检测,速度快,能提供最完整的运动区域信息,但对背景中的干扰比较敏感。
4.1.3目标形心坐标的计算
背景差分后获得了运动目标的分割图,此图像被进行了二值化处理,把目标区域的像素灰度值设定为 255,其他区域则为 0。若要获得运动物体的运动轨迹,或者要预测运动物体在下一帧图像中的位置,就必须计算出运动物体的形心坐标。
4.2运动物体跟踪
4.2.1跟踪简介
序列图像中进行目标跟踪是计算机视觉等领域的活跃课题。运动目标跟踪就是在序列图像的每幅图像中找到运动目标的位置。简单而言,就是在下一帧图像中找到运动物体的位置。周围环境是动态的,某一时刻所拍摄的图像与另一时刻的图像不一样。所以,视觉系统的一个初步任务是把图像特征从一幅图像匹配到另一幅图像。这个过程被称为图像特征的跟踪(token )。
视频监视中运动目标跟踪的作用很重要。它能提供被监视目标的运动轨迹。还为场景中运动目标的运动分析和场景分析提供了可靠数据来源。同时,运动目标的跟踪信息也为运动目标的正确检测以及识别提供了帮助。
如果把所有图像重叠起来,也就是在图像坐标系下思考问题。我们能够把第一幅图像的每个特征与后继图像中匹配的特征连接起来,如此一来,对于每个图像特征就会得到一条轨迹。所以,我们也可以把“跟踪”重新定义为对图像特征轨迹的估计。依据这个定义,特征跟踪能够被认为是参数估计的一个特殊情况。我们会看到,参数估计理论构成了特征跟踪的基础。然而,特征跟踪所涉及的范围比参数估计广很多。比如,统计决策理论在特征跟踪中起着很重要的作用。
特征追踪通过一个“匹配—修正—预测”的循环来实现。在特定时刻检测到的图像特征需与系统已有的特征建立对应关系(匹配),接着修正这些特征的参数,最后预测它们在下一时刻可能出现的方位。匹配过程中会用到统计决策理论,修正和预测时需要用到参数估计理论,为了进行预测,还必须描述特征的运动模型。
特征跟踪的“匹配-修正-预测”环:
图像的特征到目前为止还只是一个抽象的概念。实际上,它的形式是多种多样的。它可以是点,也可以是直线段,还可以是直线,或者是曲线,并且以上这些既可以是二维的也可以是三维的。它还可以是二维区域,以及平面和曲面等。根据不同的应用,应当选择合适的特征。接下来我们将以点为例来研究特征的跟踪。
4.2.2参数估计理论简介
参数估计是从不确定或错误的观测值中去推断出有意义的值的一个过程。这里所说的“有意义的”需要根据具体的问题来确定。参数估计所涉及的内容较为广泛,在此仅给出在解决特征跟踪问题时所必需的部分。
状态空间表示法:
在实际应用里,时常需要研究动态系统。用状态空间去描述动态系统具备诸多好处,这使我们能够在一个普遍且一致的框架内研究任何复杂的动态系统。借助这个表示法,通过引入中间变量,许多动态系统可以用如下这样的一阶微分向量方程来进行表述:
例 一动态系统由和两变量描述,并有下列两微分方程:
如果定义下列向量(称为状态向量):
称为状态变量,那么原系统可表达为一阶微分向量方程:
我们可以把状态变量当作记忆变量。从状态变量中,我们能够重新获取到所有想要的有关过去的部分内容(并非所有过去的东西)。这意味着,状态变量储存了一个动态系统对于“历史”所需要的信息。
一个离散动态系统能够分解为两个过程,一个是维的动态系统,另一个是维(<)的观测系统。在特定时刻,维的输入向量经过动态系统,接着加上维噪声向量(此噪声向量被称为动态噪声),从而产生维的状态向量。在此处,下标表示这是该时刻的值。通常情况下,动态系统的演变可以由以下差分方程来描述,该差分方程被称为动态系统方程或者系统方程。
离散动态系统的描述:
状态向量经由维度的观测系统,并且加上维度的噪声向量(此噪声向量被称作观测噪声),进而输出观测向量。通常情况下,观测系统可以用以下差分方程(此差分方程被称为观测方程)来进行描述。
4.2.3卡尔曼滤波算法
滤波器是一个线形递归的滤波器。它依据系统之前的状态序列来对下一个状态进行最优估计。在预测时,它具备无偏、稳定以及最优的特性。
一般而言,在存在噪声的系统里,我们用 y 来表示系统在 k 时刻的状态,而 z 则是在 k 时刻观察到的特征向量。凭借 z ,我们能够对 y 的值做出一个估计。倘若我们还知晓 y 是如何随时间而变化的,那么我们就会对 y 有一个预测。这体现了一种预测反馈的机制,而这种预测反馈机制正是滤波的思想。
卡尔曼滤波器的结构呈现如图所示的样子。它所处理的是一个特定的系统:在这个系统中,Xk 代表着系统在第 k 时刻的状态矢量;A 是系统的状态转移矩阵;Wk 为系统在第 k 时刻的系统噪声矢量;该系统的当前状态与系统的上一状态存在依赖关系,并且这种依赖关系是线性的,即仅依赖于系统的上一状态。
人们对系统的状态矢量 x 进行观测。其中,h 是观测矩阵,v 是第 k 时刻的观测噪声矢量。而人们最终所看到的是 z。
卡尔曼滤波的目标在于,已知系统转移矩阵 A ,以及观测矩阵 H 、系统噪声矢量的协方差矩阵 Q 、观测噪声矢量的协方差矩阵 R ,通过观测到的 Z 来恢复 X 。
卡尔曼滤波器的结构:
从式子中可知,观测噪声矢量的协方差矩阵中元素增大时,卡尔曼增益会变小,对预测的修正量也会变小。因为观测噪声的协方差矩阵元素增大,会使观测值的可信度降低,从而导致最终估计值更靠近预测值。
卡尔曼滤波被用于运动跟踪。物体的位置和速度构成状态矢量,且每个都有两个方向,所以状态矢量是四维的。转移矩阵体现了新位置与速度和上一时刻位置与速度之间的关系。若认为速度保持不变,新位置等于上一时刻位置加上速度乘以采样周期,这样就能得到转移矩阵。观测矩阵是取出状态矢量中两个方向的位置分量。系统噪声是由运动物体的加速度所引起的。观测噪声是由前面提到的运动物体与连通区域不一致而产生的。
4.3项目设计总结
使用基于灰度图像的卡尔曼滤波进行跟踪,跟踪效果与检测效果密切相关。若检测效果佳,那么能为跟踪过程提供更多的检测对象特征信息,跟踪效果也就越好。所以,检测过程是图像序列跟踪的重要过程。
灰度图像的检测具有检测方便有效的优点,但它极易受光照影响,检测对象与背景的对比差别、检测对象本身的对比度变化以及运动物体的阴影都会产生很大影响。此外,用灰度图像进行检测难以解决物体遮挡的问题。所以,对于上述问题,可以考虑采用其他方法进行检测,比如使用彩色图像序列,依据颜色分量、特征点、线等方法进行检测。
对于卡尔曼跟踪而言,若获取的信息较为准确且数量足够多,同时建立的特征运动模型也足够准确,通常都能够获得较好的跟踪效果。倘若状态的初始值取得足够合理,那么就能够很快实现收敛。
4.4程序设计流程
1. 获取背景图像及其特征,转换为灰度图像。
2. 进行卡尔曼滤波的初始化。
3. 开始对前景图像进行循环处理。具体过程为:
(1) 将前景图像转换为灰度图像。
(2) 将前景图像与背景图像进行差分运算,以获取检测区域。
对图像进行二值化操作,这样可以滤除噪音。然后通过此操作进一步获得检测对象。
(4) 对除噪声后的图像进行膨胀操作,突出检测对象。
标注二值图像中的连接成分,以此来获取检测对象的图形属性,其中主要是获取检测对象的质心坐标。
(6) 以先验知识对检测对象的图形属性进行处理
对两个检测对象的质心坐标进行卡尔曼滤波处理以实现跟踪,从而获取到预测值。
4. 将所得的对象质心检测坐标与预测坐标进行绘图比较。
检测与跟踪效果(A、B两位同学在图像中的水平坐标)
A同学的跟踪与检测过程
B同学的跟踪与检测过程:
4.5部分程序源码
<p><pre> <code class="prism language-c"><span class="token operator">%</span>获取背景图像
Im0 <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token function">imread</span><span class="token punctuation">(</span><span class="token char">'1.jpg'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Im1 <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token function">imread</span><span class="token punctuation">(</span><span class="token char">'2.jpg'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Im2 <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token function">imread</span><span class="token punctuation">(</span><span class="token char">'3.jpg'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Im3 <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token function">imread</span><span class="token punctuation">(</span><span class="token char">'4.jpg'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Im4 <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token function">imread</span><span class="token punctuation">(</span><span class="token char">'5.jpg'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Im <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">/</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">*</span>Im0<span class="token operator">+</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">/</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">*</span>Im1<span class="token operator">+</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">/</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">*</span>Im2<span class="token operator">+</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">/</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">*</span>Im3<span class="token operator">+</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">/</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">*</span>Im4<span class="token punctuation">;</span>
I_gray <span class="token operator">=</span> <span class="token function">rgb2gray</span><span class="token punctuation">(</span>Im<span class="token punctuation">)</span><span class="token punctuation">;</span>
Imback<span class="token operator">=</span><span class="token function">medfilt2</span><span class="token punctuation">(</span>I_gray<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">[</span>MR<span class="token punctuation">,</span>MC<span class="token punctuation">,</span>Dim<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">size</span><span class="token punctuation">(</span>Imback<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">%</span>卡尔曼滤波初始化
R<span class="token operator">=</span><span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token char">',[0,1]'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
H<span class="token operator">=</span><span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token char">',[0,1]'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
Q<span class="token operator">=</span><span class="token number">0.01</span><span class="token operator">*</span><span class="token function">eye</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
P <span class="token operator">=</span> <span class="token number">100</span><span class="token operator">*</span><span class="token function">eye</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
dt<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>
A<span class="token operator">=</span><span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token char">',[0,1]'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
kfinit<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>
x1<span class="token operator">=</span><span class="token function">zeros</span><span class="token punctuation">(</span><span class="token number">300</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
x2<span class="token operator">=</span><span class="token function">zeros</span><span class="token punctuation">(</span><span class="token number">300</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">%</span> 对前景图像进行循环处理
fig1<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>
fig2<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>
fig15<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>
fig3<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>
fig4<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>
fig5<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>
<span class="token keyword">for</span> i <span class="token operator">=</span> <span class="token number">1</span> <span class="token operator">:</span> <span class="token number">150</span>
<span class="token operator">%</span>获取前景图像
Im0 <span class="token operator">=</span> <span class="token function">rgb2gray</span><span class="token punctuation">(</span><span class="token function">imread</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token function">int2str</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token char">'.jpg'</span><span class="token punctuation">]</span><span class="token punctuation">,</span><span class="token char">'jpg'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Im<span class="token operator">=</span> <span class="token function">medfilt2</span><span class="token punctuation">(</span>Im0<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> fig1 <span class="token operator">></span> <span class="token number">0</span>
<span class="token function">figure</span><span class="token punctuation">(</span>fig1<span class="token punctuation">)</span>
clf
<span class="token function">imshow</span><span class="token punctuation">(</span>Im<span class="token punctuation">)</span>
end
Imwork <span class="token operator">=</span> Im<span class="token punctuation">;</span>
<span class="token operator">%</span>获取检测对象 <span class="token punctuation">[</span><span class="token function">cc1</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">cr1</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">cc2</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">cr2</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">,</span>flag<span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">extract</span><span class="token punctuation">(</span>Imwork<span class="token punctuation">,</span>Imback<span class="token punctuation">,</span>fig1<span class="token punctuation">,</span>fig2<span class="token punctuation">,</span>fig3<span class="token punctuation">,</span>fig15<span class="token punctuation">,</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> flag<span class="token operator">==</span><span class="token number">0</span>
<span class="token keyword">continue</span>
end
<span class="token keyword">if</span> fig1 <span class="token operator">></span> <span class="token number">0</span>
<span class="token function">figure</span><span class="token punctuation">(</span>fig1<span class="token punctuation">)</span>
hold on
<span class="token function">plot</span><span class="token punctuation">(</span><span class="token function">cc1</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">cr1</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token char">'g+'</span><span class="token punctuation">)</span>
<span class="token function">plot</span><span class="token punctuation">(</span><span class="token function">cc2</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">cr2</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token char">'go'</span><span class="token punctuation">)</span>
end
<span class="token operator">%</span> 对A同学运动的Kalman 预测过程
<span class="token keyword">if</span> kfinit<span class="token operator">==</span><span class="token number">0</span>
xp <span class="token operator">=</span> <span class="token punctuation">[</span>MC<span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">,</span>MR<span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">]</span>'
<span class="token keyword">else</span>
xp<span class="token operator">=</span>A<span class="token operator">*</span><span class="token function">x1</span><span class="token punctuation">(</span>i<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token operator">:</span><span class="token punctuation">)</span>'
end
kfinit<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>
PP <span class="token operator">=</span> A<span class="token operator">*</span>P<span class="token operator">*</span>A' <span class="token operator">+</span> Q
K <span class="token operator">=</span> PP<span class="token operator">*</span>H<span class="token char">'*inv(H*PP*H'</span><span class="token operator">+</span>R<span class="token punctuation">)</span>
<span class="token function">x1</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span><span class="token operator">:</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token punctuation">(</span>xp <span class="token operator">+</span> K<span class="token operator">*</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token function">cc1</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">cr1</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token char">' - H*xp))'</span><span class="token punctuation">;</span>
P <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token function">eye</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token operator">-</span>K<span class="token operator">*</span>H<span class="token punctuation">)</span><span class="token operator">*</span>PP
<span class="token keyword">if</span> fig1 <span class="token operator">></span> <span class="token number">0</span>
<span class="token function">figure</span><span class="token punctuation">(</span>fig1<span class="token punctuation">)</span>
hold on
<span class="token function">plot</span><span class="token punctuation">(</span><span class="token function">x1</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">x1</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token char">'r+'</span><span class="token punctuation">)</span>
end
<span class="token operator">%</span> 对B同学运动的Kalman预测过程
<span class="token keyword">if</span> kfinit<span class="token operator">==</span><span class="token number">0</span>
xp <span class="token operator">=</span> <span class="token punctuation">[</span>MC<span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">,</span>MR<span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">]</span>'
<span class="token keyword">else</span>
xp<span class="token operator">=</span>A<span class="token operator">*</span><span class="token function">x2</span><span class="token punctuation">(</span>i<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token operator">:</span><span class="token punctuation">)</span>'
end
kfinit<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>
PP <span class="token operator">=</span> A<span class="token operator">*</span>P<span class="token operator">*</span>A' <span class="token operator">+</span> Q
K <span class="token operator">=</span> PP<span class="token operator">*</span>H<span class="token char">'*inv(H*PP*H'</span><span class="token operator">+</span>R<span class="token punctuation">)</span>
<span class="token function">x2</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span><span class="token operator">:</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token punctuation">(</span>xp <span class="token operator">+</span> K<span class="token operator">*</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token function">cc2</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">cr2</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token char">' - H*xp))'</span><span class="token punctuation">;</span>
P <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token function">eye</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token operator">-</span>K<span class="token operator">*</span>H<span class="token punctuation">)</span><span class="token operator">*</span>PP
<span class="token keyword">if</span> fig1 <span class="token operator">></span> <span class="token number">0</span>
<span class="token function">figure</span><span class="token punctuation">(</span>fig1<span class="token punctuation">)</span>
hold on
<span class="token function">plot</span><span class="token punctuation">(</span><span class="token function">x2</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">x2</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token char">'ro'</span><span class="token punctuation">)</span>
end
end
<span class="token operator">%</span> 显示检测与跟踪过程
<span class="token keyword">if</span> fig4 <span class="token operator">></span> <span class="token number">0</span>
<span class="token function">figure</span><span class="token punctuation">(</span>fig4<span class="token punctuation">)</span> <span class="token operator">%</span>A同学的检测与跟踪过程
hold on
clf
<span class="token function">plot</span><span class="token punctuation">(</span>cc1<span class="token punctuation">,</span><span class="token char">'g*'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
hold on
<span class="token function">plot</span><span class="token punctuation">(</span><span class="token function">x1</span><span class="token punctuation">(</span><span class="token operator">:</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token char">'r+'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">figure</span><span class="token punctuation">(</span>fig5<span class="token punctuation">)</span> <span class="token operator">%</span>B同学的检测与跟踪过程
<span class="token function">plot</span><span class="token punctuation">(</span>cc2<span class="token punctuation">,</span><span class="token char">'g*'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
hold on
<span class="token function">plot</span><span class="token punctuation">(</span><span class="token function">x2</span><span class="token punctuation">(</span><span class="token operator">:</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token char">'r+'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
end
</code></pre></p>
5、源码下载:
本项目的源码如下,一些精选的目标识别目标跟踪项目的源码也如下,有需要的朋友可以点击进行下载。
序号目标识别项目(点击下载)
1 (本项目源码)
基于卡尔曼滤波的运动目标识别追踪程序源码,以及与之相关的图片集和毕业论文。其中涉及运动目标跟踪、卡尔曼滤波以及人体识别等内容。
目标检测结合颜色特征跟踪目标的程序(推荐)颜色特征识别
目标跟踪的语言实现中,经典的 Mean shift 目标跟踪算法是_mean shift 。
目标跟踪通过背景差分法把运动目标提取出来,接着用边缘检测法对目标进行跟踪。
目标跟踪和目标检测,要实现高斯背景建模来提取运动目标(人体),这是比较推荐的方法。同时进行高斯背景建模,用于人体识别以及运动目标检测。
目标跟踪目标检测上实现车辆预测跟踪_车辆跟踪_车辆识别
目标跟踪目标检测编写的IMM目标跟踪程序_IMM_目标跟踪
目标跟踪和目标检测能够实现运动估计,经过试用后,可以显示运动目标的运动估计情况。
目标跟踪目标检测_IMM雷达多目标跟踪雷达跟踪
10
目标跟踪目标检测在使用 vibe 算法进行视频前景提取,即完成了视频前景提取。
11
目标跟踪包含目标检测,目标检测又包括运动目标检测和背景建模,运动目标检测基于混合高斯模型,也就是混合高斯模型用于运动目标检测。
12
目标跟踪目标检测_运动车辆检测跟踪系统车辆跟踪
13
目标跟踪目标检测_用模拟出十字路口的车辆通行情况_车辆检测
14
目标跟踪和目标检测,通过读取视频文件里的图像,来对图像中的运动目标进行检测,也就是对视频图像中的运动目标进行检测。
15
目标跟踪目标检测,使用编写的一个三维雷达来跟踪粒子滤波器,这个粒子滤波器用于雷达跟踪,是三维雷达的相关应用。
16
目标跟踪与目标检测,采用帧间差分法来进行运动目标(人体)的检测,也就是帧差法进行运动目标检测中的人体检测。
17
实现对动态车辆的实时检测,同时进行跟踪和标记,这是目标跟踪与目标检测的任务,其中包括动态车辆检测和车辆跟踪。
18
目标跟踪的程序例子中包含目标检测,其中有粒子滤波的多目标检测前跟踪,也有滤波的多目标检测。
19
目标跟踪和目标检测,其中利用帧差法来对视频里的行人进行检测与跟踪,即帧差法用于行人检测以及行人跟踪。
20
目标跟踪与目标检测中,扩展卡尔曼滤波在跟踪运动轨迹方面有应用,扩展卡尔曼滤波可用于运动轨迹跟踪。
21
在目标跟踪目标检测的扩展卡尔曼滤波仿真中,实现了对雷达目标的跟踪,即雷达目标跟踪。
22
目标跟踪包括目标检测,其中交互多模(IMM)卡尔曼滤波器可用于机动目标跟踪,IMM 卡尔曼滤波也可用于机动目标跟踪。
23
目标跟踪包含目标检测,其中有一种基于粒子滤波的雷达弱小点目标检测方式,粒子滤波可用于雷达目标检测,也可用于弱小点目标检测。
24
目标跟踪目标检测_构造无迹卡尔曼滤波器()_无迹卡尔曼滤波
25
目标跟踪包含目标检测、背景差分建模以及运动目标检测和跟踪,并且附有一个实验视频(推荐),其中涉及背景差分法与目标跟踪。
26
交互式多模型目标跟踪包含 UKF 和 EKF 滤波,用于 IMM 雷达多目标跟踪。
27
扩展卡尔曼滤波仿真中实现对雷达目标的跟踪
28
用读取视频文件中的图像,并对图像中的运动目标检测,循环
29
目标跟踪包含视觉分析,其中基于模型的行人跟踪涉及底层视觉与高层视觉处理,也涉及行人跟踪。
30
使用 CA-CFAR 进行二维检测。
31
多目标车辆路径算法程序_遗传算法_启发式算法
32
用背景差法来检测车流量,它具有较强的自适应能力,能够判断是否有车辆,完成车辆计数,实现车流量计算。同时还有虚拟线圈法和目标跟踪法的源码。 |
|