2012-08-24 15 views
6

Mam marker planarny, na którym uruchomiłem algorytm SIFT, aby wyodrębnić funkcje. Następnie uruchamiam wykrywacz, aby znaleźć ten znacznik w scenie i wyodrębnić funkcje ponownie. Dopasowuję punkty i wyodrębniam homilię z dopasowanych par za pomocą OpenCV, używając findHomography().Wyświetlanie punktu 2D od znacznika do obrazu z homografią komputerową

Teraz chcę rzutować punkty 2D wykryte w znaczniku z obliczoną homografią, aby porównać pozycje z punktami 3D mierzonymi od sceny i obliczyć błąd reprojection . Jestem zmieszany ze współrzędnymi piksela, centymetrami, macierzami kalibracyjnymi, nie wiem, które konwersje należy wykonać jako pierwsze.

Czy ktoś zna link na ten temat lub może wyjaśnić tę metodę?

Odpowiedz

6

Jeśli wywołasz macierz homograficzną H, macierz kamery K (potrzebna do przekonwertowania na piksele) będzie wyglądała mniej więcej tak, w zależności od rozdzielczości.

Mat K= Mat::zeros(3,3,CV_32FC1); 
K.at<float>(0,0)=500.0f;   
K.at<float>(0,2)=320.0f;  // width/2  
K.at<float>(1,1)=500.0f;  
K.at<float>(1,2)=240.0f;  // height/2 
K.at<float>(2,2)=1.0f; 

Jeśli punkty obrysowe są punkty wektorowe 2D:

vector<Point2f> marker_point; //containing coordinates in centimeters 

następnie projekcja będzie jak ten, w związku z punktem w 3D współrzędnych pikseli.

Mat point(3,1,CV_32FC1);   
point.at<float>(0) = marker_point.x; 
point.at<float>(1) = marker_point.y; 
point.at<float>(2) = 1.0f; 
point = H* point; 
point = point/point.at<float>(2);  //Normalize 
point = K* point;     //to pixels 
Powiązane problemy