0
Opencvカルマンフィルタの実装を使用して、ノイズポイントを滑らかにすることができます。だから私はそれのための簡単なテストをコード化しようとしました。cv2.kalmanが正しく動作しない
私は観察(ポイント)を持っているとしましょう。各フレーム私は新しい観測を受けている、私はカルマン予測とカルマン正しいと呼びます。 opencvカルマンフィルタが正しい状態になった後の状態は、「ポイントに従う」。しかしコードはweelを動作させません。無限ループのように見える出力はありません。だから、誰かがいくつかのヒントを与えることができます、ありがとう。以下 は私のコードです:
import cv2
import numpy as np
frame = np.zeros((800,800),np.uint8)
last_measure = current_measure = np.array((2,1),np.float32)
last_predict = current_predict = np.zeros((2,1),np.float32)
predict = []
measure = []
X = np.array([[1,0,0,0],[0,1,0,0]],np.float32)
def move(x,y):
global frame, last_measure, current_measure, measure,
current_predict, last_predict
last_predict = current_predict
last_measure = current_measure
predict.append([int(last_predict[0]),int(last_predict[1])])
measure.append([int(last_measure[0]),int(last_measure[1])])
current_measure = np.array([[np.float32(x)],[np.float32(y)]])
kalman.correct(current_measure)
current_predict = kalman.predict()
lmx,lmy = last_measure[0],last_measure[1]
cmx,cmy = current_measure[0],current_measure[1]
cpx,cpy = current_predict[0],last_predict[1]
lpx,lpy = last_predict[0],last_predict[1]
cv2.line(frame, (lmx,lmy), (cmx,cmy), (0,100,0))
cv2.line(frame, (lpx,lpy), (cpx,cpy), (0,0,200))
print(current_predict)
cv2.namedWindow("kalman")
kalman = cv2.KalmanFilter(4,2)
kalman.measurementMatrix = np.array([[1,0,0,0],[0,1,0,0]],np.float32)
kalman.transitionMatrix = np.array([[1,0,1,0],[0,1,0,1],[0,0,1,0],
[0,0,0,1]],np.float32)
kalman.processNoiseCov = np.array([[1,0,0,0],[0,1,0,0],[0,0,1,0],
[0,0,0,1]],np.float32) * 0.03
for item in bound:
move(item[0],item[1])
while True:
cv2.imshow("frame",frame)