主要内容

configureKalmanFilter

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

描述

例子

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

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

例子

全部折叠

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

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

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);trackkedlocation = correct(kalmanFilter, detectedLocation(1,:));标签=“纠正”其他的trackedLocation =预测(kalmanFilter);标签=“预测”结束circle = [trackkedlocation, 5];结束colorImage = insertObjectAnnotation (colorImage,“圆”...圆,标签,“颜色”“红色”);步骤(放像机、colorImage);暂停(0.1);结束

释放资源。

释放(放像机);

输入参数

全部折叠

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

数据类型:字符

对象的初始位置,指定为数字向量。这个参数还决定了坐标系统的维数。例如,如果您将初始位置指定为一个二元向量,[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