主要内容

configureKalmanFilter

创建对象跟踪卡尔曼滤波器

描述

例子

kalmanFilter= configureKalmanFilter (MotionModel,InitialLocation,InitialEstimateError,MotionNoise,MeasurementNoise)返回一个vision.KalmanFilter对象配置跟踪一个物理对象。这个对象与恒定速度或加速度恒定在一个移动维笛卡尔空间。这个函数确定尺寸的数量,的长度InitialLocation向量。

该函数提供了一个简单的方法来配置vision.KalmanFilter对象跟踪一个物理对象在笛卡儿坐标系统。跟踪对象可能以恒定速度或加速度恒定。统计数据是相同的所有维度。如果您需要配置一个卡尔曼滤波器有不同的假设,使用vision.KalmanFilter直接对象。

例子

全部折叠

探测和跟踪球使用卡尔曼滤波,前景检测和blob分析。

创建系统对象读取视频帧,检测前景物体,并显示结果。

videoReader = videoReader (“singleball.mp4”);放像机= vision.VideoPlayer (“位置”[100100500400]);foregroundDetector = vision.ForegroundDetector (“NumTrainingFrames”10“InitialVariance”,0.05);blobAnalyzer = vision.BlobAnalysis (“AreaOutputPort”假的,“MinimumBlobArea”,70);

处理每个视频帧检测和跟踪球。在阅读当前视频帧,示例搜索球通过使用背景减法和blob分析。当球第一次发现,这个例子创建了一个卡尔曼滤波器。卡尔曼滤波器决定球?年代location, whether it is detected or not. If the ball is detected, the Kalman filter first predicts its state at the current video frame. The filter then uses the newly detected location to correct the state, producing a filtered location. If the ball is missing, the Kalman filter solely relies on its previous state to predict the ball's current location.

kalmanFilter = [];isTrackInitialized = false;hasFrame (videoReader) colorImage = readFrame (videoReader);foregroundMask =步骤(foregroundDetector im2gray (im2single (colorImage)));detectedLocation =步骤(blobAnalyzer foregroundMask);isObjectDetected =大小(detectedLocation 1) > 0;如果~ isTrackInitialized如果isObjectDetected kalmanFilter = configureKalmanFilter (“ConstantAcceleration”,:detectedLocation (1), (1 1 1) * 1 e5,[10] 25日,10日,25);isTrackInitialized = true;结束标签=;圆= 0 (0,3);其他的如果isObjectDetected预测(kalmanFilter);trackedLocation =正确(kalmanFilter detectedLocation (1:));标签=“纠正”;其他的trackedLocation =预测(kalmanFilter);标签=“预测”;结束圆= [trackedLocation 5];结束colorImage = insertObjectAnnotation (colorImage,“圆”,圆,标签,“颜色”,“红色”);步骤(放像机、colorImage);暂停(0.1);结束

释放资源。

释放(放像机);

输入参数

全部折叠

运动模型,指定为“ConstantVelocity”“ConstantAcceleration”。您选择的运动模型适用于所有尺寸。例如,对于二维笛卡尔坐标系统。这种模式适用于两种XY的方向。

数据类型:字符

初始位置的对象,指定为一个数值向量。这个论点还确定维度的坐标系统的数量。例如,如果您指定的初始位置为双元素向量,(x0,y0),然后是一个二维坐标系统。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

最初的不确定性估计方差,指定为一个两到三元素的向量。最初的估计错误指定位置的初始估计的方差,速度,加速度跟踪对象的。函数假设一个零初始速度和加速度的对象,在你设定的位置InitialLocation财产。你可以设置InitialEstimateError一个近似的价值,当你有能力测量位置,速度,加速度:

(假设值- - - - - -实际值)2+的方差值

在许多视觉物体跟踪应用程序,通常只有一个从一个对象探测器测量对象的位置。在这种情况下,您可以设置第一个元素(LocationVariance)InitialEstimationError相同的值MeasurementNoise。速度和加速度方差值应该设置为大值表明,这些都是未知的初始状态。例如,如果你发现一个对象的二维位置的方差1模型,并使用一个恒定的速度运动,那么你可以设置LocationVariance1和第二个元素VelocityVariance这样的高价值1 e4

这个属性的值影响卡尔曼滤波器最初几个检测。之后,估计误差是由噪声和输入数据。更大的值为初始估计误差帮助卡尔曼滤波器更快地适应检测结果。然而,更大的值也阻止卡尔曼滤波器消除噪声从最初几个检测。

指定初始估计误差作为恒定速度或双元素向量三元素为恒定加速度向量:

MotionModel InitialEstimateError
ConstantVelocity (LocationVariance,VelocityVariance]
ConstantAcceleration (LocationVariance,VelocityVariance,AccelerationVariance]

数据类型:|

偏差的选择和实际模型,指定为一个两到三元素的向量。卡尔曼滤波器的运动噪声指定公差偏差的选择模型。这个公差补偿对象的实际运动的区别,你选择模型的不同之处在于是否随机偏差或只是一个小变化的运动(如方向或速度)。增加这个值可能导致卡尔曼滤波器改变其状态以适应检测。这样的增长可能足够防止卡尔曼滤波器消除噪声检测。这个属性的值保持不变,因此可能会影响长期的卡尔曼滤波器的性能。

MotionModel MotionNoise
ConstantVelocity (LocationVariance,VelocityVariance]
ConstantAcceleration (LocationVariance,VelocityVariance,AccelerationVariance]

数据类型:|

方差误差检测位置,指定为一个标量。它直接相关技术用于检测的物理对象。例如,如果检测到的位置误差大约是5像素,然后设置测量噪声5 ^ 2。增加了MeasurementNoise更看重使卡尔曼滤波去除噪声检测。然而,它也可能导致卡尔曼滤波器过于坚持你选择的运动模型,将少强调检测。这个属性的值保持不变,因此可能会影响长期的卡尔曼滤波器的性能。

数据类型:|

输出参数

全部折叠

卡尔曼滤波器配置,作为一个返回vision.KalmanFilter对象跟踪。

算法

这个函数提供了一个简单的方法来配置。KalmanFilter对象跟踪。卡尔曼滤波器实现了离散时间线性状态空间系统。的configureKalmanFilter函数设置vision.KalmanFilter对象属性。

InitialLocation属性对应的测量向量用于状态空间模型的卡尔曼滤波器。这个表相关的测量向量,卡尔曼滤波器的状态空间模型。
状态转换模型,一个,和测量模型,H

状态转换模型,一个和测量模型,H的状态空间模型,将制成的块对角矩阵相同的子矩阵一个年代和H年代,分别为:

一个=blkdiag(一个年代_1,一个年代_2、…一个年代_)

H=blkdiag(H年代_1,H年代_2、…H年代_)

余子式的一个年代和H如下所述:
MotionModel 一个年代 H年代
“ConstantVelocity” [1 1;0 1] [1 0]
“ConstantAcceleration” [1 1 0.5;0 1 1;0 0 1] (1 0 0)
初始状态,x:
MotionModel 初始状态,x
“ConstantVelocity” (InitialLocation(1)0…InitialLocation(),0]
“ConstantAcceleration” (InitialLocation(1),0,0…InitialLocation(),0,0)
初始状态估计误差协方差矩阵,P:
P=诊断接头(repmat(InitialError,(1,)))
过程噪声协方差,:
=诊断接头(repmat(MotionNoise,(1,)))
测量噪声协方差,R:
R=诊断接头(repmat(MeasurementNoise,(1,)))。

版本历史

介绍了R2012b