繁体   English   中英

Python 中 3D 势场的平滑/插值

[英]Smoothing/interpolation of 3D potential field in Python

我正在处理有障碍物的配置空间中的路径规划问题。 我用一个势场对其进行建模,其中障碍物是从表面出现的峰。 我想插入这些峰值,以便更平滑地表示障碍物。 我尝试使用 scipy griddata function 但它给了我这个:(见第二张图片)。 请问有人有想法吗? 凹凸不平的表面 插值曲面

这是我的代码:

#map
nx = 40
ny = 40
x = np.linspace(0,5,nx)
y = np.linspace(0,5,ny)
X,Y = np.meshgrid(x,y)

#data to plot
U = np.zeros((nx,ny))
points = []
for i in range(nx):
    for j in range(ny):
        U[i][j] = potential(X[i][j],Y[i][j],gx,gy,obstacle,mu)
        points.append([i,j])

#interpolation
xnew ,ynew = np.linspace(0,5,2*nx), np.linspace(0,5,2*ny)
Xnew, Ynew = np.meshgrid(xnew,ynew)
values = np.reshape(U,(1600,))
Z = griddata(points, values, (Xnew, Ynew), method='linear')

#plot
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(Xnew, Ynew, Z, cmap=cm.coolwarm,linewidth=0, antialiased=False)
fig2 = plt.figure()
ax = fig2.gca(projection='3d')
surf = ax.plot_surface(X, Y, U, cmap=cm.coolwarm,linewidth=0, antialiased=False)
fig.colorbar(surf, shrink=0.5, aspect=5)

plt.show()

如果您确信这些数据点不是异常值...您可以使用内插 function 内置 function SciPy 库。 此链接下提供了示例:

[3d 样条插值][1] python 中 3D 中的样条插值

请注意 SciPy 非常慢。 引用第 2 条下的回复,基于一些随机数据集 (512x512x110) 差异可能很大:

SciPy的解决方案:982ms; 您的 cython 解决方案:24.7 毫秒

Python 3D 插值加速

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM