Opencv Python卡尔曼滤波器预测结果查询
Posted
技术标签:
【中文标题】Opencv Python卡尔曼滤波器预测结果查询【英文标题】:Opencv Python Kalman filter prediction outcome query 【发布时间】:2019-04-21 19:22:41 【问题描述】:我一直在将 Opencv 与 python 一起使用,我在一个矩形上使用卡尔曼滤波器,我使用背景减法和 MOSSE,然后在此我将用另一个矩形预测下一个位置颜色。预测输出偏移量太大。
我编辑了不同的结果,主要问题是我不确定 Opencv 中的卡尔曼实现,因为文档不是很好,很难知道它返回什么。
这是我的卡尔曼方法(我查看了示例,并且了解了基础知识,但老实说,我认为这应该可行)。
kf = cv2.KalmanFilter(4, 2)
kf.measurementMatrix = np.array([[1, 0, 0, 0], [0, 1, 0, 0]], np.float32)
kf.transitionMatrix = np.array([[1, 0, 1, 0], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]], np.float32)
def Estimate(self, coordX, coordY):
measured = np.array([[np.float32(coordX)], [np.float32(coordY)]])
self.kf.correct(measured)
predicted = self.kf.predict()
return predicted
然后每个盒子发现我运行这个
kalmanPredict = Kalman().Estimate(newbox[0],newbox[1])
kalmanPredict[0] = kalmanPredict[0] + newbox[0]
kalmanPredict[1] = kalmanPredict[1] + newbox[1]
p = np.asarray(self.centralize((p1,p2), (kalmanPredict[0],kalmanPredict[1])))
p = np.int0(p)
kpt1 = p[0],p[1]
kpt2 = p[2],p[3]
cv2.rectangle(frame, kpt1, kpt2, (255,0,0),2)
centralize 是我在网上测试的一种方法,它只是将点居中。
def centralize(self, box, c):
pt1, pt2 = box
xA, yA = pt1
xB, yB = pt2
cx, cy = c
w = xB - xA
h = yB - yA
halfW = int(w/2)
halfH = int(h/2)
xA = cx - halfW
yA = cy - halfH
xB = xA + w
yB = yA + h
return xA, yA, xB, yB
它应该考虑位置/速度 - 但只是不确定这些文档和在线资源。任何帮助将不胜感激,谢谢。
【问题讨论】:
蓝色框为卡尔曼滤波器,红色为苔藓,绿色为背景减除。 【参考方案1】:我想我已经解决了,我相信它不是它返回的中心点,它是新矩形左上角的 xy 坐标 - 所以我只是在第二个边界框 x 中添加了宽度和高度, y 坐标。
kalmanPredict = Kalman().Estimate(newbox[0],newbox[1])
kalx1 = kalmanPredict[0]
kaly1 = kalmanPredict[1]
kal1 = (kalx1, kaly1)
kalx = kalmanPredict[0] + w
kaly = kalmanPredict[1] + h
kal2 = (kalx, kaly)
cv2.rectangle(frame, kal1, kal2, (255,0,0),2)
【讨论】:
以上是关于Opencv Python卡尔曼滤波器预测结果查询的主要内容,如果未能解决你的问题,请参考以下文章