2016-12-07 1 views
0

I utilisé mâyâvi pour rendre un volume 3D comme le code suivant:RGB rendu de volume 3D à l'aide mâyâvi

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

où M est une matrice 3D. Ma question est que si le voxel a trois valeurs qui décrivent les composants (R, G, B), est-il possible de rendre un volume avec des informations de couleur?

Répondre

0

Plusieurs suggestions:

1) Si vos scalaires et les couleurs correspondent à une palette de couleurs commune, vous devriez être en mesure de définir la palette de couleurs directement du volume

2) Vous pouvez personnaliser le ColorTransferFunction de votre volume comme illustré ici: http://docs.enthought.com/mayavi/mayavi/auto/mlab_pipeline_other_functions.html#volume (reproduit ci-dessous). Donc, pour votre exemple, tant que vos couleurs sont différentes en douceur avec les valeurs scalaires, choisissez quelques points d'intérêt vos couleurs et les ajouter dans le FCT

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) Avez-vous vraiment besoin du rendu de volume? Sinon, il peut être plus facile de visualiser sous forme de points 3D et de définir une carte de couleurs personnalisée, par ex. https://stackoverflow.com/a/30266228/209246. Cela équivaudrait donc à assigner un scalaire à chaque voxel, puis à placer la couleur RVB du voxel dans la rangée correspondante d'une palette de couleurs personnalisée.