opencv 칼만 필터 예제

그래서 소음에 더 면역이 되는 2D 트래커를 만들고 싶었습니다. 이를 위해 4 개의 동적 매개 변수와 2 개의 측정 매개 변수 (제어 없음)가있는 Kalman 필터를 설정했는데, 여기서 내 측정은 물체의 2D 위치, 동적 은 2D 위치 및 2D 속도입니다. 매우 간단하고 전환 행렬도 간단합니다. OpenCV는 칼만 필터와 같은 사용하기가 정말 쉽지 않은 좋은 강력한 수학적 도구를 가지고 있습니다. 이 짧은 가이드가 « 추적 프로젝트 »에서 사용하는 데 도움이되기를 바랍니다. 당신이 어떤 의심이있는 경우 저에게 연락하기 위해 내 이메일 주소 (developer@myzhar.com)를 사용하여 주시기 바랍니다. 여기에 만 opencv gui 기능을 사용하는 버전입니다, 리눅스에서 작동하게:#include « opencv2/ highgui/highgui.hpp »#include « opencv2/비디오/tracking.hpp »#define drawCross (중앙, 색상, d) line(@img, Point.x – d, center.y – d), Point(center.x, center.y – d), Point(center.x + + d) , center.y + d), 색상, 2, CV_AA, 0); line(img, Point.x + d, center.y- d), Point.x – d, center.x – d, 색상, 2, CV_AA, 0)네임스페이스 cv;를 사용하여 네임스페이스 std; Point mousePos;void mouseCallback(int 이벤트, int 이벤트, int x, int y, int 플래그, void* 사용자 데이터) { 경우 ( 이벤트 == EVENT_MOUSEMOVE) { mousePos.x = x; mousePos.y = y; }} int main (){KalmanFilter KF (4, 2, 0);///KF의 인티리얼화… KF.transitionMatrix = *(Mat_(4, 4) << 1,0,1,0, 0,1,0,1, 0,0,1,0, 0,0,0,1); 매트_ 측정(2,1); 측정.setTo(스칼라(0)); KF.statePre.at(0) = 마우스Pos.x; KF.statePre.at(1) = 마우스Pos.y; KF.statePre.at(2) = 0; KF.statePre.at (3) = 0;setIdentity(KF.measurementMatrix);setIdentity(KF.processNoiseCov, 스칼라:모두(1e-4));setIdentity(KF.measurementNoiseCov, Scalar:all(10));setIdentity(KF.errorCovPost, Scalar:all));setIdentity(KF.errorCovPost, All))를 표시합니다. trackingMat img (600, 800, CV_8UC3); 벡터 마우스v,kalmanv;mousev.clear ();kalmanv.clear ();namedWindow ("마우스 칼만", 1);setMouseCallback ("마우스 칼만", 마우스 콜백, NULL);동안 (1){// 먼저 예측, 내부 상태를 업데이트하려면 매트 예측 = KF.predict(); 점 예측 Pt(예측.at(0), 예측.at(1)); 마우스 포인트 측정(0) = mousePos.x; 측정(1) = 마우스Pos.y; 업데이트 단계 매트 추정 = KF.correct(측정); 포인트 상태Pt(추정.at(0), 추정.at(1)); 포인트 measPt(측정(0), 측정(1)); 플롯 포인트 imshow ("마우스 칼만", img); img = 스칼라:::all(0); mousev.push_back(measPt); 칼만브.푸시_백(statePt); 드로크로스(스테이트Pt, 스칼라(255,255,255), 5); 드로크로스(measPt, 스칼라(0,0,255), 5); (int i = 0; i < mousev.size(-1; i++) 라인(img, mousev[i], mousev[i+1], 스칼라(255,255,0), 1); (int i = 0; i < kalmanv.size(-1; i++) 라인(img, 칼만브[i], 칼만프[i+1]), 스칼라(0,155,255), 1); 웨이트 키 (10);} 반환 0;} 클래스는 표준 Kalman 필터 http://en.wikipedia.org/wiki/Kalman_filter [205]를 구현합니다. 그러나 트랜지션매트릭스, 컨트롤매트릭스 및 측정매트릭스를 수정하여 칼만 필터 기능을 확장할 수 있습니다. 실제 Kalman 필터 구현 친구인가? 212 호선에서 229 줄까지 추적 결과를 표시합니다.