Изоповерхность, извлеченная с помощью marching_cubes (skimage.measure), не напоминает сетку.

Я пытаюсь построить изоповерхность из трехмерной сетки, созданной с использованием SVM из scikit-learn, на основе ответа Леонарда здесь: Как построить набор трехмерных уровней Python?. Я пробовал метод, предложенный в документе scikit-learn, но он был таким же (https://scikit-image.org/docs/dev/auto_examples/edges/plot_marching_cubes.html)

Код выглядит следующим образом:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.view_init(20, -45)

Xtest = np.meshgrid(np.arange(0,20,1),np.arange(0,20,1),np.arange(0,20,1))
ax.scatter(Xtest[0].ravel(),Xtest[1].ravel(), Xtest[2].ravel(),c = Z.ravel(), s=2, alpha = 0.4)
verts_t, faces_t, _, _ = measure.marching_cubes(Z, 0)
boundary_surf= ax.plot_trisurf(verts_t[:, 0], verts_t[:,1], faces_t, verts_t[:, 2],
                 lw=1, color = 'green', alpha =0.8)

В этом коде Z - некоторое значение двоичной классификации (0, 1). Когда я пытаюсь построить сетку сетки и изоповерхность, я обнаружил, что они не выровнены. введите описание изображения здесь

Я смотрел на это несколько часов и не мог понять, почему это неправильно. Буду очень признателен, если вы поможете найти проблему. Спасибо!


person rqi14    schedule 14.12.2020    source источник