我正在研究先进的视觉系统,它包括两个静态相机(用于获得准确的三维物体位置)和一些瞄准装置。物体检测和立体视觉模块已经完成。不幸的是,由于目标系统的延迟,必须开发一个合适的预测模块。
我使用卡尔曼滤波器进行了一些测试,但它的工作不够准确。
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
我注意到两帧之间的时间段每次都不同(由于各种检测时间)。
我可以提供示例输入3d点。
提前致谢
答案 0 :(得分:1)
通过预测矩阵控制步长。您还需要调整过程噪声协方差矩阵以控制不确定性增长。
您正在使用恒速预测模型,因此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
项。
您可以采用两种不同的方法:
如果您询问如何预测相机的检测时间,那应该是一个不同的问题,我恐怕无法帮助您: - )