如何使用 scipy 网格数据对 32x32 图像的缺失像素值进行插值?

How to interpolate the missing pixel values of a 32x32 image using scipy griddata?

我有一个表示图像的 32x32 numpy 数组,其中 50% 的值(总计 512 个像素)是 NaN。我想使用 scipy.interpolate 中的 griddata 函数来填充这些缺失值,以便我可以重建图像。

但是,我很难理解 griddata 函数以及如何将我的图像数组传递给它。该函数的参数列在 documentation 中,但我无法理解这些参数在我的数据上下文中的含义。

到目前为止我的理解是 xi 参数指示我的图像数组中我想要插值的索引,我认为这将是 NaN 所在的所有位置。 values 参数是我的图像数组,但文档中提到的形状是 (n,) 所以我必须展平数组吗?我真的不确定 points 参数代表什么。

图像数组看起来像这样:

array([[[ nan,  79.,  nan, ...,  nan,  nan,  44.],
        [ nan,  84.,  45., ...,  48.,  84.,  44.],
        [ nan,  nan,  56., ...,  42.,  66.,  34.],
        ...,
        [126.,  nan,  nan, ...,  70.,  nan, 133.],
        [135., 137.,  nan, ...,  nan,  nan,  nan],
        [142.,  nan,  nan, ...,  nan,  nan, 151.]]])

欢迎提出任何建议。另外,有没有更好的方法来插入丢失的像素值?谢谢。

要回答有关 griddata 如何工作的问题:为了执行插值,您需要提供现有数据点(位置和值)和您希望插值的节点。您现有数据点的位置对应于第一个关键字(points),而它们的值由第二个关键字(values)表示。想象一下,您将测量表面的温度,然后点会为您提供测量位置,而值会告诉您记录的相应温度。最后,第三个关键字 (xi) 包含您希望对现有数据进行插值的点的坐标。通常,这将是一个结构化网格,必须包含在现有数据的空间范围内。这意味着,对于网格中的每个节点,都存在可以定义包含网格点的多边形的数据点。

现在,关于如何实际插入您的数据,这个 应该对您有所帮助。