簡體   English   中英

簡化3d曲面的算法?

[英]Algorithm for simplifying 3d surface?

我有一組接近表面的3d點。 但是,每個點都會出現一些錯誤。 此外,點集包含的點數遠遠多於表示底層表面所需的點數。

我正在尋找的是一種算法來創建一個新的(小得多)點集,表示一個簡化,更平滑的表面版本(原諒沒有比“簡化,更平滑”更好的定義)。 底層表面不是數學表面,所以我不希望將數據集擬合到某些數學函數中。

我不建議將其作為點雲處理,而是建議使用Delaunay三角剖分對網格進行三角測量: http//en.wikipedia.org/wiki/Delaunay_triangulation

然后抽取網格。 您可以研究抽取算法,但是您可以使用僅合並具有相似法線的相鄰tris的算法獲得非常好的快速和臟的結果。

基於點的表面模型簡化存在幾種不同的技術,包括:

  • 聚類;
  • 粒子模擬;
  • 迭代簡化。

查看調查:

M. Pauly,M。Gross和LP Kobbelt。 有效簡化點采樣曲面。 參見“可視化會議論文集”,第163-170頁,華盛頓特區,2002年.IEEE。

我認為你正在尋找'細節水平'算法。

一個簡單的實現方法是將您的音量(曲面)分成若干個子卷。 從每個子體積中的點,選擇一個代表點(例如最接近中心的點,或最接近平均值的點,或平均值等)。 使用這些點重繪表面。

您可以調整子卷的數量來動態增加/減少細節。

我通過尋找對表面曲率貢獻很小的頂點(點)來解決這個問題。 找到從每個頂點出現的所有邊,並取出它們的對(?)的點積。 代表非常淺的“山丘”的點將對向巨大的角度(接近180度)並且具有小的點積。

那些具有最小數字的頂點將成為移除的候選者。 然后它們周圍的頂點將形成一個平面。

或類似的東西。

谷歌為Hugues Hoppe和他的“表面重建”工作。

表面重建用於找到適合點雲的網格表面; 但是,這種方法產生了很多三角形。 然后,您可以應用網格縮小技術來減少多邊形數量,從而最大限度地減少錯誤。 例如,您可以查看OpenMesh的抽取方法。

OpenMesh

Hugues Hoppe

除非你以某種方式對你的表面進行參數化,否則我不確定你如何決定哪些點帶有相似的信息(因此可以扔掉)。

我猜你可以隨意選擇一堆點來擺脫,但這聽起來不像你想做的那樣。

也許彼此靠近的點(對於'near'的某些定義)可以被認為包含類似的信息,因此減少為每個這樣的組的單個代表。

你能提供更多細節嗎?

在沒有網格三角形和索引約束的情況下簡化點雲更簡單。

平滑和簡化是不同的任務。 為了簡化雲計算,您應首先通過制作您所擁有的噪聲類型,頻率和方向特性以及比較類型減少的噪聲配置文件來消除噪聲偽影。 好的法線載體是helfpul。

這里有一個關於使用delauney,voronoi和k最近鄰數學的5-6個簡化的文檔:

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

2008年的后續版本: http//www.wseas.us/e-library/transactions/research/2008/30-705.pdf

這是最近的c ++版本: https//github.com/tudelft3d/masbcpp/blob/master/src/simplify.cpp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM