簡體   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