使用 scikit-fmm 或 gdist 3D 三角形网格上的测地距离

问题描述 投票:0回答:2

我正在尝试评估 TOSCA 数据集上的测地距离矩阵。 例如以下 3d 网格 -

我尝试过使用两种Python实现。

  1. 第一个是 scikit-fmm,它似乎根本不适用于 3D 结构(我是对的吗?),因此不适合该任务。
  2. 另一个是 gdist 包,不幸的是,它适用于他们提供的玩具示例,但不适用于我的网格,它只有 10,000 个面和 5000 个顶点。
    使用 gdist 库时出现以下错误:

    Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
    --------CODE SNIPPET----------
    c = sio.loadmat('raw_data/TOSCA/cat0.mat')
    c = c['surface'][0][0]
    X = c[0]
    Y = c[1]
    Z = c[2]
    TRIV = c[3].astype(np.int32)
    vertices = np.array(zip(X, Y, Z)).astype(np.float64)
    vertices = np.reshape(vertices, (vertices.shape[0], 3))
    src = np.array([1], dtype=np.int32)
    trg = np.array([2], dtype=np.int32)
    
    np.random.shuffle(TRIV)
    
    a = gdist.compute_gdist(vertices,TRIV[:5000], source_indices = src, target_indices = trg)
    

还有其他解决方案吗?我是否以错误的方式使用 gdist 或 scikit-fmm ?

python scikit-learn distance mesh
2个回答
2
投票

另一个解决方案是使用带有 python 接口的 MeshLib 库。通过

pip
安装后:

import meshlib.mrmeshpy as mr

从 TOSCA 数据集中以 OFF 格式加载网格:

mesh = mr.loadMesh("centaur1.off")

我在这里找到了该数据集中的网格:https://vision.in.tum.de/data/datasets/partial

那么你将会对以下两个功能感兴趣。

  1. mr.computeSurfaceDistances(mesh, surfacePoint)
    ,返回通过 Fast Marching 方法计算的从给定表面点到网格中每个顶点的距离。例如,以下是通过颜色和等值线可视化的计算距离:

  1. mr.computeGeodesicPath(mesh, surfacePoint1, surfacePoint2)
    ,计算两个表面点之间的精确测地路径。计算从 Dijkstra 或 Fast Marching 方法给出的路径近似开始,然后迭代地减少长度直至收敛。两点之间的测地线路径示例:


0
投票

你是如何设置“surfacePoint”的?

© www.soinside.com 2019 - 2024. All rights reserved.