2012-08-24 36 views
6

Tôi có điểm đánh dấu phẳng, nơi tôi đã chạy thuật toán SIFT để trích xuất các đối tượng địa lý. Sau đó, tôi chạy một máy dò để tìm điểm đánh dấu này trong cảnh và trích xuất lại các tính năng. Tôi phù hợp với các điểm và trích xuất homography từ các cặp phù hợp với OpenCV sử dụng findHomography().Chiếu điểm 2D từ điểm đánh dấu đến hình ảnh với tính toán homography

Bây giờ tôi muốn chiếu các điểm 2D được phát hiện trong điểm đánh dấu bằng phép tính homography để so sánh các vị trí với các điểm 3D được đo từ hiện trường và tính toán lỗi reprojection. Tôi bối rối với các tọa độ pixel, centimet, ma trận hiệu chuẩn, tôi không biết tôi nên chuyển đổi chuyển đổi nào trước tiên.

Có ai biết liên kết này hoặc có thể giải thích phương pháp này không?

Trả lời

6

Nếu bạn gọi ma trận homography H, ma trận máy ảnh K (cần để chuyển đổi thành pixel) sẽ giống như thế này, tùy thuộc vào độ phân giải của bạn.

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; 

Nếu điểm đánh dấu của bạn là những điểm vector 2D:

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

thì chiếu sẽ là như thế này, với kết quả một điểm 3D theo pixel tọa độ.

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 
Các vấn đề liên quan