Я использую mayavi (3.3.2) для отображения изоповерхностей объема.
Как правило, мои объемы не имеют кубических вокселей; например, размер сетки выборки может составлять 1 мм x 1 мм по осям X и Y, но 1,4 мм по направлению Z.
Как я могу получить такие объемы для отображения с правильными пространственными пропорциями с помощью Mayavi mlab.contour3d
или mlab.pipeline.iso_surface
? Я бы действительно предпочел не преобразовывать объемы в кубическую сетку.
Другой способ сформулировать проблему: что я могу сделать, чтобы приведенный ниже код отображал сферу вместо плоского эллипсоида (беря объем
с предполагаемыми вокселями с соотношением сторон 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(x-s/2)+sqr(y-s/2)+sqr(2*z-s/2))
isos = mlab.contour3d(volume,contours=[5,15,25],transparent=True)
mlab.show()
Я предполагаю, что должен быть какой-то способ добраться до базового графического конвейера VTK ( его преобразования и т. д.) и вставка соответствующего анизотропного масштабирования (если нет другого способа сделать это напрямую через mlab API).