2010-03-22 12 views
7

¿Cómo se controla la transparencia sobre una imagen 2D en pylab? Me gustaría dar dos conjuntos de valores (X,Y,Z,T) donde X,Y son matrices de posiciones, Z es el valor de color y T es la transparencia de una función como imshow pero parece que la función solo toma alfa como un escalar. Como ejemplo concreto, considere el siguiente código que intenta mostrar dos gaussianos. Cuanto más cerca esté el valor de cero, más transparente me gustaría que fuera la trama.Mezcla alfa variable en pylab

from pylab import * 

side = linspace(-1,1,100) 
X,Y = meshgrid(side,side) 

extent = (-1,1,-1,1) 

Z1 = exp(-((X+.5)**2+Y**2)) 
Z2 = exp(-((X-.5)**2+(Y+.2)**2)) 

imshow(Z1, cmap=cm.hsv, alpha=.6, extent=extent) 
imshow(Z2, cmap=cm.hsv, alpha=.6, extent=extent) 
show() 

Nota: Yo no busco a una parcela de Z1 + Z2 (que sería trivial) pero para un modo general para especificar la mezcla alfa a través de una imagen.

Respuesta

7

Una cosa que puedes hacer es modificar lo que pones en imshow. La primera variable puede ser valores de escala de grises como los que ha utilizado o puede ser valores RGB o RGBA. Si tiene valores RGB/RGBA, entonces cmap se ignora. Así, por ejemplo,

imshow(Z1, cmap=cm.hsv, alpha=.6, extent=extent) 

generará la misma imagen que

imshow(cm.hsv(Z1), alpha=.6, extent=extent) 

porque cm.hsv() sólo devuelve los valores RGBA. Si echas un vistazo a los valores que devuelve, todos tienen 1.0 como valor A (la transparencia). Así que una manera de hacer transparencia variable sería algo como esto:

def mycmap(x): 
    tmp = cm.hsv(x) 
    for i in xrange(tmp.shape[0]): 
     for j in xrange(tmp.shape[0]): 
      tmp[i,j][3] = somefunction of x[i,j] that generates the transparency 
    return tmp 

imshow(mycmap(Z1), extent=extent) 
imshow(mycmap(Z2), extent=extent) 

Usted puede encontrar un poco más elegante de hacer esto, pero esperamos que pueda hacerse una idea.

+0

¡Esto es genial y exactamente lo que estaba buscando! Mirando más adentro veo que 'imshow' puede tomar un' MxNx4' es decir. una matriz Z con el mapa de colores predefinido por el usuario. ¡Gracias! – Hooked

Cuestiones relacionadas