2016-04-28 67 views
1

我在將一個4D numpy數組重塑成2D numpy數組時遇到了一些麻煩。目前,numpy數組如下(35280L,1L,32L,32L)。格式是圖像的數量,通道,寬度,高度。基本上,我有35280 32×32的圖像塊,我想結合圖像塊(保留索引)來創建一個大的圖像。你會如何將來自numpy數組的圖像集合重塑爲一個大圖像?

+0

什麼應該是二維數組的形狀? 「保持指數」是什麼意思? – hpaulj

+0

你想如何組合圖像塊? – Tonechas

回答

1

您有一個數組是這樣的:

images = np.random.randint(0,256,(35280, 1, 32, 32)) 

你需要的第一件事情就是搞清楚(在某種程度上)是什麼最終圖像的寬度應該是。假設這個例子是(441 * 32, 80 * 32)

然後,你可以這樣做:

image = images.swapaxes(0,2).reshape((441 * 32, -1)) 

這給了你,你需要幾乎什麼,除了行交錯,所以你必須:

AAABBBCCC 
DDDEEEFFF 
GGGHHHIII 
AAABBBCCC 
DDDEEEFFF 
GGGHHHIII 

然後,您可以用「花哨索引」來重新排列行:

image[np.array([0,3,1,4,2,5])] 

現在您有:

AAABBBCCC 
AAABBBCCC 
DDDEEEFFF 
DDDEEEFFF 
GGGHHHIII 
GGGHHHIII 

我將作爲練習留下您生成花哨索引序列的部分。

0

重新塑造是不夠的,你必須仔細重新排列你的數據與swapaxes

的樣本數據:

dims=nbim,_,h,w=np.array([6,1,7,6]) 
data=arange(dims.prod()).reshape(dims)%256 

的圖像:

figure() 
for i in range(nbim): 
    subplot(1,nbim,i+1) 
    imshow(data[i,0],vmin=0,vmax=255) 

enter image description here

和大圖:

#number of images in each dim : 
nh = 2 # a choice 
nw=nbim // nh 

bigim=data.reshape(nh,nw,h,w).swapaxes(1,2).reshape(nh*h,nw*w) 
figure()  
imshow(bigim) 

enter image description here

+0

呃,插值......'matshow'讓生活變得輕鬆 –

+0

,你應該提一下關於fortran vs c的命令 –

+0

下次爲'matshow'確定好了。我認爲所有圖像格式今天都是'C'對齊的,因此在這裏講Fortran佈局會增加混淆。 –

相關問題