Переменная альфа-смешение в Pylab - PullRequest
7 голосов
/ 22 марта 2010

Как можно контролировать прозрачность 2D-изображения в pylab?Я хотел бы дать два набора значений (X,Y,Z,T), где X,Y - это массивы позиций, Z - это значение цвета, а T - это прозрачность для функции, подобной imshow, но кажется, что функциятолько принимает альфу как скаляр.В качестве конкретного примера рассмотрим приведенный ниже код, который пытается отобразить двух гауссиан.Чем ближе значение к нулю, тем более прозрачным я бы хотел видеть график.

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()

Примечание: я не ищу график Z1 + Z2 (это было бы тривиально), но дляобщий способ задания альфа-смешения на изображении.

1 Ответ

8 голосов
/ 23 марта 2010

Одна вещь, которую вы можете сделать, это изменить то, что вы положили в imshow. Первая переменная может быть значениями в градациях серого, которые вы использовали, или значениями RGB или RGBA. Если вы используете значения RGB / RGBA, то карта игнорируется. Так, например,

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

сгенерирует то же изображение, что и

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

потому что cm.hsv() просто возвращает значения RGBA. Если вы посмотрите на значения, которые он возвращает, все они имеют 1.0 как значение A (прозрачность). Таким образом, один из способов сделать переменную прозрачность такой:

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)

Возможно, вы найдете немного более элегантный способ сделать это, но, надеюсь, вы поняли идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...