7

Tôi đang đọc mã nguồn của chức năng solvePnP() trong OpenCV, khi flags param sử dụng giá trị mặc định SOLVEPNP_ITERATIVE, nó đang gọi cvFindExtrinsicCameraParams2, trong đó nó FIRST sử dụng thuật toán DLT (nếu chúng ta có một tập hợp không phẳng của các điểm 3D) để khởi tạo tư thế máy ảnh 6DOF và SECOND sử dụng CvLevMarq solver để giảm thiểu lỗi tái phát.Tại sao chuyển đổi tuyến tính trực tiếp (DLT) không thể cung cấp cho các máy ảnh tối ưu bên ngoài?

Câu hỏi của tôi là: DLT fomulates vấn đề như là một vấn đề vuông ít nhất tuyến tính và giải quyết nó với phân hủy SVD, nó có vẻ là một giải pháp tối ưu, tại sao chúng ta vẫn sử dụng phương pháp lặp đi lặp lại Lev-Marq sau đó?

Hoặc, vấn đề/giới hạn của thuật toán DLT kém hơn là gì? Tại sao giải pháp dạng đóng lại dẫn đến mức tối thiểu LOCAL cho hàm chi phí?

+0

Tôi nghĩ rằng việc thêm một bước tinh chỉnh phi tuyến tính vào ước lượng ngoài là điều phổ biến, được thực hiện lặp đi lặp lại. Xem tại đây: http://www.epixea.com/research/multi-view-coding-thesisse9.html – Dan

+0

@Do thx cho liên kết của bạn, tôi biết nó phổ biến, giống như những gì 'giải quyết CvLevMarq' đã làm trong opencv. Ý tôi là, DLT có vẻ là một dạng giảm thiểu ** dạng đóng kín ** của hàm chi phí, tại sao nó vẫn thấp hơn (tối thiểu địa phương)? – zhangxaochen

Trả lời

4

Khi bạn muốn tìm giải pháp cho vấn đề, bước đầu tiên là diễn tả vấn đề này trong thuật ngữ toán học và sau đó bạn có thể sử dụng các công cụ toán học hiện có để tìm giải pháp cho phương trình của bạn. Tuy nhiên, các vấn đề thú vị thường có thể được thể hiện bằng nhiều cách toán học khác nhau, mỗi cách có thể dẫn đến một giải pháp hơi khác. Sau đó, nó phải làm việc để phân tích các phương pháp khác nhau để hiểu được phương pháp nào cung cấp giải pháp ổn định/chính xác/hiệu quả nhất/etc.

Trong trường hợp xảy ra sự cố PnP, chúng tôi muốn tìm tư thế camera cho các liên kết giữa các điểm 3D và mặt phẳng hình ảnh chiếu của chúng.

Cách đầu tiên để diễn tả vấn đề này bằng toán học là đúc nó như là một vấn đề hình vuông nhỏ nhất tuyến tính. Cách tiếp cận này được gọi là phương pháp tiếp cận DLT, và nó là thú vị bởi vì các ô vuông nhỏ nhất tuyến tính có một giải pháp dạng khép kín có thể được tìm thấy mạnh mẽ bằng cách sử dụng Phân tích giá trị số ít. Tuy nhiên, cách tiếp cận này giả định rằng máy ảnh đặt ra P có 12 bậc tự do khi thực sự nó chỉ có 6 (3 cho xoay 3D cộng với 3 cho bản dịch 3D). Để có được tư thế camera 6DOF từ kết quả của phương pháp này, cần tính xấp xỉ (không được bao hàm bởi hàm chi phí tuyến tính của DLT), dẫn đến một giải pháp không chính xác.

Cách thứ hai để diễn tả bài toán PnP bằng toán học là sử dụng sai số hình học làm chức năng chi phí và để tìm ra tư thế máy ảnh làm giảm thiểu lỗi hình học. Vì lỗi hình học là phi tuyến tính, cách tiếp cận này ước tính giải pháp sử dụng các giải pháp lặp lại, chẳng hạn như thuật toán Levenberg Marquardt. Các thuật toán như vậy có thể tính đến 6 bậc tự do của tư thế máy ảnh, dẫn đến các giải pháp chính xác. Tuy nhiên, vì chúng là các phương pháp lặp đi lặp lại, chúng cần được cung cấp một ước tính ban đầu của giải pháp, mà trong thực tế thường thu được bằng cách sử dụng phương pháp DLT.

Bây giờ để trả lời tiêu đề câu hỏi của bạn: chắc chắn, thuật toán DLT cung cấp cho máy ảnh tối ưu bên ngoài, nhưng nó chỉ tối ưu theo ý nghĩa của hàm chi phí tuyến tính được giải quyết bằng thuật toán DLT. Qua nhiều năm, các nhà khoa học đã tìm thấy các hàm chi phí phức tạp hơn dẫn đến các giải pháp chính xác hơn, nhưng cũng khó giải quyết hơn.

+0

Thx đầu tiên ~ bạn có nghĩa là DLT là kém hơn bởi vì nó nhận được một ma trận 12DOF không chính xác một ma trận chuyển đổi cứng nhắc? Nhưng như tôi biết, hoạt động 'svd (H) = UWV^T' và sau đó' result = VU^T' thực sự cho một ma trận xoay chính xác (ma trận trực giao với det = + 1) với 3DOF, chứ không phải 9DOF, không phải nó? – zhangxaochen

+1

Có, có nhiều cách để trích xuất tư thế máy ảnh 6DOF từ một ảnh 12DOF (ví dụ: sử dụng SVD, như bạn đã nói). Tuy nhiên phép biến đổi này không được đề cập bởi bài toán vuông góc tuyến tính của thuật toán DLT, do đó bạn kết thúc với tư thế camera 6DOF không còn tối ưu theo ý nghĩa của hàm chi phí bình phương nhỏ nhất tuyến tính của bạn. Để nhúng ước tính đặt ra 6DOF trong một vấn đề nhỏ nhất, bạn cần một hàm phi tuyến và cách tốt nhất mà chúng ta biết để giảm thiểu hàm phi tuyến là thông qua giải thuật lặp (ví dụ: thuật toán Levenberg-Marquardt). – AldurDisciple

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