2012-08-24 31 views
6

我有一個平面標記,我已經運行了SIFT算法來提取要素。然後我運行探測器在場景中查找此標記並再次提取特徵。我匹配點並使用findHomography()從與OpenCV匹配的對中提取單應性使用計算的單應性投影從標記到圖像的2D點

現在我想項目的標誌中檢測與計算單應以比較從現場測量的三維點的位置,並計算投影誤差的2D點。我對像素座標,釐米,校準矩陣感到困惑,我不知道應該先做哪些轉換。

有沒有人知道這個鏈接或可以解釋的方法?

回答

6

如果您稱單應性矩陣H,相機矩陣K(需要轉換爲像素)將會是這樣的,這取決於您的分辨率。

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; 

如果你的標記點的2D矢量點:

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

,投射會是這樣,結果在像素3D點座標。

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