2016-04-15 96 views
0

如何一次平均多個堆棧?理想情況下使用像ImageJ這樣的GUI工具?我想在大約10-20個堆棧上做到這一點:1500x1500像素,500片,每個堆棧中有1個通道。一次加載所有這些將會推動我的RAM的極限。作爲一個輸出,我想要一個堆棧(1500x1500像素,500個切片,1個通道),其強度平均在不同的堆棧上。多個堆棧的平均數

ImageJ似乎限於一次平均2個堆棧。

我希望所有堆疊的平均重量在最終平均值。

回答

2

理想情況下使用像imageJ一樣的GUI工具?

關於使用的ImageJ並沒有涉及到任何一段代碼的問題是題外話上stackoverflow.com和應在ImageJ forum是最好問。

我該如何一次平均多個堆棧?

ImageJ中,你可以建立從堆棧一個hyperstack(例如,通過使用圖像>棧>工具>串連...然後圖像> Hyperstacks>棧Hyperstack ...)並隨後創建平均投影(圖像>疊加> Z項目...)。 要完成您的任務,您應該將每個堆疊的500個切片分配給維度,並且要平均的維度應爲z

希望有所幫助。

0

我有太多的堆棧將它們組合成一個大的hyperstack。我內存不足了。

我結束了使用Python來代替:

import tkFileDialog 
import os 
import matplotlib.pyplot as plt 
from PIL import Image 
import numpy as np 
import glob 
from tifffile import imsave 

#select a directory containing tif-stacks to process 
#tif-stacks must have equal dimensions 

sd=tkFileDialog.askdirectory() 

#list of files to process 
fl= glob.glob(os.path.join(sd,'*.tif')) 

#number of files to process 
n_files=np.shape(fl)[0] 

im = Image.open(fl[0]) 

#get number of frames in first file by seeking all frames until error occurs 
#this seems clunky but is very fast 
#assuming same number of frames for all files 
n = 0 
while True: 
    n += 1 
    try: 
     im.seek(n) 
    except: 
     break 
n_frames=n 

#loop through all images, 
#read each frame and accumulate frame-wise sum over all stacks 

w, h = im.size 
temp = np.zeros((h,w,n_frames), dtype=np.int32) 

for i in range(n_files): 
    print 'processing file: ', i 
    im = Image.open(fl[i]) 

    for n in range (n_frames): 
     curframe = np.array(im.getdata()).reshape(h,w) 
     temp[:,:,n] += curframe 
     im.seek(n) 
     print ['frame: ', n],"   \r", 

avgStack=temp/n_files