You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用函数拟合动态重建网格/点云的曲面?

用函数替代三角形网格的曲面拟合需求与实现

我希望找到一种用函数替代三角形来描述网格的方法,因为连续的点和法线对我正在开发的应用十分有益,但尚未理清实现思路。

我需要处理的网格每次重启应用时都会有所变化,它由实时捕获的深度图像直接重建而来,但整体形状大致相近。

网格示例:
Mesh

我曾研究过scipy和numpy的相关函数,但这些工具似乎都是输入x、y数据来得到对应的z值,而我已有完整的x、y、z数据,仅需进行曲面拟合估计。


编辑:已实现CloughTocher插值拟合

在帮助下,我找到了CloughTocher2DInterpolator函数,并实现了以下拟合效果:
Plot of surface fit

我不确定这是否是良好的拟合效果,若有优化建议请告知。我使用的代码如下:

import open3d as o3d
import numpy as np
from scipy.interpolate import CloughTocher2DInterpolator
import matplotlib.pyplot as plt

mesh = o3d.io.read_triangle_mesh("../meshPath")
pcd = mesh.sample_points_uniformly(number_of_points=2500)

o3d.visualization.draw_geometries([pcd])

points = np.asarray(pcd.points)

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

X = np.linspace(min(x), max(x))
Y = np.linspace(min(y), max(y))
X, Y = np.meshgrid(X, Y)  # 2D grid for interpolation
interp = CloughTocher2DInterpolator(list(zip(x, y)), z, fill_value=-1.35)
Z = interp(X, Y)
#value = interp.__call__([1, 1])
fig = plt.figure()
ax = plt.axes(projection='3d')
#ax.contour3D(X, Y, Z, 75, cmap='prism')
#ax.plot_trisurf(x, y, z, cmap='viridis', edgecolor='none')
#ax.plot_wireframe(X, Y, Z, color='black')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='viridis', edgecolor='none')
ax.set_title('surface')

ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.show()

我可以用线框、等高线等方式绘制曲面,效果整体尚可,但左侧存在尖刺问题。


内容的提问来源于stack exchange,提问作者mikkelsen1996

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:45:28