Mayavi: Mayavi não suporta tuplas RGB como dados pontuais

Criado em 22 nov. 2013  ·  9Comentários  ·  Fonte: enthought/mayavi

No vtk puro, é possível ter superfícies onde point_data.scalars é um vtkUnsignedCharArray. O renderizador interpretará isso como fornecendo um valor RGB ou RGBA distinto para cada vértice e colorirá a superfície de acordo se as configurações estiverem definidas. Objetos Mayavi não permitem que você faça isso porque eles nunca configuram vtkUnsignedCharArrays.

Eventualmente, seria bom tê-lo de forma que se o usuário especificasse tuplas RGB ou RGBA válidas como escalares para as funções do mlab, as cores em cada ponto estivessem em conformidade com os escalares.

Comentários muito úteis

Nenhuma dessas respostas por conta própria realmente fez o que eu queria, mas finalmente descobri combinando-as :)

# Imports
import numpy as np
from mayavi.mlab import quiver3d, draw

# Primitives
N = 200 # Number of points
ones = np.ones(N)
scalars = np.arange(N) # Key point: set an integer for each point

# Define color table (including alpha), which must be uint8 and [0,255]
colors = (np.random.random((N, 4))*255).astype(np.uint8)
colors[:,-1] = 255 # No transparency

# Define coordinates and points
x, y, z = colors[:,0], colors[:,1], colors[:,2] # Assign x, y, z values to match color
pts = quiver3d(x, y, z, ones, ones, ones, scalars=scalars, mode='sphere') # Create points
pts.glyph.color_mode = 'color_by_scalar' # Color by scalar

# Set look-up table and redraw
pts.module_manager.scalar_lut_manager.lut.table = colors
draw()

snapshot

Todos 9 comentários

Os desenvolvedores principais do Mayavi estão bastante ocupados em outros lugares. Eu tenho medo disso por
esta solicitação de recurso aconteça, outra pessoa terá que intervir
e código.

Tudo bem. Eu pretendia isso como um pedido de recurso para o futuro, sei que é uma quantidade considerável de trabalho. É algo em que tentarei trabalhar, se encontrar tempo.

Muito obrigado por ser tão compreensivo. Muito claramente a força de trabalho em
Mayavi não é suficiente para atender a todo o seu potencial.

@GaelVaroquaux haverá algum financiamento no projeto em breve (começando no segundo trimestre do próximo ano)!

Tenho batido minha cabeça contra esta parede em particular durante a maior parte do dia - especificar uma lista de pontos em termos de matrizes de [x, y, z, tamanho, cor] parece uma característica tão óbvia! Por que alguém iria querer que o tamanho dos pontos fosse bloqueado para a cor dos pontos ?!

Seu conjunto de requisitos pode ser o de outras pessoas. Mayavi é construída sobre
VTK, que foi criado como um kit de ferramentas de visualização geral para exibir
dados ricos em variação contínua. Tende a considerar as coisas como abstratas
quantidades que devem ser mapeadas para propriedades visuais de objetos. Gosto disso
ou não, estamos praticamente vinculados a ele.

Dito isso, separar tamanho e cor é facilmente possível com um pouco de
hack: Último item no parágrafo seguinte
http://docs.enthought.com/mayavi/mayavi/mlab.html#adding -color-or-size-customization

Obrigado pela resposta rápida. Infelizmente, é uma limitação importante em termos da capacidade de Mayavi de traçar dados científicos (veja, por exemplo, este tópico , apresentando a citação "Eu também assumi a posição fetal e comecei a chorar depois de perceber que a API não tem nenhuma maneira clara / padrão de cores personalizadas ", que resume exatamente o meu sentimento!). Parece que o recurso é possível no VTK (por exemplo, isso ), embora possa não ser fácil de traduzir para o Mayavi.

(Aliás, parece que você está familiarizado com o que estou tentando fazer aqui - quero usar cores diferentes para cada população diferente de neurônios em um modelo 3D do córtex.)

Oi Cliff,

Não há uma boa API para isso, mas existem algumas soluções alternativas para fazer isso.

Usando uma matriz tvtk unsigned char como sugeri inicialmente aqui

(Vejo
http://stackoverflow.com/questions/19431099/how-to-directly-set-rgb-rgba-colors-in-mayavi,
é complicado para certas fontes de mayavi)

Ou configurando uma grande tabela de cores que contém todos os valores RGB possíveis.

(veja a resposta do usuário eqzx,
http://stackoverflow.com/questions/18537172/specify-absolute-colour-for-3d-points-in-mayavi?rq=3
)

Na sexta-feira, 15 de maio de 2015 às 13h26, Cliff Kerr [email protected]
escreveu:

Obrigado pela resposta rápida. Infelizmente, é uma limitação importante em
termos da capacidade do Mayavi de traçar dados científicos (veja, por exemplo, este tópico
http://stackoverflow.com/questions/18537172/specify-absolute-colour-for-3d-points-in-mayavi,
apresentando a citação "Eu também assumi a posição fetal e comecei a chorar
depois de perceber que a API não tem nenhuma forma clara / padrão de personalização
cores ", que resume exatamente o meu sentimento!). Parece que o recurso é
possível no VTK (por exemplo, este
http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/ColoredPoints),
embora possa não ser fácil traduzir para Mayavi.

-
Responda a este e-mail diretamente ou visualize-o no GitHub
https://github.com/enthought/mayavi/issues/92#issuecomment -102463748.

Nenhuma dessas respostas por conta própria realmente fez o que eu queria, mas finalmente descobri combinando-as :)

# Imports
import numpy as np
from mayavi.mlab import quiver3d, draw

# Primitives
N = 200 # Number of points
ones = np.ones(N)
scalars = np.arange(N) # Key point: set an integer for each point

# Define color table (including alpha), which must be uint8 and [0,255]
colors = (np.random.random((N, 4))*255).astype(np.uint8)
colors[:,-1] = 255 # No transparency

# Define coordinates and points
x, y, z = colors[:,0], colors[:,1], colors[:,2] # Assign x, y, z values to match color
pts = quiver3d(x, y, z, ones, ones, ones, scalars=scalars, mode='sphere') # Create points
pts.glyph.color_mode = 'color_by_scalar' # Color by scalar

# Set look-up table and redraw
pts.module_manager.scalar_lut_manager.lut.table = colors
draw()

snapshot

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

rambalachandran picture rambalachandran  ·  9Comentários

stefanoborini picture stefanoborini  ·  11Comentários

Mallcock1 picture Mallcock1  ·  10Comentários

thoth291 picture thoth291  ·  10Comentários

GaelVaroquaux picture GaelVaroquaux  ·  13Comentários