2010-03-22 3 views
7

파일 랩에서 2D 이미지의 투명도를 어떻게 조절하나요? 두 세트의 값을주고 싶습니다. (X,Y,Z,T)X,Y은 위치 배열이고, Z은 색상 값이고, Timshow과 같은 함수의 투명도입니다.하지만이 함수는 스칼라로만 알파를 사용합니다. 구체적인 예로서 아래 두 개의 가우시안을 표시하려는 코드를 생각해보십시오. 값이 0에 가까울수록 작의가 더 투명 해집니다.가변 형 알파 블랜딩

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의 플롯을 찾고 있지 않다 (즉, 사소한 것)하지만, 일반적인 방법에 대한 이미지에 알파 블렌딩을 지정할 수 있습니다.

답변

7

당신이 할 수있는 한 가지는 imshow에 넣은 것을 수정하는 것입니다. 첫 번째 변수는 사용한 것과 같이 그레이 스케일 값이거나 RGB 또는 RGBA 값이 될 수 있습니다. RGB/RGBA 값이라면 cmap은 무시됩니다. cm.hsv() 그냥 RGBA 값을 반환하기 때문에

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

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

같은 이미지를 생성합니다, 예를 들면 그래서. 반환하는 값을 살펴보면 모두 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) 

당신은이 일을 좀 더 우아한 방법을 찾을 수도 있지만 잘하면 당신은 아이디어를 얻을.

+0

이것은 내가 찾고 있던 위대하고 정확히 무엇입니까! 더 자세히 살펴보면'imshow'는'MxNx4 '즉, 사용자가 미리 정의한 색상 표가있는 Z- 배열 감사! – Hooked