繁体   English   中英

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

[英]geodesic distance on 3d triangular mesh using scikit-fmm or gdist

我正在尝试评估 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 接口的MeshLib库。 通过pip安装后:

import meshlib.mrmeshpy as mr

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

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

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

然后您会对以下两个功能感兴趣。

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

在 MeshLib 中计算的距离等值线

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

MeshLib 中的测地线路径

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM