Как правильно отображать объем с некубическими вокселями в Mayavi

Я использую 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).

8
задан timday 20 May 2011 в 19:39
поделиться