如何使用 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) 包含您希望对现有数据进行插值的点的坐标。通常,这将是一个结构化网格,必须包含在现有数据的空间范围内。这意味着,对于网格中的每个节点,都存在可以定义包含网格点的多边形的数据点。
现在,关于如何实际插入您的数据,这个 应该对您有所帮助。
我有一个表示图像的 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) 包含您希望对现有数据进行插值的点的坐标。通常,这将是一个结构化网格,必须包含在现有数据的空间范围内。这意味着,对于网格中的每个节点,都存在可以定义包含网格点的多边形的数据点。
现在,关于如何实际插入您的数据,这个