Làm thế nào để tính toán tư thế máy ảnh từ ma trận Homography?


13

Nói rằng tôi chỉ sử dụng một máy ảnh hiệu chỉnh. Từ máy ảnh này, tôi nhận được hình ảnh A và B. Tôi biết hình ảnh tương đồng giữa A và B, được tính toán thông qua findHomography () của OpenCV .

Tôi biết tư thế (ma trận xoay R và vectơ dịch t) của hình ảnh A và tôi cần tư thế của hình ảnh B. Khi tôi nhận được nó, tôi cho rằng tôi sẽ có thể tính toán mọi tư thế tiếp theo của các hình ảnh sau.

Bạn có biết việc thực hiện tư thế điện toán B không? Tôi đã tìm thấy một số bài viết trên web, nhưng tôi không thể tìm thấy một giải pháp dễ thực hiện ...


Tôi không chắc rằng tôi hiểu cách sử dụng mã của bạn. Tôi sử dụng OpenCV để lấy Homography, nhưng khi tôi gửi Homography đó thông qua thuật toán, nó luôn trả về cái này. cameraPose [1, 0, 0, 0; 0, 1, 0, 0; 0, 0, 1, 0]
LeRoss

Câu trả lời:


7

Ngay cả khi câu trả lời của tôi đến quá muộn với bạn, có thể người khác thấy điều này hữu ích. Tôi có mã cho một OpenCV Pose từ Homography. Tôi tìm thấy phương pháp tại trang web thực sự hữu ích này, euclideanspace .

void cameraPoseFromHomography(const Mat& H, Mat& pose)
{
    pose = Mat::eye(3, 4, CV_64FC1); //3x4 matrix
    float norm1 = (float)norm(H.col(0)); 
    float norm2 = (float)norm(H.col(1));
    float tnorm = (norm1 + norm2) / 2.0f;

    Mat v1 = H.col(0);
    Mat v2 = pose.col(0);

    cv::normalize(v1, v2); // Normalize the rotation

    v1 = H.col(1);
    v2 = pose.col(1);

    cv::normalize(v1, v2);

    v1 = pose.col(0);
    v2 = pose.col(1);

    Mat v3 = v1.cross(v2);  //Computes the cross-product of v1 and v2
    Mat c2 = pose.col(2);
    v3.copyTo(c2);      

    pose.col(3) = H.col(2) / tnorm; //vector t [R|t]
}

////


Tôi đã sử dụng hàm của bạn trong mã của mình. Ma trận áp dụng được tính theo cách này luôn luôn là [1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 0]. Bạn có lời giải thích nào không?
Muhammet Ali Asan

Bạn đang sử dụng tư thế của A? Có vẻ như bạn chỉ đang sử dụng đầu vào H
Guig


0

Bạn có thể sử dụng phương pháp phân rã Homography được triển khai trong Opencv 3.0+

decomposeHomographyMat

  • Chức năng của Opencv trả về tập hợp các phép quay, định mức camera và ma trận dịch có thể.
  • Bạn phải chọn bộ chính xác trong số chúng bằng cách so sánh các tiêu chuẩn máy ảnh với máy ảnh bình thường của máy ảnh khi chụp ảnh đầu tiên
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.