我使用Mayavi将3D体积渲染为以下代码:

from mayavi import mlab
vol_mlab = mlab.pipeline.volume(mlab.pipeline.scalar_field(M))
mlab.colorbar()
mlab.show()


其中M是3D矩阵。我的问题是,如果体素具有描述(R,G,B)分量的三个值,是否可以使用颜色信息渲染体积?

最佳答案

几点建议:

1)如果标量和颜色与常见的颜色图相对应,则应该能够直接设置体积的颜色图

2)您可以自定义卷的ColorTransferFunction,如下图所示:http://docs.enthought.com/mayavi/mayavi/auto/mlab_pipeline_other_functions.html#volume(复制如下)。因此,以您的示例为例,只要您的颜色随标量值平滑变化,请选择几种颜色的航路点并将其添加到CTF中

vol = mlab.pipeline.volume(src)

# Changing the ctf:
from tvtk.util.ctf import ColorTransferFunction
ctf = ColorTransferFunction()
ctf.add_rgb_point(value, r, g, b)  # r, g, and b are float
                                   # between 0 and 1
ctf.add_hsv_point(value, h, s, v)
# ...
vol._volume_property.set_color(ctf)
vol._ctf = ctf
vol.update_ctf = True


3)您真的需要体绘制吗?如果不是这样,可能更容易将其可视化为3D点并设置自定义颜色图,例如https://stackoverflow.com/a/30266228/209246。因此,这看起来像为每个体素分配了一个标量,然后将体素的RGB颜色放置到自定义颜色图的相应行中。

10-05 18:06