2017-10-06 9 views
0

나는 오픈 CV의 칼만 필터를 파이썬으로 사용하려고합니다. "올바른"기능을 호출 할 때마다 충돌이 발생합니다. 아래의 코드는 자명하다고 생각합니다.OpenCV KalmanFilter Python3이 작동하지 않습니다

나야? OpenCV? 파이썬 바인딩 (즉, C++에서 작동하겠습니까?)

도움을 환영합니다. 더미 코드와 출력은 내가 측정 매트릭스 및 측정을 혼동 아래 또는 on github

#!/usr/bin/env python3 
import numpy as np 
import cv2, numpy as np 
kalman = cv2.KalmanFilter(3,3,3,cv2.CV_64F)  #Declare 3 dynamical   parameter 3 state parameter 3 control parameter 
kalman.transitionMatrix=1.0*np.eye(3)   #Transition set to identity only the control and the noise are changing the state 
#Dummy measurement matrix, 3 measurement each times ! 
kalman.measurementMatrix=np.matrix([[1.0,2.2,3.10], 
       [1.1,2.2,3.30], 
       [1.2,2.4,3.70], 
       [1.3,2.430,3.50], 
       [1.5,2.50,3.340], 
       [1.5,2.60,3.70], 
       [1.7,2.0,3.30], 
       [1.9,2.30,3.20], 
       [1.0,2.40,3.50], 
       [1.3,2.60,3.60], 
       [1.4,2.20,3.20], 
       [1.6,2.0,3.20]]) 

kalman.measurementNoiseCov=1.1*np.eye(3) 
kalman.processNoiseCov=1.2*np.eye(3) 
kalman.controlMatrix=1.0*np.eye(3) 

uk=np.matrix([[0.0], 
    [1.2], 
    [1.4]]) 

print("Now checking") 
print("Measurement Matrix") 
print(kalman.measurementMatrix) 
print("Transition Matrix") 
print(kalman.transitionMatrix) 
print("MeasurementNoiseCov") 
print(kalman.measurementNoiseCov) 
print("ProcessNoiseCov") 
print(kalman.processNoiseCov) 
print("ControlMatrix") 
print(kalman.controlMatrix) 

print("Now attempted to make use of the underdocumented kalman filter in opencv with python ;)") 
predicted=kalman.predict(uk) 
print("Predicted:") 
print(predicted) 
print("Will (try to) correct by feeding directly the predicted to correction") 
print("So here OpenCV is telling me that KF can not correct its own prediction even though the KF here has same number of dynamical,state and control parameters ?\n...") 
estimated=kalman.correct(predicted) 

출력 (단지 충돌 선)

OpenCV Error: Assertion failed (C.type() == type && (((flags&GEMM_3_T) == 0 && C.rows == d_size.height && C.cols == d_size.width) || ((flags&GEMM_3_T) != 0 && C.rows == d_size.width && C.cols == d_size.height))) in gemm, file /io/opencv/modules/core/src/matmul.cpp, line 1588 
Traceback (most recent call last): 
    File "./opencvhorror.py", line 46, in <module> 
estimated=kalman.correct(predicted) 
cv2.error: /io/opencv/modules/core/src/matmul.cpp:1588: error: (-215) C.type() == type && (((flags&GEMM_3_T) == 0 && C.rows == d_size.height && C.cols == d_size.width) || ((flags&GEMM_3_T) != 0 && C.rows == d_size.width && C.cols == d_size.height)) in function gemm 
+0

오류의 전체 스택 추적을 포함하여 출력을 포함하십시오. –

+0

죄송합니다, 질문을 편집하고 출력을 추가했습니다. 이전에 했어야 했어. – user198530

답변

0

좋아 내 어리석은 실수 ... 있습니다 ... . 따라서 행렬의 크기가 올바르지 않습니다.