标量场上进行多维数据集期间的插值问题

时间:2019-03-14 05:35:02

标签: c++ algorithm marching-cubes

我有一个规则的正方形网格,其中所有数据点都存储在质心处。我有一个标量字段(范围:0-> 1),它指示一个单元格内的物质数量。我对确定这种物质在细胞内部的界面感兴趣(以进行进一步处理而不是可视化)。

我遇到了Marching多维数据集算法(http://paulbourke.net/geometry/polygonise/)。在这里,我需要单元格角落的值。因此,我平均了相邻单元的质心值。 这种平均加上进一步的线性化以在MC中的“多边形化”过程中找到相交点,导致了诸如此类的非现实界面。

enter image description here

这里的灰色细胞充满了物质,而其相邻的细胞只有极少量的物质。理想情况下,它应该非常靠近celtre细胞的边界。我觉得这种情况是由于0.25和0之间的线性插值导致其偏离其预期位置的缘故。

可以解决此问题吗?

1 个答案:

答案 0 :(得分:1)

Marching-Cubes算法有一个可以调整的参数,即isolevel。在您的示例中,您似乎为0.05选择了isolevel附近的值。当选择一个刚好低于0.25的值(例如类似0.24的值)时,界面将更靠近中心单元格。但是,当两个具有值1的单元格相互接触时,您的结果仍然不能令人满意。角的平均值为0.5

您仍然可以尝试的方法:您可以取最大角点值作为单元格值,然后将isolevel升高到1以下(例如,不必为计算角点值取平均单元格值) 0.9