主要内容

configureKalmanFilter

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

描述

例子

kalmanFilter= configureKalmanFilter (MotionModelInitialLocationInitialEstimateErrorMotionNoiseMeasurementNoise返回一个愿景。KalmanFilter配置为跟踪物理对象的对象。这个物体以恒定的速度或恒定的加速度运动-维笛卡尔空间。这个函数决定了维数,的长度InitialLocation向量。

属性的简单配置方法愿景。KalmanFilter用于在笛卡尔坐标系中跟踪物理对象的对象。被跟踪物体可以以恒定速度或恒定加速度运动。统计数据在所有维度上都是相同的。如果需要配置具有不同假设的卡尔曼滤波器,请使用愿景。KalmanFilter直接对象。

例子

全部折叠

使用卡尔曼滤波、前景检测和斑点分析来检测和跟踪一个球。

创建System对象以读取视频帧、检测前景物理对象并显示结果。

视频阅读器=视频阅读器(“singleball.mp4”);videoPlayer =视觉。放像机(“位置”[100100500400]);foregroundDetector =视觉。ForegroundDetector (“NumTrainingFrames”10...“InitialVariance”, 0.05);blobAnalyzer =视觉。BlobAnalysis (“AreaOutputPort”假的,...“MinimumBlobArea”, 70);

处理每一帧视频来检测和跟踪球。在读取当前视频帧后,该示例使用背景减法和斑点分析来搜索球。当第一次检测到球时,该示例创建一个卡尔曼滤波器。卡尔曼滤波器决定球?年代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(视频阅读器)colorImage = readFrame(视频阅读器);foregroundMask = step(foregroundDetector,im2gray(im2single(colorImage)));detectedLocation = step(blobAnalyzer,foregroundMask);isObjectDetected = size(detectedLocation, 1) > 0;如果~ isTrackInitialized如果isObjectDetected kalmanFilter = configureKalmanFilter(“ConstantAcceleration”...detectedLocation(1,:), [1 1 1]*1e5, [25, 10, 10], 25);isTrackInitialized = true;结束标签=;圆= 0 (0,3);其他的如果isObjectDetected预测(kalmanFilter);trackedLocation = correct(kalmanFilter, detectedLocation(1,:));标签=“纠正”其他的trackedLocation = predict(kalmanFilter);标签=“预测”结束circle = [trackedLocation, 5];结束colorImage = insertObjectAnnotation(colorImage,“圆”...圆,标签,“颜色”“红色”);步骤(放像机、colorImage);暂停(0.1);结束

释放资源。

释放(放像机);

输入参数

全部折叠

运动模型,指定为“ConstantVelocity”“ConstantAcceleration”.您选择的运动模型适用于所有维度。例如,对于二维笛卡尔坐标系。此模式适用于两者X而且Y的方向。

数据类型:字符

对象的初始位置,指定为数值矢量。这个参数还决定了坐标系统的维数。例如,如果指定初始位置为两个元素向量,[x0y0],则假设为二维坐标系。

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

初始估计不确定性方差,指定为两个或三个元素向量。初始估计误差指定被跟踪物体的位置、速度和加速度的初始估计的方差。函数假设物体的初始速度和加速度为零,在您使用InitialLocation财产。您可以设置InitialEstimateError到一个近似值:

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

该属性的值会影响前几次检测的卡尔曼滤波器。然后,根据噪声和输入数据确定估计误差。较大的初始估计误差值有助于卡尔曼滤波器更快地适应检测结果。然而,较大的值也会阻止卡尔曼滤波器从前几次检测中去除噪声。

指定初始估计误差为恒定速度的两元矢量或恒定加速度的三元矢量:

MotionModel InitialEstimateError
ConstantVelocity LocationVarianceVelocityVariance
ConstantAcceleration LocationVarianceVelocityVarianceAccelerationVariance

数据类型:|

所选模型与实际模型的偏差,指定为二元或三元矢量。运动噪声指定了卡尔曼滤波器对所选模型偏差的容忍度。此公差补偿对象的实际运动与您选择的模型之间的差异。增加这个值可能会导致卡尔曼滤波器改变其状态以适应检测。这样的增加可能会阻止卡尔曼滤波器从检测中去除足够的噪声。这个属性的值保持不变,因此可能会影响卡尔曼滤波器的长期性能。

MotionModel InitialEstimateError
ConstantVelocity LocationVarianceVelocityVariance
ConstantAcceleration LocationVarianceVelocityVarianceAccelerationVariance

数据类型:|

被检测位置的方差不精确性,指定为标量。它与用于检测物理对象的技术直接相关。增加了MeasurementNoise值使卡尔曼滤波器从检测中去除更多的噪声。然而,这也可能导致卡尔曼滤波器与你选择的运动模型过于紧密,对检测的重视程度降低。这个属性的值保持不变,因此可能会影响卡尔曼滤波器的长期性能。

数据类型:|

输出参数

全部折叠

配置的卡尔曼滤波器,返回为愿景。KalmanFilter对象进行跟踪。

算法

此功能提供了配置远景的简单方法。用于跟踪的KalmanFilter对象。卡尔曼滤波器实现了一个离散时间线性状态空间系统。的configureKalmanFilter函数设置愿景。KalmanFilter对象属性。

InitialLocation属性对应于卡尔曼滤波状态空间模型中使用的测量向量。该表与测量向量有关,,到卡尔曼滤波器的状态空间模型。
状态转移模型,一个和测量模型,H

状态转移模型,一个,测量模型,H的状态空间模型,都是由设置块对角矩阵制成的相同的子矩阵一个年代和H年代,分别为:

一个blkdiag一个年代_1,一个S _2,…,一个年代_

HblkdiagH年代_1,HS _2,…,H年代_

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

版本历史

在R2012b中引入