我使用mayavi.mlab绘制了python中一个卷的切平面图。
呈现总是内插的。有没有一种方法可以在不插值的情况下绘制这些平面,从而使像素/体素可见?
示例代码,显示通过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()输出

发布于 2015-04-05 15:36:46
对于这个问题,我能找到的最好的解决办法是使用use插值来扩大体积而不进行插值。
from scipy.ndimage.interpolation import zoom
img3d2 = zoom(img3d, 4, order=0)

现在可以看到体素大小。
发布于 2017-02-26 11:07:55
我是一个非常随意的使用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()

就像vtk文档中提到的那样,仅仅一个texture_interpolate = "off"不起作用:
在设置vtkImageData输入之前设置。默认是打开的。
http://www.vtk.org/doc/nightly/html/classvtkImagePlaneWidget.html
https://stackoverflow.com/questions/28837695
复制相似问题