python 3D坐标点云插值

python 3D coordinate point cloud interpolation

我有一个 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,描述 space 中的 3D 点)都使用 mgrid。我不想要网格中的结果数据,我想要它的原始输入格式,基本上是点云输入和点云输出

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

可以在此 page and in the links therein. You can find 5 tutorials at the bottom of this page. A list of available kernels can be found 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)