主要内容

configureKalmanFilter

为目标跟踪创建卡尔曼滤波器

描述

例子

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

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

例子

全部折叠

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

创建系统对象,用于读取视频帧、检测前台物理对象和显示结果。

videoReader = videoReader (“singleball.mp4”);放像机=愿景。放像机(“位置”[100100500400]);foregroundDetector =愿景。ForegroundDetector (“NumTrainingFrames”10...“InitialVariance”, 0.05);blobAnalyzer =愿景。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 = 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 =正确(kalmanFilter, detectedLocation(1,:));标签=“纠正”其他的trackedLocation =预测(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,一个年代_2、…一个年代_

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

余子式的一个年代和HS描述如下:
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诊断接头repmatInitialError, (1,)))
过程噪声协方差,
诊断接头repmatMotionNoise, (1,)))
测量噪声协方差,R
R诊断接头repmatMeasurementNoise, (1,)))。

版本历史

介绍了R2012b

Baidu
map