[英]Opencv Python Kalman filter prediction outcome query
我一直在使用Opencv和python,我在使用背景減法和MOSSE的矩形上使用卡爾曼濾鏡,然后在此我將預測另一個顏色不同的矩形的下一個位置。 預測輸出偏移太多。
我已經編輯了不同的結果,主要問題是我不確定Opencv中的kalman實現,因為文檔不是很好,很難知道返回的內容。
這是我的Kalman方法(我看過示例,並且了解基本知識,但是我認為這應該是誠實的)。
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)
集中化是我在網上測試過的一種方法,它只是將點居中。
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
它應該考慮位置/速度-但只是不確定這些文檔以及在線資源。 任何幫助將不勝感激,謝謝。
我想我已經解決了,我相信它不是返回的中心點,而是新矩形左上角的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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.