使用掩膜数组的ndimage map_coordinates

1 投票
2 回答
1184 浏览
提问于 2025-04-18 10:16

我正在使用ndimage进行插值,代码如下:

ndimage.map_coordinates(input_data, coords, output, 2, prefilter=False)

现在,问题是我在整个输入数据中没有有效的测量值。所以,我有一个被遮罩的数组,它告诉我哪些数据点是有效的。因此,在进行插值时,我希望只使用有效的像素,并相应地调整权重(确保权重的总和为1)。

但是,我发现没有简单的方法来做到这一点。我想知道是否有人知道好的方法,或者能指引我一些可以使用的库或代码。我之前是用C++的,所以现在在学习Python的过程中还有点摸索。

2 个回答

0

你可以使用 scipy.interpolate.griddata 这个工具,从一些已知的数据点中获取插值结果。下面这个例子

import numpy as np
from scipy.interpolate import griddata

# data array
a = np.arange(9).reshape((3,3)).astype(float)
a[1, 1] = np.nan
print(a)
a = a.flatten()

# coordinate arrays
ii, jj = np.indices((3,3))
ij = np.stack((ii.flatten(), jj.flatten()), axis=1)

# filter out unknowns
mask = ~np.isnan(a)
a = a[mask]
ij = ij[mask]

# interpolate for the missing a[1, 1] element
res = griddata(ij, a, (1, 1), method='cubic')
print(res)

会生成

[[ 0.  1.  2.]
 [ 3. nan  5.]
 [ 6.  7.  8.]]

4.000000157826586
1

听起来你需要关注数据的插值,然后从你想要的坐标中提取值。对于一维数据,你可以使用splrep,而对于二维数据,可以使用bisplrep这两个插值函数(这里有个不错的概述)。这两个函数都可以加权,并且可以让你更精细地控制你用来插值的样条函数。

一旦你用想要的权重过滤了数据,就可以使用以下方法来确定指定坐标的值。

ndimage.map_coordinates(input_data, coords, output, prefilter=True)

注意,prefilter这个关键字参数是默认值,所以不需要特别指定

撰写回答