使用两个图像(2D阵列)作为输入,是否存在图像的一维插值(沿一个轴)?

时间:2015-06-14 09:18:55

标签: python arrays numpy interpolation convolution

我有两个代表x和y值的图像。图像中充满了“洞”(两个图像中的“洞”相同)。

我希望沿轴的一个进行插值(线性插值很好,尽管更高级插值是可取的),以便“填充”这些孔。

假设选择的轴是0,也就是说,我想在每列上插值。我所发现的numpy是x是相同的插值(例如numpy.interpolate.interp1d)。然而,在这种情况下,每个x是不同的(即,每行中的孔或空单元是不同的)。

我可以使用任何numpy / scipy技术吗?一维卷积可以工作吗?(虽然内核是固定的)

1 个答案:

答案 0 :(得分:1)

您仍然可以使用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.        ]])