2012-01-30 31 views
5

Tôi có một câu hỏi khó khăn rất thú vị cho câu hỏi &. Tôi cần phải căn chỉnh hai mắt lưới bằng cách sử dụng một thuật toán rất nhanh. Với mesh1 và mesh2 tôi muốn tìm cách tôi cần traslate và xoay mesh1 ở cùng vị trí của mesh2. Trước hết tôi đã làm điều này bằng cách sử dụng những quán tính quán tính của hai mắt lưới, nhưng thuật toán không hoạt động nếu lưới thứ hai tương tự như lưới thứ nhất nhưng với một số phần bị thiếu. Nói cách khác, lấy hai mắt lưới giống hệt nhau và từ một trong số chúng cắt các phần giống nhau.cách căn chỉnh hai mắt lưới

Tôi muốn viết mã bằng C vì tôi cần thực hiện trên máy đa nền tảng (linux/win) và thực hiện điều đó một cách rất nhanh: nó phải được đưa vào thuật toán GA.

Hai mắt lưới có định dạng STL (stereolitography) (nhị phân hoặc ascii) nhưng có thể hữu ích khi sử dụng một loại định dạng tệp khác.

Bạn có biết cách thực hiện công cụ này không?

cập nhật câu hỏi:

trước hết tôi muốn cảm ơn các bạn rất nhiều vì tất cả các đề xuất của bạn. Tôi đã tải về một PCL cài đặt trên máy tính của tôi và biên dịch thành công thuật toán ICP (hướng dẫn), lấy từ trang web PCL. Nhưng bây giờ tôi có một số câu hỏi về điều đó, có thể bởi vì đối với tôi là một điều hoàn toàn mới. ý nghĩa của đầu ra ma trận 4x4 cho phòng tập thể dục là gì? Tôi nên mong đợi một ma trận quay và một vector traslational ..

Tôi hy vọng một số bạn có thể giúp tôi. Nếu bạn cần bất kỳ thông tin nào khác, vui lòng hỏi.

+0

Vì vậy, về cơ bản bạn muốn một thuật toán tính toán conversionmatrix có thể biến mesh1 càng gần càng tốt trên mesh2? Ngoài ra: Cách duy nhất mà một lưới được chỉnh sửa là việc loại bỏ các phần hoặc các đỉnh có thể được di chuyển và thêm vào? – Nobody

+0

@Nobody Tôi đang tính toán ma trận chuyển đổi so sánh các quán tính quán tính của hai cơ quan, nhưng bất kỳ thứ gì khác đặt mesh1 trên mesh2 đều ok. Tóm lại, tôi cần phải tìm vị trí gần nhất của mesh1 mesh2 tôn trọng mà cung cấp cho các giá trị khoảng cách tối thiểu giữa hai. – Nicholas

+1

Đối với bất kỳ ai (như tôi) vấp phải điều này sau này, thật hữu ích khi lưu ý rằng ICP có hiệu quả nhất khi tương quan cao và chênh lệch thấp vì ICP có xu hướng giải quyết thành các giải pháp không đúng nếu nó phải di chuyển một đám mây/lưới quá xa để đến đúng. Đây là lý do tại sao một số bước kết hợp tính năng thô thường được thực hiện trước tiên, để có được biến đổi trong vùng lân cận bên phải. Từ thời điểm đó, ICP là tuyệt vời trong việc tinh chỉnh việc đăng ký. – Matt

Trả lời

4

Point Cloud Library có một số tài nguyên mà bạn có thể thấy hữu ích. Như @ Throwback1986 nói, ICP là một thuật toán tuyệt vời để căn chỉnh hình học. Pcl cũng có các thuật toán liên kết khác, thường nhanh hơn, dựa trên việc xác định và so khớp các tính năng quan tâm trong hai phần hình học. Thư viện tìm thấy rất nhiều sử dụng trong các cộng đồng robot, những người, giống như bạn, rất có ý thức về hiệu suất.

Pcl được viết bằng C++. Trong khi không phải là di động như thẳng C, Họ cung cấp hướng dẫn cài đặt cho các cửa sổ, một vài hương vị * nix, và os mac. Tôi đã nhìn thấy nó chạy trên ios và android là tốt. Hãy xem tutorials.

+0

Cảm ơn bạn đã cho tôi liên kết đó. Đó là một thư viện rất thú vị. Tôi đã cố gắng sử dụng một số các hướng dẫn nhưng tiếc là nó không làm phép lạ mà tôi mong đợi :). Nó chỉ hoạt động cho những khác biệt nhỏ, tôi hy vọng tôi có thể kết hợp các mã đó với phương pháp quán tính của tôi. Bất kỳ đề nghị tốt khác? – Nicholas

+0

Thử tìm kiếm danh sách gửi thư pcl và nếu bạn không tìm thấy gì, hãy đăng câu hỏi! Các nhà phát triển khá nhạy. Một ý tưởng sẽ là để hạt giống ICP với một đoán tốt nhất dựa trên kỹ thuật khoảnh khắc intertial của bạn, và sau đó lặp lại từ đó cho một sự liên kết chính xác. Ma trận chuyển đổi 4x4 đó có ma trận xoay của bạn được nhúng trong đó, làm góc trên bên trái. Cột thứ 4 chứa ma trận dịch. (lưu ý rằng hàng dưới cùng có ba chữ số 0 trong đó) – yurbles

3

Điểm gần nhất lặp lại (ICP) là một cách để đăng ký (căn chỉnh) các đám mây điểm 3D với các biến đổi cứng nhắc. (Nó cũng có thể áp dụng đối với mắt lưới.)

Dưới đây là một giới thiệu tốt: http://www.cs.duke.edu/courses/spring07/cps296.2/scribe_notes/lecture24.pdf

Dưới đây là một bản tóm tắt lý: students.asl.ethz.ch/upl_pdf/314-report.pdf

Đây là một thực hiện matlab: http://www.mathworks.com/matlabcentral/fileexchange/12627-iterative-closest-point-method

Dưới đây là một số tối ưu tiềm năng: http://www.cs.princeton.edu/~smr/papers/fasticp/

+1

Tôi đã thực hiện một số nghiên cứu về chủ đề này. Tôi đang tìm mã MATLAB rất hữu ích, mặc dù tôi nghĩ rằng [link] này (http://www.mathworks.com/matlabcentral/fileexchange/16766) là tốt hơn của bạn, bởi vì nó có mã nguồn cpp cũng! Tôi sẽ cho bạn biết càng sớm càng tốt bất kỳ sự phát triển mới nào trong vấn đề này và tôi nghĩ tôi sẽ đăng ở đây giải pháp mà tôi sẽ nhận được. – Nicholas

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