2010-07-26 48 views
13

Tôi có một tập hợp các điểm 3d gần đúng bề mặt. Mỗi điểm, tuy nhiên, phải chịu một số lỗi. Hơn nữa, tập hợp các điểm chứa nhiều điểm hơn là thực sự cần thiết để biểu diễn bề mặt bên dưới.Thuật toán để đơn giản hóa bề mặt 3D?

Điều tôi đang tìm kiếm là một thuật toán để tạo một tập hợp các điểm mới (nhỏ hơn) đại diện cho một phiên bản đơn giản hơn, mượt mà hơn (không có định nghĩa tốt hơn "đơn giản, mượt mà"). Bề mặt cơ bản không phải là một toán học vì vậy tôi không hy vọng để phù hợp với các dữ liệu thiết lập một số chức năng toán học.

+0

Bạn thực sự không thể có được bề mặt mượt mà và đơn giản hơn. Nó là cái này hay cái kia. –

+0

@Mikulas Dite về mặt kỹ thuật, anh ấy không thể (nhiều điểm hơn, phức tạp hơn). Nhưng trực quan, nếu anh ta loại bỏ các ngoại lệ, đường cong có thể xuất hiện mượt mà hơn và ít phức tạp hơn. –

+0

Anh ta có thể nhận được bề mặt đơn giản hơn với ít điểm hơn nếu bề mặt ồn ào, giống như quét bằng laser có độ phân giải cao của hình lập phương. Điều này giống như yêu cầu bộ lọc thông thấp cho bề mặt 3D. – darron

Trả lời

7

Thay vì đối phó với nó như một đám mây điểm, tôi muốn giới thiệu triangulating một lưới sử dụng Delaunay triangulation: http://en.wikipedia.org/wiki/Delaunay_triangulation

Sau đó tàn sát lưới. Bạn có thể nghiên cứu thuật toán decimation, nhưng bạn có thể nhận được kết quả nhanh chóng và bẩn khá tốt với một thuật toán mà chỉ cần kết hợp tris liền kề có các chuẩn mực tương tự.

+1

Tôi nhớ học ở trường rằng có những bề mặt mà không có tam giác tồn tại (trong 3D.) Nếu OP không lo lắng về việc vấp ngã trên một bề mặt như thế này thì tốt. – ldog

+0

Nó thực sự phụ thuộc vào thuộc tính của dữ liệu đám mây điểm của bạn. Nếu đó là một mạng lưới các điểm giống như bản đồ chiều cao thì cách tiếp cận này sẽ rất đơn giản. Nếu đó là một đám mây điểm vô định hình hơn thì điều này có thể không hiệu quả với bạn. Có toàn bộ các ứng dụng dành cho việc tạo ra các bề mặt từ dữ liệu đám mây điểm phức tạp vì vậy đây là một vấn đề khá khó khăn nếu không bị ràng buộc. – bshields

+0

Delauney chỉ thực sự tốt cho 2.5D - nhưng đối với dữ liệu chiều cao đó là một cách rất tốt để bắt đầu trước khi tái griding –

1

Tôi nghĩ bạn đang tìm kiếm thuật toán 'Cấp chi tiết'.

Một cách đơn giản để thực hiện là phá vỡ khối lượng (bề mặt) của bạn thành một số lượng phụ. Từ các điểm trong mỗi phân vùng phụ, chọn một điểm đại diện (chẳng hạn như điểm gần nhất với tâm hoặc gần điểm trung bình nhất, hoặc trung bình). sử dụng các điểm này để vẽ lại bề mặt của bạn.

Bạn có thể tinh chỉnh số lượng phụ để tăng/giảm chi tiết khi đang di chuyển.

0

trừ khi bạn đại diện cho bề mặt của mình theo một cách nào đó, tôi không chắc cách bạn có thể quyết định điểm nào mang thông tin tương tự (và do đó có thể bị vứt bỏ).

tôi đoán bạn có thể chọn một loạt các điểm ngẫu nhiên để loại bỏ, nhưng điều đó không có vẻ giống như những gì bạn muốn làm.

có thể là các điểm gần nhau (đối với một số định nghĩa 'gần') có thể được coi là chứa thông tin tương tự và giảm xuống một đại diện duy nhất cho mỗi nhóm như vậy.

bạn có thể cung cấp thêm một số chi tiết không?

1

Tôi muốn tiếp cận điều này bằng cách tìm các đỉnh (điểm) đóng góp ít cho độ cong của bề mặt. Tìm tất cả các cạnh nổi lên từ mỗi đỉnh và lấy các sản phẩm chấm của các cặp (?) Của chúng. Các điểm đại diện cho các "ngọn đồi" rất nông sẽ phụ các góc rất lớn (gần 180 độ) và có các sản phẩm chấm nhỏ.

Những đỉnh có số nhỏ nhất sau đó sẽ là ứng cử viên để xóa. Các đỉnh xung quanh chúng sẽ tạo thành một mặt phẳng.

Hoặc điều gì đó tương tự.

1

Google cho Hugues Hoppe và công trình "tái tạo bề mặt" của ông.

Tái tạo bề mặt được sử dụng để tìm một bề mặt được chia lưới để vừa với đám mây điểm; tuy nhiên, phương pháp này mang lại lô hàng của hình tam giác. Sau đó, bạn có thể áp dụng kỹ thuật giảm lưới để giảm số lượng đa giác theo cách giảm thiểu lỗi. Ví dụ, bạn có thể xem xét phương pháp decimation của OpenMesh.

OpenMesh

Hugues Hoppe

1

Có tồn tại kỹ thuật khác nhau cho điểm dựa trên mô hình bề mặt đơn giản, bao gồm:

  • phân nhóm;
  • mô phỏng hạt;
  • đơn giản hóa lặp lại.

Xem các khảo sát:

M. Pauly, M. Gross, và L. P. Kobbelt. Hiệu quả đơn giản hóa các điểm- các bề mặt lấy mẫu. Trong Kỷ yếu Hội nghị về Trực quan hóa'02, các trang 163–170, Washington, DC, 2002. IEEE.

+2

Chào mừng bạn đến Stackoverflow! Bạn có thể thêm các chi tiết khác vào câu trả lời của mình (ví dụ: thêm mô tả về kỹ thuật) không? Câu trả lời trên stackoverflow cần phải có đủ thông tin để hiểu câu trả lời. Câu trả lời chỉ liên kết được [khuyến khích] (http://meta.stackexchange.com/questions/225370/your-answer-is-in-another-castle-when-is-an-answer-not-an-answer) –

0

Đơn giản hơn để đơn giản hóa một đám mây điểm mà không có sự ràng buộc của các hình tam giác lưới và các chỉ mục.

làm mịn và đơn giản hóa là các tác vụ khác nhau. Để đơn giản hóa đám mây, trước tiên bạn nên loại bỏ các đồ tạo tác nhiễu bằng cách tạo ra một hồ sơ về loại nhiễu mà bạn có, đó là tần số và các tính chất định hướng và làm giảm nhiễu so với loại giảm nhiễu. vectơ bình thường tốt là helfpul cho điều đó.

đây là một tài liệu về 5-6 đơn giản hóa sử dụng delauney, Voronoi, và k toán hàng xóm gần nhất:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.10.9640&rep=rep1&type=pdf

Một phiên bản mới hơn so với năm 2008: http://www.wseas.us/e-library/transactions/research/2008/30-705.pdf

đây là một C++ gần đây phiên bản: https://github.com/tudelft3d/masbcpp/blob/master/src/simplify.cpp

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