一般有兩種曲面平滑的方式:
Denoising:一般是去掉凸出曲面的部分(高頻部分),而保留和曲面相當?shù)牟糠郑ǖ皖l部分)秸歧。即需要一個在離散三角形網(wǎng)格曲面上的低通濾波器(low-pass filters),并且需要建立頻率的相關(guān)概念。
Fairing:在平均(個人認為翻譯成抹平更形象一些)的過程中,所做的不僅僅只是去除高頻的部分形入。抹平的過程相當于是對曲面做了一個變換,使其從各個角度(曲率缝左、高階導數(shù))上看盡可能的光滑亿遂。
傅里葉變換
傅里葉變換表示一種映射f,它將函數(shù)從空間域(spatial domain)f(x)變換到頻域(frequency domain)F(ω)
上式中的指數(shù)部分通過歐拉公式可以展開成如下的復數(shù)形式:
這是一個包含有正弦和余弦函數(shù)的渺杉,以ω為自變量的(可以看作是頻率)函數(shù)蛇数,可以將這個函數(shù)看做向量空間上的一組正交基,即頻域(frequency domain)是越。
可以將f(x)(可積的復數(shù)函數(shù))看作向量空間中的一個元素耳舅,然后對它做下面的內(nèi)積運算:
那么,傅里葉變換在這里表示了一種基的變換倚评。通過將向量f投影到不同頻率的基向量上浦徊,然后對其進行累加操作,這樣就完成了從空間域(spatial domain)到頻域(frequency domain)的轉(zhuǎn)換天梧。
如果我們要除去頻率比較高的部分盔性,保留
只需要將上面的累加式改寫為如下的形式
對于離散的三角形網(wǎng)格,需要將連續(xù)的函數(shù)f(x)用如下逐頂點的矩陣形式來表示
同樣的如果要將拉普拉斯一貝爾特拉米算子(Laplace-Beltrami operator)應用到函數(shù)上同樣也需要將變成逐頂點的矩陣形式呢岗,這樣算子就變成了相應的拉普拉斯一貝爾特拉米矩陣L了
根據(jù)之前的知識冕香,可以知道蛹尝,對于上面式子的每一行是按下面的方法進行運算的:
權(quán)重wij取值的時候要保證矩陣L是對稱的。前面提到過兩種取值的方法:
- Uniform形式
- Cotangent形式
可以發(fā)現(xiàn)悉尾,對函數(shù)eω是拉普拉斯算子的特征函數(shù)突那,因為:
這樣1維傅里葉變換中的基就是拉普拉斯一貝爾特拉米算子的特征矩陣,很自然的可以想到构眯,對于2維流型曲面其同樣成立愕难。
在處理離散形式的時候,eω就變成了矩陣L的特征向量e1...en鸵赖,對于ei,用如下逐頂點的矩陣來表示
ei的特征值代表了點vi所處頻域的頻率拄衰,ei(vk)表示頂點的振幅它褪。
對矩陣L的所有特征向量進行累加可以得到和前面相似的式子:
如果要濾掉高頻部分,那么只需要對前m個特征向量進行累加即可:
通過下圖可以看到翘悉,隨著m的逐漸減小茫打,即濾掉的頻率越來低,模型的凸出部分(細節(jié)信息)在逐漸的消失妖混。
為了得到特征向量需要對拉普拉斯矩陣進行特征分解老赤,而當模型的頂點比較多的時候,代價是時分昂貴的制市。
而下面的Diffusion Flow方法則相對來說更容易實現(xiàn)抬旺,效率也更高一些。
Diffusion Flow
諸如熱擴散和布朗運動之類的物理過程可以使用下面的擴散方程來表示
從形式上來看祥楣,這是一個二階線性偏微分方程开财,通常f(x, t)表示某點x在時刻的溫度,這個方程描述了無體內(nèi)熱運動的規(guī)律误褪。
要將其運用到曲面網(wǎng)格上责鳍,首先是將連續(xù)形式的拉普拉斯一貝爾特拉米算子替換為離散形式,然后將函數(shù)f改寫為逐頂點形式
為了簡介兽间,可以使用矩陣的形式來表示
等式左邊的偏導數(shù)可以改寫成微商的形式
化簡得到
為了保證在h比較大的情況下的準確性历葛,通常會將上式改寫成如下形式:
然后將自變量相同的移到一邊,寫成如下矩陣方程:
最后要做的就是用上面的方程去更新網(wǎng)格的每一個定點
由于定點的拉普拉斯一貝爾特拉米算子等于其平均曲率法向量
所以上面的方式實際上是讓每一個定點沿著其法向量的方向移動嘀略,移動距離由這一點的平均曲率H決定恤溶。
一個很重要的一點是,只有在算子的權(quán)重系數(shù)wij的取法是cotangent方法帜羊,定點才會向上面說的那樣更新宏娄。當系數(shù)的取法是uniform時,每個頂點會向著重心的方向移動逮壁。
Diffusion Flow方法比之前使用傅里葉變換來說計算量更低,但是其主要的思想仍然是移除高頻噪音(模型上不平滑的地方)而保留低頻部分卖宠。
Fairing
Fairing這種方法的思想則與前兩種不同巍杈,其目標是通過計算使得網(wǎng)格盡可能的光滑。判定光滑程度的方法各不相同扛伍,但是總的原則就是要盡可能的光滑筷畦,避免不必要的細節(jié)或者毛刺。
總的思路是:
- 定義一個量來衡量曲面的不平滑程度
- 更新曲面以最小化曲面的不平滑程度
一個比較常用的描述不平滑程度的函數(shù)是使用曲面的面積
在限定了曲面邊界的情況下刺洒,不平滑的曲面相對的面積應該更大鳖宾。當其取最小值的時候,外形應該像沒有鼓起來的被夾緊的肥皂泡一樣逆航。
不過這個函數(shù)是高度非線性的鼎文,包含了第一基本型行列式的平方根,另外其計算的效率也不會太高因俐。其改進形式如下(參考:Dirichlet energy):
為了求最小值拇惋,簡化上面的模型至一維的情況
在一維的情況下,限制條件就從邊界變成了區(qū)間抹剩。假設(shè)當函數(shù)E的自變量函數(shù)取f時E取到最小值撑帖,并且限制條件的區(qū)間為[a, b],那么對于任意函數(shù)u澳眷,并且u(a) = u(b) = 0胡嘿,都有E(f) < E(f+λu),那么當λ = 0時钳踊,E取最小值灶平,其對于λ的偏導數(shù)的值也為0
用分部積分公式展開上面的積分
因為u(a) = u(b) = 0所以最終
由于上式對于任意滿足u(a) = u(b) = 0的函數(shù)u都成立,所以
上式推廣到二維情況同樣試用箍土,所以對于改進后的函數(shù)同樣可以用這個方法
為了把上面的方法應用到三角形網(wǎng)格的曲面上逢享,只需要和前面一樣將算子和函數(shù)改為離散形式即可
除了用面積來衡量不光滑度之外,還可以使用曲面的主曲率:
或者主曲率相對切向量的變化率:
當k = 1時吴藻,以面積為度量的不平滑度取最小值瞒爬;k = 2時以主曲率為度量的不平滑度取最小值;k = 3時以主曲率相對切向量的變化率為度量的不平滑度取最小值
下圖中紫色的區(qū)域就是通過上面的方法平滑得到
算子中權(quán)重取法的不同也會產(chǎn)生不同的結(jié)果,使用Uniform的取法會導致一些區(qū)域的頂點密度過高航罗,使用Cotangent則能夠達到期望的平滑效果