使用插值对 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)
我正在处理 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)