Как правильно отображать том с некубильными вокселями в майави

Я использую майави (3.3.2) для отображения объемных поверхностей.

Как правило, у моих томов нет кубических вокселей; например, сетка для отбора проб может быть 1 мм x 1 мм в X и Y, но 1,4 мм в направлении Z.

Как я могу отображать такие объемы с правильными пространственными пропорциями, используя mlab.contour3d или mlab.pipeline.iso_surface ? Я бы предпочел не перевыполнять объемы кубической сетке.

Другой способ изложить проблему: что я могу сделать, чтобы получить нижеприведенный код, чтобы отобразить сферу вместо сплющенного элипсоида (принимая volume с его предполагаемыми ваксами пропорций 1: 1: 2 как заданный и без регенерации или повторной дискретизации громкость).

 import numpy as np from enthought.mayavi import mlab def sqr(x): return x*x s=64 x,y,z = np.ogrid[0:s,0:s,0:s/2] volume = np.sqrt(sqr(xs/2)+sqr(ys/2)+sqr(2*zs/2)) isos = mlab.contour3d(volume,contours=[5,15,25],transparent=True) mlab.show() 

Я предполагаю, что должен быть какой-то способ попасть в базовый графический конвейер VTK (его преобразования и т. Д.) И вставить соответствующее анизотропное масштабирование (если нет какого-либо способа сделать это более непосредственно через mlab API).

Для этого проще всего создать объект scalar_field из входных данных.

Я на самом деле делаю это довольно часто, так как нам нравится глубже (где положительно вниз) в геологии. Это означает, что вам нужно отрицательное приращение в направлении z. Было бы неплохо, если бы это был просто аргумент для различных функций mlab, но его все еще не так сложно сделать.

 from mayavi import mlab import numpy as np s=64 x,y,z = np.ogrid[0:s,0:s,0:s/2] data = np.sqrt((xs/2)**2 + (ys/2)**2 + (2*zs/2)**2) grid = mlab.pipeline.scalar_field(data) grid.spacing = [1.0, 1.0, 2.0] contours = mlab.pipeline.contour_surface(grid, contours=[5,15,25], transparent=True) mlab.show() 

Сферическая оболочка с некубиальными вокселями