Chango的數學可視化(二) 向量場:梯度,散度,拉普拉斯

起因:

在沒有看梁昌洪老師的公開課之前,對向量場知識一無所知,碰到泊松融合,泊松重建的文章時非常痛苦。現在將知識慢慢補起來,並用程序可視化,一來鞏固知識,二來了解離散化形式和其實際中遇到的問題。

目的:

從Poisson Surface Reconstruction一文得到啓發。

先模擬一個包含目標點雲的數量場,使得模型點雲的數量值爲1,其他爲0。

通過對此數量場進行一次梯度算子\bigtriangledown,得到一向量場,也就是其表面內法線估計;

再對此向量場進行一次\bigtriangledown,得一數量場,也就是表面指示數量場,即數值爲1的點就是表面。

當然其中對比實際和論文有很多簡化和差異,不再贅述。

本文就是一個3D版laplace邊緣檢測,但出發點是矢量場的內容。

步驟:

梯度指向最大變化方向

散度表示源狀態

1.建立模型點雲和數量場

簡單認爲模型就是一個完美球。而我們的點雲也都是網格對齊的。

模型點值爲1,其他爲0。

2.使用\bigtriangledown得矢量場。

對於離散情況得3D梯度算子,我直接從2D形式推廣,也就是

(\frac{x2-x1}{2},\frac{y2-y1}{2},\frac{z2-z1}{2})

至於怎麼來得,2D形式推導可參考我之前寫的:

Chango的數學Shader世界(十)流體模擬-有限微分形式

此時,只有模型表面點梯度纔不爲0向量,爲模型表面內法線方向。

在離散情況下,由於我們離散梯度計算的原因,表面“接壤”的黑色層和白色層兩個點梯度都不會爲0.

3.再使用\bigtriangledown得laplace數量場。

爲什麼我不從一開始的數量場1步推導laplace算子\Delta到laplace數量場?

因爲一來可以學會梯度場到數量場的轉換,二來在泊松融合等實際應用中,都是將背景圖的梯度場與ROI的梯度場相加,再\bigtriangledown的,否則僅用ROI的laplace結果然後加上去邊緣必然無法融合。(3D模型泊松融合也是一樣的道理)。

所以分兩步走是必然的。

那麼怎樣離散的laplace怎麼得到呢?這裏有點繞。

我們知道連續函數有\Delta=\frac{\partial ^{2}}{\partial x^{2}}+\frac{\partial ^{2}}{\partial y^{2}}+\frac{\partial ^{2}}{\partial z^{2}},laplace由三部分相加組成。

現在,嘗試取梯度場的x分量組成數量場,此數量場是\frac{\partial f}{\partial x},因爲我們的梯度場是(\frac{\partial f}{\partial x},\frac{\partial f}{\partial y},\frac{\partial f}{\partial z})

再求此數量場的梯度,則得梯度場\bigtriangledown\frac{\partial f}{\partial x} = (\frac{\partial^{2} f}{\partial x^{2}},\frac{\partial f}{\partial x\partial y},\frac{\partial f}{\partial x\partial z}),那我們可以發現,所需的\frac{\partial^{2} f}{\partial x^{2}}是其第一個分量。

我們再來捋一捋,之前算離散梯度是(\frac{x2-x1}{2},\frac{y2-y1}{2},\frac{z2-z1}{2})==(\frac{\partial f}{\partial x},\frac{\partial f}{\partial y},\frac{\partial f}{\partial z})

所以,現在有了梯度場,要求\frac{\partial^{2} f}{\partial x^{2}},則只要關心x方向vx1,vx2兩個向量的x值,就是對應離散梯度的x1,x2。

所以計算得(vx2.x-vx1.x)/2。

\frac{\partial^{2} f}{\partial y^{2}},\frac{\partial^{2} f}{\partial z^{2}}同理,最後相加即可。

我畫個圖,可能更加清楚:

結果,laplace數量場中,只有靠近球面的點纔不爲0,模型表面被“標記”了。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章