gpt4 book ai didi

opencv - 使用卡尔曼滤波器的 3D 对象位置预测,可变时间段

转载 作者:行者123 更新时间:2023-12-02 17:44:10 27 4
gpt4 key购买 nike

我正在研究高级视觉系统,该系统由两个静态相机(用于获取准确的 3d 对象位置)和一些目标设备组成。物体检测和立体视觉模块已经完成。不幸的是,由于目标系统的延迟,必须开发适当的预测模块。

我使用卡尔曼滤波器做了一些测试,但它的工作不够准确。

kalman = cv2.KalmanFilter(6,3,0)
...
kalman.statePre[0,0] = x
kalman.statePre[1,0] = y
kalman.statePre[2,0] = z
kalman.statePre[3,0] = 0
kalman.statePre[4,0] = 0
kalman.statePre[5,0] = 0

kalman.measurementMatrix = np.array([[1,0,0,0,0,0],[0,1,0,0,0,0],[0,0,1,0,0,0]],np.float32)

kalman.transitionMatrix = np.array([[1,0,0,1,0,0],[0,1,0,0,1,0],0,0,1,0,0,1],[0,0,0,1,0,0],[0,0,0,0,1,0],[0,0,0,0,0,1]],np.float32)

kalman.processNoiseCov = np.array([[1,0,0,0,0,0],[0,1,0,0,0,0],0,0,1,0,0,0],[0,0,0,1,0,0],[0,0,0,0,1,0],[0,0,0,0,0,1]],np.float32) * 0.03


kalman.measurementNoiseCov = np.array([[1,0,0],[0,1,0],0,0,1]],np.float32) * 0.003

我注意到两帧之间的时间段每次都不同(由于检测时间不同)。
  • 我如何使用最后一个时间戳差异作为输入? (转换矩阵?,controlParam?)
  • 我想确定预测时间,例如想在 0.5 秒或 1.5 秒内预测对象的位置

  • 我可以提供示例输入 3d 点。

    提前致谢

    最佳答案

    1. 我如何使用最后一个时间戳差异作为输入? (转换矩阵?,controlParam?)

    通过预测矩阵控制步长。您还需要调整过程噪声协方差矩阵以控制不确定性增长。

    您正在使用恒速预测模型,因此 p_x(t+dt) = p_x(t) + v_x(t)·dt将以时间步长 dt 预测 X 中的位置(对于坐标也是如此。Y 和 Z)。在这种情况下,您的预测矩阵应该是:

    kalman.transitionMatrix = np.array([[1,0,0,dt,0,0],[0,1,0,0,dt,0],0,0,1,0,0,dt],[0,0,0,1,0,0],[0,0,0,0,1,0],[0,0,0,0,0,1]],np.float32)

    我离开了过程噪音 cov。制定作为练习。小心平方或不平方 dt学期。

    2. 我想确定预测时间,例如想在 0.5 秒或 1.5 秒内预测物体的位置

    您可以采用两种不同的方法:
  • 使用一个小的固定 dt(例如 50Hz 为 0.02 秒)并循环计算预测,直到达到目标(例如,从相机中获得新的观察结果)。
  • 在线调整预测和处理噪声矩阵到所需的 dt(在您的问题中为 0.5/1.5 秒)并执行单个预测步骤。

  • 如果您询问如何预测相机的检测时间,那应该是一个不同的问题,恐怕我无法帮助您:-)

    关于opencv - 使用卡尔曼滤波器的 3D 对象位置预测,可变时间段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38899054/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com