2012-09-30 45 views
5

Tôi đã chụp hai hình ảnh từ hai máy ảnh cùng loại được đặt cách nhau một khoảng, chụp cùng một cảnh. Tôi muốn tính toán vòng xoay thế giới thực và bản dịch giữa hai camera. Để đạt được điều này, trước tiên tôi đã trích xuất các tính năng SIFT của cả hai hình ảnh và kết hợp chúng.Hình ảnh nhiều chế độ xem

Tôi hiện có ma trận cơ bản cũng như ma trận đồng tính. Tuy nhiên không thể tiến xa hơn, rất nhiều nhầm lẫn. Ai có thể giúp tôi để ước tính xoay và dịch ở giữa hai máy ảnh?

Tôi đang sử dụng OpenCV để tính năng trích xuất và đối sánh, tính toán phép so sánh.

Trả lời

5

Nếu bạn có Homography thì bạn cũng có vòng quay. Một khi bạn có homography nó ​​rất dễ dàng để có được ma trận xoay và dịch thuật.

Ví dụ, nếu bạn đang sử dụng OpenCV C++:

param[in] H 
param[out] pose 
void cameraPoseFromHomography(const Mat& H, Mat& pose) 
{ 
    pose = Mat::eye(3, 4, CV_32FC1);  // 3x4 matrix, the camera pose 
    float norm1 = (float)norm(H.col(0)); 
    float norm2 = (float)norm(H.col(1)); 
    float tnorm = (norm1 + norm2)/2.0f; // Normalization value 

    Mat p1 = H.col(0);  // Pointer to first column of H 
    Mat p2 = pose.col(0); // Pointer to first column of pose (empty) 

    cv::normalize(p1, p2); // Normalize the rotation, and copies the column to pose 

    p1 = H.col(1);   // Pointer to second column of H 
    p2 = pose.col(1);  // Pointer to second column of pose (empty) 

    cv::normalize(p1, p2); // Normalize the rotation and copies the column to pose 

    p1 = pose.col(0); 
    p2 = pose.col(1); 

    Mat p3 = p1.cross(p2); // Computes the cross-product of p1 and p2 
    Mat c2 = pose.col(2); // Pointer to third column of pose 
    p3.copyTo(c2);  // Third column is the crossproduct of columns one and two 

    pose.col(3) = H.col(2)/tnorm; //vector t [R|t] is the last column of pose 
} 

chức năng này tính toán de camera đặt ra từ homography, trong đó luân chuyển được chứa. Để biết thêm thông tin lý thuyết, hãy theo dõi số thread này.

+0

Cảm ơn bạn @Jav_Rock, câu trả lời của bạn đã giúp tôi ước tính tư thế. Tuy nhiên đối với bất kỳ bộ ảnh đặt ra ma trận là đến cùng, ba cột đầu tiên tạo thành một ma trận nhận dạng và cột cuối cùng là trống rỗng. Bạn có bất kỳ ý tưởng về điều này? – Aarambh

+0

Tôi cũng đã xác nhận ma trận homography bằng cách sử dụng warpAffine, nó ánh xạ chính xác chế độ xem của hình ảnh này sang hình ảnh khác. – Aarambh

+0

@ user1709317: 'H' và' pose' cần phải có cùng định dạng. Bạn có thể sẽ nhận được kết quả mong muốn nếu bạn thay đổi 'CV_32FC1'->' CV_64FC1'. – bjoernz

Các vấn đề liên quan