2011-04-04 41 views
6

Tôi đang cố gắng viết một số mã sẽ tính ma trận cơ bản để xác định mối quan hệ giữa hình ảnh âm thanh nổi. Tôi bắt đầu với cuốn sách Hartley và Zisserman mà hầu hết mọi người đề nghị, nhưng nó không có bất kỳ ví dụ thực tế nào và mã mẫu cho nó là trong MATLAB mà tôi không có. Sau đó tôi chuyển sang An introduction to 3D Computer Vision Techniques and Algorithms, thực tế hơn và có các ví dụ thực tế trong đó. Tôi đã triển khai thuật toán 8 điểm được khuyến nghị sử dụng Python và gọn gàng, nhưng tôi đang gặp sự cố khi xác minh tính hợp lệ của nó.Cách tính ma trận cơ bản cho tầm nhìn stereo

Tôi đang sử dụng tập dữ liệu được liệt kê trên trang 48 (sử dụng liên kết ở trên để xem đoạn trích trên Google Sách) của cuốn sách đó. Khi tôi bình thường hóa các điểm, tôi nhận được kết quả tương tự như cuốn sách đó. Tuy nhiên, khi tôi sử dụng chức năng SVD NumPy để tính toán ma trận cơ bản, tôi nhận được giá trị sau cho F:

[[-0.01851684 -0.21631176 -0.67036356] 
[ 0.2605251 -0.01023853 0.14234079] 
[ 0.63748775 -0.09404508 -0.00220713]] 

Ma trận này đáp ứng các p_R phương trình ^* F * p_L = 0 vậy có vẻ như chính xác. Tuy nhiên, nó rất khác với ma trận được tính toán trong cuốn sách. Tôi cố gắng để kiểm tra câu trả lời bằng cv.FindFundamentalMat của OpenCV() tăng gấp đôi và tôi đã nhận một câu trả lời thứ ba:

[[ 22.98129082 271.46453857 853.74273682] 
[-334.1673584 -4.84123087 -175.99523926] 
[-809.88891602 125.99833679 1.  ]] 

Tôi không phải là cách hai ma trận khác được tính toán, nhưng tôi không thể tìm thấy bất kỳ ví dụ về cơ bản tính toán ma trận trên web để xác minh việc triển khai thuật toán 8 điểm của tôi. Thực tế là việc thực hiện của tôi trả về một giá trị thỏa mãn phương trình mang lại cho tôi sự tự tin, nhưng tôi lo lắng rằng tôi đã làm điều gì đó ngớ ngẩn đó là lý do tại sao tôi không thể kết hợp các kết quả trong cuốn sách hoặc bởi OpenCV.

+0

bạn có bắt đầu với các điểm chuẩn hóa từ tập dữ liệu của bạn hoặc với các điểm ban đầu để có được hai ma trận cơ bản ở trên không? –

Trả lời

5

Lưu ý rằng ma trận cơ bản được xác định lên đến một yếu tố không đổi (bạn có thể xác minh rằng khá dễ dàng, bằng cách kiểm tra ràng buộc epipolar). Hãy thử nhân ma trận OpenCV với -8.0574e-04 và bạn sẽ thấy rằng hai ma trận khá giống nhau ở cuối :-)

Vì vậy, kết quả của bạn có lẽ là tốt. Sự khác biệt nhỏ giữa các kết quả có lẽ là do thực tế OpenCV sử dụng một cách tiếp cận khác (có lẽ mạnh mẽ hơn) so với thuật toán 8 điểm.

+0

Tôi biết nó sẽ là thứ ngớ ngẩn mà tôi đã bỏ lỡ. Cảm ơn đã giúp đỡ. – SigmaXiPi

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