2014-10-05 3 views
1

Я пытаюсь использовать for-loop для складывания 6 разных изображений один поверх другого для создания 3D-стека. Я новичок в Python ... и я не могу понять это из. Как создать стек и как я могу получить доступ к каждому изображению в стеке позже? Мой код-то вроде этого ...Stacking images as numpy array

image = data.camera() 

noisyImage = np.zeros(image.shape(0),image.shape(1)) 

fig = plt.figure(figsize=(12,4)) 

for i in range(6): 
    noisyImage = util.random_noise(image,mode='gaussian',seed=i) 
    result = np.dstack(noisyImage,noisyImage) 
    ax = plt.subplot(2,3,i) 

ответ

0

Попробуйте это:

# reshape array that is (N,M) to one that is (N,M,1) no increase in size happens. 
n1=np.reshape(noisyImage,noisyImage.shape+(1,)) 
if(i==1): 
    result=n1 
else: 
# concatenate the N,M,1 version of the array to the stack using the third index (last index) as the axis. 
    result=np.concatenate(result,n1,axis=n1.ndim-1) 

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

def MatrixToMultiChannel(f,x,*args,**kwargs): 
    nchannels=x.shape[-1] 
    y=np.reshape(x,(x.size/nchannels,nchannels)) 
    for i in range(0,nchannels): 
     yi=np.reshape(y[:,i],x.shape[:x.ndim-1]) 
     m1=genericF(f,yi,*args, **kwargs) 
     m1=np.reshape(m1,m1.shape+(1,)) 
     if(i==0): 
      fout=m1 
     else: 
      fout=np.concatenate((fout,m1),axis=m1.ndim-1) 
    return fout