[英]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的抽取方法。
除非你以某種方式對你的表面進行參數化,否則我不確定你如何決定哪些點帶有相似的信息(因此可以扔掉)。
我猜你可以隨意選擇一堆點來擺脫,但這聽起來不像你想做的那樣。
也許彼此靠近的點(對於'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.