Numpy inpaint nan 插值和外推

wbe*_*est 4 python numpy image-processing extrapolation

我正在使用 numpy 和 scipy 开发一个项目,我需要填写 nanvalues。目前我使用 scipy.interpolate.rbf,但它一直导致 python 崩溃,所以严重的 try/ except 甚至无法保存它。然而,运行几次后,如果中间有数据被所有nan包围,就像一座孤岛,它似乎可能会不断失败。有没有更好的解决方案,不会一直崩溃?

顺便说一句,这是我需要推断的大量数据。有时多达图像的一半(70x70,灰度),但它不需要是完美的。它是图像拼接程序的一部分,因此只要它与实际数据相似,它就可以工作。我尝试过用最近邻来填写nan,但结果相差太大。

编辑

它似乎总是失败的形象。隔离此图像允许它在崩溃之前传递一次图像。 不良形象

我至少使用版本 NumPy 1.8.0 和 SciPy 0.13.2。

Ste*_*alt 7

使用 SciPy 的 LinearNDInterpolator。如果所有图像的大小相同,则可以预先计算并重新使用网格坐标。

import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate

x = np.linspace(0, 1, 500)
y = x[:, None]
image = x + y

# Destroy some values
mask = np.random.random(image.shape) > 0.7
image[mask] = np.nan

valid_mask = ~np.isnan(image)
coords = np.array(np.nonzero(valid_mask)).T
values = image[valid_mask]

it = interpolate.LinearNDInterpolator(coords, values, fill_value=0)

filled = it(list(np.ndindex(image.shape))).reshape(image.shape)

f, (ax0, ax1) = plt.subplots(1, 2)

ax0.imshow(image, cmap='gray', interpolation='nearest')
ax0.set_title('Input image')
ax1.imshow(filled, cmap='gray', interpolation='nearest')
ax1.set_title('Interpolated data')
plt.show()
Run Code Online (Sandbox Code Playgroud)

插值缺失值