0

我想在 Python 中对 3D 数据立方体进行 1D 插值。我有 18 张以基准波长拍摄的图像。我想对每个像素进行 1D 插值,以形成 185 个给定特定波长的新图像。我的问题是优化问题。我已经看到了类似的技巧,scipy.ndimage.map_coordinates但我认为这不能应用于我的问题并作为优化解决方案的结果。真正的问题是我的数据的大小:我正在使用一个(18x1024x1024)数据立方体,并且想要一个新的数据立方体输出大小(185x1024x1024)。有没有办法优化以下代码?

import numpy as np
from scipy.interpolate import interp1d

cube_software = np.zeros((18,1024,1024))


lambda_instrument = np.linspace(2,13,185)
lambda_software   = np.linspace(2,13,18)

cube_new = np.zeros((185,1024,1024))

for r in range(np.shape(cube_software)[1]):
    # print('Number %i over %i'%(r,np.shape(cube_software)[1]))
    for u in range(np.shape(cube_software)[2]):
        pixel_inter = interp1d(lambda_software,cube_software[:,r,u])
        cube_new[:,r,u] = pixel_inter(lambda_instrument) 
4

1 回答 1

0

我找到了一种避免两个 for 循环的方法,我直接使用了线性插值的公式并将其调整为矩阵。

例如,如果我有 18 个不同波长的原始数据,然后是一个称为data_cubesize的数据立方体18x1024x1024,并且我想估计位于被调用的波长与我的原始数据立方体之间的波长处k-th的图像:lambda_kindex_before=15W_iindex_before=16 W_j

new_cube[k,:,:]=data_cube[index_before,:,:] + (data_cube[index_after,:,:]-data_cube[index_before,:,:]) / (W_j-W_i) * (W_k-W_i)

并且计算是瞬时的,希望这可以提供帮助。

于 2020-07-28T14:11:43.457 回答