2011-11-19 39 views
5

Tôi cố gắng kết hợp hai hình ảnh chồng chéo được chụp bằng máy ảnh. Để làm điều này, tôi muốn sử dụng OpenCV. Tôi đã trích xuất các tính năng với số SurfFeatureDetector. Bây giờ tôi cố gắng tính toán vector xoay và dịch giữa hai hình ảnh.OpenCV: Ước tính số máy ảnh

Theo như tôi biết, tôi nên sử dụng cvFindExtrinsicCameraParams2(). Thật không may, phương pháp này yêu cầu objectPoints làm đối số. Những objectPoints là các tọa độ thế giới của các tính năng được trích xuất. Chúng không được biết đến trong ngữ cảnh hiện tại.

Ai đó có thể cho tôi gợi ý cách giải quyết vấn đề này không?

Trả lời

8

Vấn đề tính toán đồng thời tư thế tương đối giữa hai hình ảnh và thế giới 3d chưa biết tọa độ đã được xử lý ở đây:

Berthold K. P. Horn. Định hướng tương đối được xem xét lại. Berthold K. P. Horn. Phòng thí nghiệm Trí tuệ nhân tạo, Viện Công nghệ, 545 nghệ Massachusetts ...

EDIT: đây là một liên kết đến bài báo: http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.64.4700

hãy xem câu trả lời của tôi cho một câu hỏi liên quan mà tôi đề xuất một giải pháp cho vấn đề này :

OpenCV extrinsic camera from feature points

EDIT: Bạn có thể muốn xem xét điều chỉnh bó quá,

http://en.wikipedia.org/wiki/Bundle_adjustment

Giả định rằng ước tính ban đầu là .

EDIT: Tôi tìm thấy một số tài nguyên mã bạn có thể muốn có một cái nhìn tại địa chỉ:

Resource I:

http://www.maths.lth.se/vision/downloads/

Hai Xem Geometry Ước với Outliers

Mã C++ để tìm định hướng tương đối của hai định cỡ máy ảnh trong sự hiện diện của các ngoại lệ.Các giải pháp thu được là tối ưu trong ý nghĩa rằng số lượng các inliers được tối đa hóa.

Resource II:

http://lear.inrialpes.fr/people/triggs/src/ định hướng tương đối từ 5 điểm: a C thói quen hơi bóng bảy hơn việc thực hiện các giải pháp tối thiểu cho định hướng tương đối của hai máy ảnh cỡ từ điểm 3D rõ. Cần có 5 điểm và có thể có tới 10 giải pháp khả thi (nhưng 2-5 là phổ biến hơn). Ngoài ra, yêu cầu một số quy trình CLAPACK cho đại số tuyến tính. Ngoài ra còn có một báo cáo kỹ thuật ngắn về điều này (đi kèm với nguồn).

Resource III:

http://www9.in.tum.de/praktika/ppbv.WS02/doc/html/reference/cpp/toc_tools_stereo.html vector_to_rel_pose Tính định hướng tương đối giữa hai camera cho thư từ điểm hình ảnh và các thông số camera nổi tiếng và tái tạo lại điểm không gian 3D.

+0

Cảm ơn bạn đã trả lời rất chi tiết của bạn! Đó là chính xác những gì tôi cần. – SecStone

2

Có một giải pháp lý thuyết, tuy nhiên, việc triển khai OpenCV của ước tính đặt ra máy ảnh thiếu các công cụ cần thiết.

Cách tiếp cận lý thuyết: Bước 1: trích xuất homography (ma trận mô tả biến đổi hình học giữa các hình ảnh). use findHomography() Bước 2. Phân hủy ma trận kết quả thành phép quay và dịch. Sử dụng cv :: resolvePnP();

Vấn đề: findHomography() trả về ma trận 3x3, tương ứng với phép chiếu từ mặt phẳng này sang mặt phẳng khác. Hàm resolvePnP() cần một ma trận 3x4, biểu diễn phép quay/dịch 3D của các đối tượng. Tôi nghĩ rằng với một số phép tính xấp xỉ, bạn có thể sửa đổi tệp giải nén để cung cấp cho bạn một số kết quả, nhưng nó đòi hỏi nhiều toán và hiểu biết rất tốt về hình học 3D.

Đọc thêm về tại http://en.wikipedia.org/wiki/Transformation_matrix

+0

Hình ảnh sẽ có liên quan bởi một homography nếu (i) Sự khác biệt duy nhất trong tư thế là xoay quanh trung tâm máy ảnh _or_ (ii) Cả hai hình ảnh mô tả một đối tượng phẳng làm đầy toàn bộ mặt phẳng hình ảnh. Nói chung, một homography không mô hình hóa sự chuyển đổi giữa các hình ảnh. – Rulle

+0

Những gì bạn mô tả ở đây là một biến đổi affine. Một homography là một biến đổi chung từ bất kỳ vị trí 3D nào đến bất kỳ vị trí 3D nào khác. Nó được mô tả hoàn toàn bằng ma trận 4x4. Tuy nhiên, nếu bạn áp dụng một số ràng buộc cho phép biến đổi (giống như tất cả chúng phải nằm trong cùng một mặt phẳng), bạn chỉ có thể sử dụng ma trận 3x3. – Sam

+0

Ồ, tôi nghĩ bạn có nghĩa là ma trận homography 3x3 liên quan đến các điểm ảnh 2d được biểu diễn với các tọa độ đồng nhất giữa hai hình ảnh. – Rulle

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