基于卡尔曼滤波的视频跟踪,基于卡尔曼滤波的运动小球跟踪

发布时间:2024年01月14日

目录

完整代码和数据下载链接:基于卡尔曼滤波的视频跟踪,基于卡尔曼滤波的运动小球跟踪(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88738577
卡尔曼滤波原理
RBF的定义
RBF理论
易错及常见问题
RBF应用实例,基于rbf的空调功率预测
代码
结果分析
展望

摘要

卡尔曼滤波原理,基于卡尔曼滤波的视频跟踪,基于卡尔曼滤波的运动小球跟踪

卡尔曼原理

卡尔曼滤波(Kalman filtering)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。数据滤波是去除噪声还原真实数据的一种数据处理技术,Kalman滤波在测量方差已知的情况下能够从一系列存在测量噪声的数据中,估计动态系统的状态。由于它便于计算机编程实现,并能够对现场采集的数据进行实时的更新和处理,Kalman滤波是目前应用最为广泛的滤波方法,在通信,导航,制导与控制等多领域得到了较好的应用。

卡尔曼的定义

传统的滤波方法,只能是在有用信号与噪声具有不同频带的条件下才能实现.20世纪40年代,N.维纳和A.H.柯尔莫哥罗夫把信号和噪声的统计性质引进了滤波理论,在假设信号和噪声都是平稳过程的条件下,利用最优化方法对信号真值进行估计,达到滤波目的,从而在概念上与传统的滤波方法联系起来,被称为维纳滤波。这种方法要求信号和噪声都必须是以平稳过程为条件。60年代初,卡尔曼(R.E.Kalman)和布塞(R. S.Bucy)发表了一篇重要的论文《线性滤波和预测 理论的新成果》,提出了一种新的线性滤波和预测理论,被称之为卡尔曼滤波。特点是在线性状态空间表示的基础上对有噪声的输入和观测信号进行处理,求取系统状态或真实信号。
这种理论是在时间域上来表述的,基本的概念是:在线性系统的状态空间表示基础上,从输出和输入观测数据求系统状态的最优估计。这里所说的系统状态,是总结系统所有过去的输入和扰动对系统的作用的最小参数的集合,知道了系统的状态就能够与未来的输入与系统的扰动一起确定系统的整个行为。
卡尔曼滤波不要求信号和噪声都是平稳过程的假设条件。对于每个时刻的系统扰动和观测误差(即噪声),只要对它们的统计性质作某些适当的假定,通过对含有噪声的观测信号进行处理,就能在平均的意义上,求得误差为最小的真实信号的估计值。因此,自从卡尔曼滤波理论问世以来,在通信系统、电力系统、航空航天、环境污染控制、工业控制、雷达信号处理等许多部门都得到了应用,取得了许多成功应用的成果。例如在图像处理方面,应用卡尔曼滤波对由于某些噪声影响而造成模糊的图像进行复原。在对噪声作了某些统计性质的假定后,就可以用卡尔曼的算法以递推的方式从模糊图像中得到均方差最小的真实图像,使模糊的图像得到复原。

卡尔曼理论

RBF神经网络算法是由三层结构组成,输入层至隐层为非线性的空间变换,一般选用径向基函数的高斯函数进行运算;从隐层至输出层为线性空间变换,即矩阵与矩阵之间的变换。
rbf神经网络原理是用RBF作为隐单元的“基”构成隐含层空间,这样就可以将输入矢量直接映射到隐空间,而不需要通过权连接。当RBF的中心点确定以后,这种映射关系也就确定了。
RBF是一种前馈型的神经网络,也就是说他不是通过不停的调整权值来逼近最小误差的,的激励函数是一般是高斯函数和BP的S型函数不一样,高斯函数是通过对输入与函数中心点的距离来算权重的。
简而言之,RBF神经网络其实就是,具有不同激活函数和应用方向的前馈网络。

状态估计

状态估计是卡尔曼滤波的重要组成部分。一般来说,根据观测数据对随机量进行定量推断就是估计问题,特别是对动态行为的状态估计,它能实现实时运行状态的估计和预测功能。比如对飞行器状态估计。状态估计对于了解和控制一个系统具有重要意义,所应用的方法属于统计学中的估计理论。最常用的是最小二乘估计,线性最小方差估计、最小方差估计、递推最小二乘估计等。其他如风险准则的贝叶斯估计、最大似然估计、随机逼近等方法也都有应用。

状态量

受噪声干扰的状态量是个随机量,不可能测得精确值,但可对它进行一系列观测,并依据一组观测值,按某种统计观点对它进行估计。使估计值尽可能准确地接近真实值,这就是最优估计。真实值与估计值之差称为估计误差。若估计值的数学期望与真实值相等,这种估计称为无偏估计。卡尔曼提出的递推最优估计理论,采用状态空间描述法,在算法采用递推形式,卡尔曼滤波能处理多维和非平稳的随机过程。

卡尔曼应用实例

##基于卡尔曼滤波的视频跟踪,基于卡尔曼滤波的运动小球跟踪

function kalmanFilterForTracking

showDetections(); %调用detections函数,检测小球

%能容易地观察整个对象的轨迹,我们覆盖所有视频
%帧到一个图像,“+”标志着质心计算表明
%使用blob分析。
showTrajectory(); %调用showTrajectory函数来显示跟踪的轨迹

frame = []; % 视频帧
detectedLocation = []; % 检测的位置
trackedLocation = []; % 跟踪的位置
label = ‘’; % 小球的标签
utilities = []; % 读取视频之前的取参数设置

%%
% 跟踪一个对象的过程如下所示。
function trackSingleObject(param)

%创建实用工具用于阅读视频,检测运动物体,
%和显示结果。
utilities = createUtilities(param);

isTrackInitialized = false;
while ~isDone(utilities.videoReader)
frame = readFrame();

% 检测小球.
[detectedLocation, isObjectDetected] = detectObject(frame);

if ~isTrackInitialized
  if isObjectDetected
    %首次发现一个球时。
    %通过初始化跟踪,创建卡尔曼滤波器
    
    initialLocation = computeInitialLocation(param, detectedLocation);
    kalmanFilter = configureKalmanFilter(param.motionModel, ...
      initialLocation, param.initialEstimateError, ...
      param.motionNoise, param.measurementNoise);

    isTrackInitialized = true;
    trackedLocation = correct(kalmanFilter, detectedLocation);
    label = 'Initial';
  else
    trackedLocation = [];
    label = '';
  end

else
  % 用卡尔曼滤波跟踪小球
  if isObjectDetected % 小球被检测出来.
    %通过调用预测降低测量噪声
    
    predict(kalmanFilter);
    trackedLocation = correct(kalmanFilter, detectedLocation);
    label = 'Corrected';
  else %小球丢失后  预测小球的位置
    trackedLocation = predict(kalmanFilter);
    label = 'Predicted';
  end
end

annotateTrackedObject();

end
showTrajectory();
end

结果

在这里插入图片描述

扩展

如果需要改进,欢迎扫描二维码联系

文章来源:https://blog.csdn.net/abc991835105/article/details/135582005
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。