2016-12-07 4 views
0

Я использовал MayaVi для визуализации 3D-объем, как следующий код:RGB 3D объем рендеринга с использованием MayaVi

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

, где М представляет собой 3D-матрица. Мой вопрос заключается в том, что если voxel имеет три значения, которые описывают компоненты (R, G, B), можно ли отобразить том с информацией о цвете?

ответ

0

Несколько предложений:

1) Если скаляры и цвета соответствуют общей палитре, вы должны быть в состоянии установить цветовую карту непосредственно от объема

2) Вы можете настроить ColorTransferFunction вашего объема как показано здесь: http://docs.enthought.com/mayavi/mayavi/auto/mlab_pipeline_other_functions.html#volume (воспроизведено ниже). Так для примера, до тех пор, как ваши цвета плавно варьируя скалярных значений, выбрать несколько точек ваших цветов и добавить их в ЦФК

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. Таким образом, это будет выглядеть как присвоение скаляра каждому вокселю, а затем размещение цвета Rox voxel в соответствующую строку пользовательской цветовой карты.