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