python – Numpy inpaint nans插值和外推
作者:互联网
我正在研究一个使用numpy和scipy的项目,我需要填写nanvalues.目前我使用scipy.interpolate.rbf,但它一直导致python崩溃,所以严重尝试/除了甚至不会保存它.然而,在运行几次之后,似乎它可能会在中间数据被所有nans包围的情况下继续失败,例如岛屿.有没有更好的解决方案,不会崩溃?
顺便说一句,这是我需要推断的大量数据.有时多达一半的图像(70×70,灰度),但它不需要是完美的.它是图像拼接程序的一部分,因此只要它与实际数据类似,它就可以工作.我试过最近的邻居填写nans,但结果太不一样了.
编辑:
它总是似乎失败的图像.隔离此图像允许它在崩溃之前传递图像ONCE.
我至少使用版本NumPy 1.8.0和SciPy 0.13.2.
解决方法:
使用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()
标签:python,numpy,image-processing,extrapolation 来源: https://codeday.me/bug/20190825/1716965.html