, когда я пытаюсь использовать фильтр Калмана opencv для отслеживания цели. Моя первоначальная настройка выглядит следующим образом: deltaTime = 1/30 # время примерно для одного кадра = np.zeros ((4, 1), np.float32) measure = np.zeros ((2, 1), np.float32 )
kalman = cv2.KalmanFilter (4, 2, 0) #control vector = 0, предположить линейное движение.
kalman.measurementMatrix = np.array ([[1,0,0 , 0], [0,1,0,0]], np.float32)
kalman.transitionMatrix = np.array ([[1,0, deltaTime, 0], [0,1,0 , deltaTime], [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 Я могу правильно отслеживать цель, когда измерение / наблюдение объекта существует. Однако когда объект теряется в кадре, предсказание фильтра Калмана остается постоянным в последней известной позиции цели. То есть компонент прогнозирования фильтра Калмана не работает в моем случае. Код для обнаружения и отсутствия обнаружения показан ниже:
***state = kalman.predict() #get the new predicted state from the previous state
if ini.detection==1:
ini.measureCentreV2[0] = currentX
ini.measureCentreV2[1] = currentY
state = kalman.correct(ini.measureCentreV2) #correct the newly predicted state, and use this as the next input for the prediction
else: #when no detection, velocity will update with an interval of a single seconds
state[2]=ini.latestVelX
state[3]=ini.latestVelY
kalman.statePost = state***
В основном проблема заключается в том, что мой код способен хорошо отслеживать цель, когда она ничем не заблокирована, однако, однажды go через любое препятствие результат прогноза перестанет меняться и продолжит давать последнюю увиденную позицию цели. Пока цель не появится снова, отслеживание не возобновится.