三维数据立方体的一维插值优化



我想用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) 

我找到了一种避免这两种情况的方法。对于循环,我直接使用了线性插值的公式,并将其用于矩阵。

例如,如果我有18个不同波长的原始数据,然后是一个大小为18x1024x1024的名为data_cube的数据立方体,并且我想估计位于index_before=15W_iindex_before=16W_j之间的k-th波长lambda_k的图像,则:

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

并且计算是即时的,希望这能有所帮助。

最新更新