使用插值对 numpy 数组重新采样

Resample numpy array with interpolation

我正在处理 Python 中的 5 张图像,这些图像已作为 numpy 数组导入并具有以下形状:

for i in range(len(S_images)):
    print(S_images[i].shape)

(1, 1524, 5500)
(1, 1524, 5499)
(1, 1524, 5500)
(1, 1524, 5499)
(1, 1525, 5499)

我的 objective 是使用 S_stack = np.stack(S_images) 将它们堆叠在一起,但是当然,由于形状不同,我得到了错误:

ValueError: all input arrays must have the same shape

我想要的是将数组重采样为一个共同的形状(例如,(1, 1524, 5500)),同时select一种重采样方法,例如最近邻。

在论坛上找以前的问答我看到了scipy.ndimage.zoom的使用,但这通常是升级或降级常规数据。在我的例子中,我只需要匹配形状以允许堆叠。有什么建议吗?

例如,是否可以 select 一个主数组并将其用作参考,而其他所有数组都必须匹配其形状,如果不行,将应用使用 NN 的重采样方法?

我想出了一个解决方案,但我想知道从 technical/scientific 的角度来看它是否正确。这是解决我的问题的好程序吗?实际上,它正在做我想做的事...

for i in range(len(S_images)):
    if S_images[i].shape[1] !=1524:
        S_images[i] = scipy.ndimage.zoom(S_images[i], (1, 1524/1525, 1),order=0, mode='nearest')

for i in range(len(S_images)):
    if S_images[i].shape[2] !=5499:
        S_images[i] = scipy.ndimage.zoom(S_images[i], (1, 1, 5499/5500 ),order=0, mode='nearest')


for i in range(len(S_images)):
    print(S_images[i].shape)

(1, 1524, 5499)
(1, 1524, 5499)
(1, 1524, 5499)
(1, 1524, 5499)
(1, 1524, 5499)