Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何配置卡尔曼滤波器矩阵来跟踪移动输送机上的对象_Matlab_Opencv_Image Processing_Computer Vision_Kalman Filter - Fatal编程技术网

Matlab 如何配置卡尔曼滤波器矩阵来跟踪移动输送机上的对象

Matlab 如何配置卡尔曼滤波器矩阵来跟踪移动输送机上的对象,matlab,opencv,image-processing,computer-vision,kalman-filter,Matlab,Opencv,Image Processing,Computer Vision,Kalman Filter,我正在建立一个视觉传送系统,用于在我的项目工作中计算类似的小物体。 目标检测是平滑的。但我在跟踪部分有问题 背景: 输送机:单向,恒定速度为1.5英尺/秒 摄像机:Logitech c920,分辨率为800x600px,每秒30帧 跟踪对象:矩形20mm x 10mm 对象仅在视野中停留约8帧 代码工作流: 如果我以每秒30帧的速度拍摄连续视频,每个对象(质心)的移动距离精确到每帧52像素。 在离线模式(处理保存的视频)下,我可以简单地通过向每个跟踪对象的质心.x添加52个像素来预测下一个位置

我正在建立一个视觉传送系统,用于在我的项目工作中计算类似的小物体。 目标检测是平滑的。但我在跟踪部分有问题

背景:

  • 输送机:单向,恒定速度为1.5英尺/秒
  • 摄像机:Logitech c920,分辨率为800x600px,每秒30帧
  • 跟踪对象:矩形20mm x 10mm
  • 对象仅在视野中停留约8帧
  • 代码工作流:

    如果我以每秒30帧的速度拍摄连续视频,每个对象(质心)的移动距离精确到每帧52像素。 在离线模式(处理保存的视频)下,我可以简单地通过向每个跟踪对象的
    质心.x
    添加52个像素来预测
    下一个位置

    但是,当我上网时,由于处理时间的原因,帧速率下降到15-20 FPS。 因此,对象的
    下一个位置
    从80到200像素/帧不等。 现在我必须动态预测下一个位置,因此我选择卡尔曼滤波


    问题陈述:

    我的问题是将卡尔曼矩阵配置到我的“等速单向系统模型”。 (由于振动,y轴的变化非常小,最大为0到5像素)

    物体的速度不会有误差,但不规则 帧捕获事件导致预测帧的错误 下一个地点

    我读了很多教程,比如,等等。在每一个教程中,我都能清楚地理解卡尔曼滤波器可以做什么,关于它如何通过状态方程进行预测,但矩阵填充部分对我来说似乎超级复杂

    在一些实现代码中,比如,或者,我可以看到所有的矩阵都被填充,但是我不知道哪个矩阵的哪个元素需要更改以满足我的需求

    明确提供了恒速度和恒加速度运动模型的矩阵,并在脱机模式下适当地预测了我的对象

            stateTransitionModel= [1 1 0 0 ; 0 1 0 0 ; 0 0 1 1 ; 0 0 0 1];
            measurementModel = [1 0 0 0 ; 0 0 1 0];
            state=[centroid(1);0;centroid(2);0];
            stateCovariance=[20 0 0 0; 0 5 0 0; 0 0 20 0; 0 0 0 5];
            processNoise= [100 0 0 0; 0 25 0 0; 0 0 100 0; 0 0 0 25];
            measurementNoise= [100 0; 0 100]
    
    但是,当我在OpenCV-C++中使用相同的6个矩阵时,卡尔曼滤波器甚至没有预测单个<代码> NExtEXLoC < /代码>。它只是指向每个质心的前一个位置

    如果有人能解释一下矩阵是如何 矩阵元素对系统建模有什么影响 配置应用于“恒定速度, 我提到的“单向”输送机设置,错误在哪里 是由相机的变化帧速率引起的

    我所有问题的列表:

  • 如何在openCV中为等速模型配置状态转换和测量矩阵

  • 帧速率引起的误差应建模为过程噪声还是测量噪声?如何为它们分配适当的矩阵值

  • 我的初始状态协方差应该是多少


  • 抱歉问了太多问题。我真的试图自己找到答案,但我有限的数学知识无法弥合理论和代码之间的鸿沟。

    如果你知道图像的时间戳,你可以计算每次的恒定偏移量,不是吗?我想卡尔曼滤波器也需要时间戳。该死的,是的!那也许行得通。我太专注于基于卡尔曼滤波的预测,以至于错过了这个简单但非常有效的替代方案。计算上一帧的时差->基于时差计算偏移。天啊!!迫不及待地要实施您的解决方案。非常感谢。解决方案非常有效。谢谢,米卡,很高兴听到。你可以自己写答案,如果你愿意的话可以接受。我在找类似的东西,你做了吗?