我正在尝试评估 TOSCA 数据集上的测地距离矩阵。
例如以下 3d 网格 -
我尝试过使用两种Python实现。
另一个是 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")
我在这里找到了该数据集中的网格:https://vision.in.tum.de/data/datasets/partial
那么你将会对以下两个功能感兴趣。
mr.computeSurfaceDistances(mesh, surfacePoint)
,返回通过 Fast Marching 方法计算的从给定表面点到网格中每个顶点的距离。例如,以下是通过颜色和等值线可视化的计算距离:mr.computeGeodesicPath(mesh, surfacePoint1, surfacePoint2)
,计算两个表面点之间的精确测地路径。计算从 Dijkstra 或 Fast Marching 方法给出的路径近似开始,然后迭代地减少长度直至收敛。两点之间的测地线路径示例:你是如何设置“surfacePoint”的?