闲时看一篇科学可视化(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。