Самый быстрый способ перебрать стек tif и извлечь значения пикселей - PullRequest
0 голосов
/ 29 августа 2018

У меня большой стек tif изображений +1500, и для каждого изображения у меня есть ~ 100 позиций в x, y, из которых я хочу извлечь значение маски. Кадр данных можно визуализировать с помощью списков ниже:

x=[80.1,80.2,80.1,80.2,80,2,80.3]
y=[40.1,40.2,40.1,40.2,40.2,40.3]
frame = [1,2,3,4,5,6]

Кажется, что следующий код работает, но для его прохождения требуется некоторое время. Любой, кто мог бы предложить более быстрое решение:

blue = image_loader_video(blue_video) # video as numpy array

def df_extractor(row):
    a,b = row['x'],row['y']
    frame = int(row['frame'])
    array = blue[frame]

    nx,ny = blue_shape
    y,x = np.ogrid[-a:nx-a,-b:ny-b]
    mask = x*x + y*y <= lip_int_size  
    mask2 = x*x + y*y <= lip_int_size+9 # to make a "gab" between BG and roi

    BG_mask = (x*x + y*y <=lip_BG_size)
    BG_mask = BG_mask-mask2
    return (sum((array[mask]))),np.median(((array[BG_mask])))

final_df['signal_np'],final_df['np_bg'] = final_df.apply(df_extractor,axis= 1)
...