2013-04-11 41 views
7

Tôi đã hiệu chuẩn máy ảnh của mình và tìm thấy các thông số nội tại (K). Ngoài ra tôi đã tính toán ma trận cơ sở (F).Cách đúng để trích xuất Bản dịch từ Ma trận cơ bản qua SVD

Bây giờ E = K_T * F * K. Càng xa càng tốt.

Bây giờ chúng ta vượt qua Matrix Essential (E) để SVD sử dụng các giá trị phân hủy (U, W, V) để trích xuất các Rotation và Dịch:

essentialMatrix = K.Transpose().Mul(fund).Mul(K); 
CvInvoke.cvSVD(essentialMatrix, wMatrix, uMatrix, vMatrix, Emgu.CV.CvEnum.SVD_TYPE.CV_SVD_DEFAULT); 

** Câu hỏi) Tại thời điểm này, hai phương pháp đã được đề xuất, và nó đã nhầm lẫn cho tôi cái nào thực sự đưa ra quyền answer- đặc biệt cho dịch:

Tại phương pháp đầu tiên enter link description here tác giả gợi ý để tính toán R, T như sau:

enter image description here

Nhưng trong phương pháp thứ hai [http://isit.u-clermont1.fr/~ab/Classes/DIKU-3DCV2/Handouts/Lecture16.pdf] tác giả cung cấp công thức khác cho T được + U, -U như hình dưới đây:

enter image description here

Tôi đang thực hiện điều này trên C# Net sử dụng thư viện OpenCV. Có ai biết công thức dịch nào là đúng không?

+1

Liên kết cho phương pháp thứ hai là chết. Tài liệu được chuyển đến: http://igt.ip.uca.fr/~ab/Classes/DIKU-3DCV2/Handouts/Lecture16.pdf –

Trả lời

4

giải pháp đầu tiên cho thấy biểu diễn ma trận của sản phẩm chéo với véc tơ t (giải pháp đầu tiên = [t] x), trong khi giải pháp thứ hai chỉ hiển thị vectơ dịch t (https://en.wikipedia.org/wiki/Essential_matrix).

Định nghĩa của [t] x là:

enter image description here

(từ http://gandalf-library.sourceforge.net/tutorial/report/img148.png)

+0

Trong giải pháp đầu tiên, T1, T2 là ma trận nonZero 3X3 nhưng trên thực tế là bản dịch t , Tôi cần ma trận 3X1. làm thế nào tôi nên trích xuất 3X1 từ một ma trận nonZero 3X3 mà không làm mất thông tin? –

+0

nếu bạn trích xuất bản dịch với SVD, vectơ dịch là 'SVD (E) .u.col (2)', như được mô tả trong phương pháp thứ hai của bài đăng của bạn. làm thế nào để bạn trích xuất ma trận dịch 3x3 của bạn? bạn cũng có thể xem http://stackoverflow.com/questions/16639106/camera-motion-from-corresponding-images để biết thêm thông tin – 3x14159265

+0

Tôi đã sử dụng phương pháp thứ nhất được đề cập ở trên để trích xuất T1, T2 hoặc là 3X3. Tôi có làm điều gì sai? Trong liên kết được cung cấp, một lần nữa anh chàng nhảy từ tính t1, t2 đến t mà không đề cập đến chuyển đổi/quan hệ giữa t1, t2 và t khi tôi đặt lại nó bên dưới: t1 = decomp.u.col (2); // u3 t2 = -decomp.u.col (2); // u3 new_pos = old_pos + -R.t() * t; –