configureKalmanFilter

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

描述

例子

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

此函数提供了一种配置vision.KalmanFilter在笛卡尔坐标系中跟踪物理对象的对象。被跟踪的物体可以以恒定速度或恒定加速度运动。统计数据在所有维度上都是相同的。如果需要配置不同假设的卡尔曼滤波器,请使用vision.KalmanFilter直接对象。

例子

全部折叠

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

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

videoReader = videoReader (“singleball.mp4”);放像机= vision.VideoPlayer (“位置”[100100500400]);foregroundDetector = vision.ForegroundDetector (“NumTrainingFrames”10“InitialVariance”, 0.05);blobAnalyzer = vision.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(videoReader) colorImage = readFrame(videoReader);= step(foregroundDetector, rgb2gray(im2single(colorImage)));detectedLocation =步骤(blobAnalyzer foregroundMask);isobjectdetection = size(detectedLocation, 1)如果~ isTrackInitialized如果isobjectdetect 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 =预测(kalmanFilter);标签=“预测”;结束circle = [trackedLocation, 5];结束colorImage = insertObjectAnnotation (colorImage,“圆”,圆,标签,“颜色”,“红色”);步骤(放像机、colorImage);暂停(0.1);结束

释放资源。

释放(放像机);

输入参数

全部折叠

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

数据类型:字符

对象的初始位置,指定为数值向量。这个参数也决定了坐标系统的维数。例如,如果你指定初始位置为一个二元向量,[x0,y0],则设二维坐标系。

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

初始估计不确定方差,指定为一个二元或三元向量。初始估计误差指定了被跟踪对象的位置、速度和加速度的初始估计的方差。函数假设在您设置的位置上,对象的初始速度和加速度为零InitialLocation财产。您可以设置InitialEstimateError近似值:

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

这一特性的值影响卡尔曼滤波的最初几个检测。然后,估计误差由噪声和输入数据决定。较大的初始估计误差值有助于卡尔曼滤波器更快地适应检测结果。然而,一个较大的值也阻止卡尔曼滤波器去噪从最初的几个检测。

将初始估计误差指定为等速的两元向量或等速的三元向量:

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

数据类型:|

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

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

数据类型:|

检测位置的偏差,指定为标量。它与用于检测物理对象的技术直接相关。增加了MeasurementNoise值使卡尔曼滤波器从检测中去除更多的噪声。然而,这也可能会导致卡尔曼滤波器与你选择的运动模型过于接近,对检测结果不那么重视。该特性的值保持不变,因此可能会影响卡尔曼滤波器的长期性能。

数据类型:|

输出参数

全部折叠

配置卡尔曼滤波器,返回为avision.KalmanFilter对象跟踪。

算法

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

InitialLocation属性对应于卡尔曼滤波状态空间模型中使用的测量向量。这个表表示测量向量,,以状态空间模型为卡尔曼滤波。
状态转换模型,一个,测量模型,H

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

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

H=blkdiag(H年代_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=诊断接头(repmat(InitialError, (1,)))
过程噪声协方差,:
=诊断接头(repmat(MotionNoise, (1,)))
测量噪声协方差,R:
R=诊断接头(repmat(MeasurementNoise, (1,)))。

介绍了R2012b