是否存在使用两个图像(二维数组)作为输入的图像的一维插值(沿一个轴)?
Is there A 1D interpolation (along one axis) of an image using two images (2D arrays) as inputs?
我有两张代表 x 和 y 值的图像。图像中充满了 'holes'(两个图像中的 'holes' 相同)。
我想沿其中一个轴进行插值(线性插值很好,但更高级别的插值更好)以便 'fill' 孔。
假设选择的轴为0,即我要对每一列进行插值。我在 numpy 中发现的只是 x 相同时的插值(例如 numpy.interpolate.interp1d)。然而,在这种情况下,每个 x 都是不同的(即每行中的孔或空单元格不同)。
有什么numpy/scipy技巧可以使用吗?一维卷积可以工作吗?(尽管内核是固定的)
您仍然可以使用 interp1d:
import numpy as np
from scipy import interpolate
A = np.array([[1,np.NaN,np.NaN,2],[0,np.NaN,1,2]])
#array([[ 1., nan, nan, 2.],
# [ 0., nan, 1., 2.]])
for row in A:
mask = np.isnan(row)
x, y = np.where(~mask)[0], row[~mask]
f = interpolate.interp1d(x, y, kind='linear',)
row[mask] = f(np.where(mask)[0])
#array([[ 1. , 1.33333333, 1.66666667, 2. ],
# [ 0. , 0.5 , 1. , 2. ]])
我有两张代表 x 和 y 值的图像。图像中充满了 'holes'(两个图像中的 'holes' 相同)。
我想沿其中一个轴进行插值(线性插值很好,但更高级别的插值更好)以便 'fill' 孔。
假设选择的轴为0,即我要对每一列进行插值。我在 numpy 中发现的只是 x 相同时的插值(例如 numpy.interpolate.interp1d)。然而,在这种情况下,每个 x 都是不同的(即每行中的孔或空单元格不同)。
有什么numpy/scipy技巧可以使用吗?一维卷积可以工作吗?(尽管内核是固定的)
您仍然可以使用 interp1d:
import numpy as np
from scipy import interpolate
A = np.array([[1,np.NaN,np.NaN,2],[0,np.NaN,1,2]])
#array([[ 1., nan, nan, 2.],
# [ 0., nan, 1., 2.]])
for row in A:
mask = np.isnan(row)
x, y = np.where(~mask)[0], row[~mask]
f = interpolate.interp1d(x, y, kind='linear',)
row[mask] = f(np.where(mask)[0])
#array([[ 1. , 1.33333333, 1.66666667, 2. ],
# [ 0. , 0.5 , 1. , 2. ]])