閑時看一篇科學可視化(SciVis)的文章:Visual Analysis of Multi-run Spatio-temporal Simulations. 看到Isocontour(等值輪廓),就覺得自己對這個概念的理解很模糊,于是有了以下的學習筆記。
文章中提出了一種方法來度量兩個Isocontour(等值輪廓)的距離,用的是蒙特卡洛方法,挺有意思。首先,我介紹一下什么是等值面(Isosurface),然后再討論什么是Isocontour(等值輪廓),最后詳述一下作者如何用蒙特卡洛方法計算兩個Isocontour(等值輪廓)的距離。
等值面(Isosurface)
Wiki上的解釋是:等值面指的是密度或特征近似的一個面,它通常被用于圖形學領域(早期可視化是圖形學的一個分支,現在獨立出來成為了一個研究領域),并且也用于CFD流體數據的可視化上,它使得工程師可以看到某些物體周圍流體的特征,例如機翼附近的流場。在醫學圖像處理領域,等值面被用于表征一個三維CT數據里相似密度的區域,這可以幫助可視化人體的器官,骨骼以及其它的結構。從應用領域來說,等值面和科學可視化非常相關。在我看來,大家熟知的地理上用的等高線是等值面的一種特殊形式。
提取等值面有很多的方法,Marching Cubes是最常見的一種,常用于提取3D流體數據的表面。通過基于物理的計算,可以生成3D流體粒子數據(SPH就是一種流體粒子的繪制技術),但在真實感圖形動畫中,一般支持的是面(Mesh),因此呢,由Marching Cubes生成的Isosurface就能提供真實感繪制需要的Mesh。
等值輪廓(Isocontour)
知道了等值面后,等值輪廓就很容易理解了,就是等值面的邊緣部分。
等值輪廓的距離
首先,定義好等值輪廓的2D空間畫布,然后往畫布上隨機撒點,用插值的梯度函數判斷點是否在某個等值輪廓上。這樣的話就可以得到A和B的兩個屬性向量Va和Vb,向量的維度就是落在等值輪廓里點的數量。Va和Vb可以近似表達等值輪廓的大小和形狀。A^B代表同時落在兩個輪廓里的點的數量。AVB代表落在輪廓A或B里的點的數量。然后,Jaccard 距離計算最后的距離,這個距離計算方法常用于計算集合的相似度,具體出處可參考論文Distance between Sets。