【问题标题】:How to interpolate the missing pixel values of a 32x32 image using scipy griddata?如何使用 scipy griddata 插入 32x32 图像的缺失像素值?
【发布时间】:2019-09-24 05:24:43
【问题描述】:

我有一个 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.]]])

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

【问题讨论】:

    标签: python numpy scipy interpolation


    【解决方案1】:

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

    现在,对于如何实际插入数据,answer 应该可以帮助您。

    【讨论】:

    • 感谢您的回答和链接!
    • 这并不适用于所有情况。如果您请求的插值点位于原始点的凸包之外,则不会进行插值。例如,如果您有一整行在边缘没有值,或者在一个角落没有任何值。
    • “通常,这将是一个结构化网格,必须包含在现有数据的空间范围内。这意味着,对于网格中的每个节点,都存在可以定义包含网格点的多边形。”我想这大概就是我写的,用更简单的话来说?
    猜你喜欢
    • 1970-01-01
    • 2018-11-24
    • 2012-03-28
    • 2014-03-27
    • 2011-09-17
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 2013-01-01
    相关资源
    最近更新 更多