2015-03-03 2 views
2

Я использую mayavi.mlab для построения разрезанных плоскостей по объему в питоне.Плоские объемные плоскости в питоне майави без интервала между вокселями

Отрисовка всегда интерполируется. Есть ли способ построить эти плоскости без интерполяции, чтобы пиксели/вокселы были видны?

Пример кода, показывающий плоскость разреза через объем вокселей 20x20x20.

""" 
Testing scalar_cut_plane 
""" 
import numpy as np 
import mayavi.mlab as mlab 

# creating volume that increases in value 
img3d = np.arange(20) 
img3d = np.expand_dims(img3d, axis=1) 
img3d = np.expand_dims(img3d, axis=2) 
img3d = np.tile(img3d, (1, 20, 20)) 

fig = mlab.figure() 
src = mlab.pipeline.scalar_field(img3d) 

# Plotting two cut planes 
cp2 = mlab.pipeline.scalar_cut_plane(src, plane_orientation='y_axes') 
cp2.implicit_plane.widget.enabled = False 
cp3 = mlab.pipeline.scalar_cut_plane(src, plane_orientation='z_axes') 
cp3.implicit_plane.widget.enabled = False 
mlab.view(azimuth=50, elevation=None) 
mlab.outline() 
mlab.show() 

Выход

enter image description here

ответ

1

Лучшее решение, которое я мог бы найти для этой проблемы заключается в использовании SciPy интерполяции, чтобы увеличить громкость без интерполяции.

from scipy.ndimage.interpolation import zoom 
img3d2 = zoom(img3d, 4, order=0) 

enter image description here

Размер воксельная теперь видна

1

Я не являюсь очень случайным пользователем MayaVi, поэтому ни в коем случае эксперт, но мне удалось взломать что-нибудь вместе без укрупнения. Для этого я использовал image_plane_widget вместо scalar_cut_plane, не совсем уверен в различии.

import numpy as np 
import mayavi.mlab as mlab 

# creating volume that increases in value 
img3d = np.arange(20) 
img3d = np.expand_dims(img3d, axis=1) 
img3d = np.expand_dims(img3d, axis=2) 
img3d = np.tile(img3d, (1, 20, 20)) 

fig = mlab.figure() 
src = mlab.pipeline.scalar_field(img3d) 

# Plotting two cut planes 
cp2 = mlab.pipeline.image_plane_widget(src, plane_orientation='y_axes') 
cp3 = mlab.pipeline.image_plane_widget(src, plane_orientation='z_axes') 

for p in [cp2, cp3]: 
    p.ipw.texture_interpolate = "off" 
    p.ipw.set_input_data(p.ipw._get_input()) 

mlab.view(azimuth=50, elevation=None) 
mlab.outline() 
mlab.show() 

mayavi image_plane_widget texture interpolation

Простого texture_interpolate = "off" не работает, как указано в ВТК документы:

Установить перед установкой входной vtkImageData. По умолчанию включено.

http://www.vtk.org/doc/nightly/html/classvtkImagePlaneWidget.html

 Смежные вопросы

  • Нет связанных вопросов^_^