问题描述
我有一个 CV 跟踪算法,可以实时为我提供感兴趣对象(红球)质心的 2D 坐标。我想使用卡尔曼滤波器来获取下一帧(未来)中球的预测坐标。
问题是我不知道我是否应该:
- 预测(状态 k),纠正(状态 k),然后再次预测(状态 k+1)。
- 纠正(状态 k),然后预测(状态 k+1)。
- 预测(状态 k),正确(状态 k)。
前两种方法给了我不错的结果。然而,在最后一种方法中获得的结果实际上与测量相同(我猜这是因为我没有对下一个未来状态 k+1 进行预测)。
使用卡尔曼滤波器获得下一帧(未来状态 k+1)中球的预测坐标的正确方法是什么?
使用的代码:
卡尔曼滤波器的初始化:
kf = cv2.KalmanFilter(4,2) #position x,y and veLocity x,y
kf.measurementMatrix = np.array([[1,0],[0,1,0]],np.float32)
kf.transitionMatrix = np.array([[1,1],1]],np.float32)
kf.processNoiseCov =1*np.array([[1,np.float32)
kf.measurementNoiseCov = 1*np.array([[1,np.float32)
第一种方法:
def Estimate(kf,x,y):
predicted = kf.predict()
measured = np.array([[np.float32(coordX)],[np.float32(coordY)]])
estimate=kf.correct(measured)
predicted = kf.predict()
return predicted
第二种方法:
def Estimate(kf,y):
measured = np.array([[np.float32(coordX)],[np.float32(coordY)]])
estimate=kf.correct(measured)
predicted = kf.predict()
return predicted
注意:每次获得一对新坐标时,都会在 while 循环中调用函数 Estimate。
编辑:在这些链接中,您可以分别看到第一种和第二种方法的结果: First approach Second approach
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)