python三维坐标点云插值

时间:2017-07-31 18:03:10

标签: python interpolation kriging

我有一个np坐标数组 -

Data[:,0] = x[:]
Data[:,1] = y[:]
Data[:,2] = z[:]

这表示具有缺失数据区域的点云。

如何将此作为输入数据用于某些插值函数(理想情况下是克里金法),它将在X和Y网格上给出一个插值的Z值:

xmax = np.max(data[:, 0])
ymax = np.max(data[:, 1])
xmin = np.min(data[:, 0])
ymin = np.min(data[:, 1])
xnew = np.linspace(xmin,xmax,35)
ynew = np.linspace(ymin,ymax,35)
x = np.zeros(1225)
y = np.zeros(1225)

for i in range (0,35):
    for j in range(0,35):
        x[i*35+j] = xnew[i]
        y[i*35+j] = ynew[j]

我遇到了麻烦,因为我能找到的所有讨论2D插值的内容(2D,因为他们的输入数组是2D,描述空间中的3D点)使用了mgrid。我不希望结果数据在网格中,我希望它以原始输入格式,基本上是pointcloud输入和pointcloud输出

1 个答案:

答案 0 :(得分:1)

在python中,Kriging / Gaussian Process Regression的很好实现有很多例子,是众所周知的机器学习包scikit-learn之一。它基于众所周知的DACE matlab实现。

有关高斯过程回归实现的文档可在此page及其中的链接中找到。您可以在page的底部找到5个教程。可以找到可用内核列表here

使用您提供的数据,您只需执行以下操作即可将简单模型与您选择的内核相匹配:

import sklearn
gp = sklearn.gaussian_process.GaussianProcessRegressor(kernel=RBF(10, (1e-2, 1e2)))
gp.fit(Data[:,0:1], Data[:,2])  

y_pred = gp.predict(the_grid_data_on_which _you_need_to_predict)