首页 > 解决方案 > 如何使用 scipy griddata 插入 32x32 图像的缺失像素值?

问题描述

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

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

到目前为止,我所理解的是,该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.]]])

欢迎大家提出意见。另外,有没有更好的方法来插入丢失的像素值?谢谢你。

标签: pythonnumpyscipyinterpolation

解决方案


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

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


推荐阅读