Я использую mayavi (3.3.2) для отображения изоповерхностей объема.
Как правило, в моих томах нет кубических вокселей; например, сетка выборки может быть 1 мм x 1 мм по осям X и Y, но 1,4 мм по оси Z.
Как я могу заставить такие объемы отображаться с правильными пространственными пропорциями, используя mlab.contour3d
или mlab.pipeline.iso_surface
Mayavi? Я действительно предпочел бы не передискретизировать объемы в кубическую сетку.
Другой способ сформулировать проблему: что я могу сделать, чтобы приведенный ниже код отображал сферу вместо сплющенного эллипсоида (взяв 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(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 (его преобразования и т. д.) и вставить соответствующее анизотропное масштабирование (если нет способа сделать это более непосредственно через API mlab).