如何用函数拟合动态重建网格/点云的曲面?
用函数替代三角形网格的曲面拟合需求与实现
我希望找到一种用函数替代三角形来描述网格的方法,因为连续的点和法线对我正在开发的应用十分有益,但尚未理清实现思路。
我需要处理的网格每次重启应用时都会有所变化,它由实时捕获的深度图像直接重建而来,但整体形状大致相近。
网格示例:
我曾研究过scipy和numpy的相关函数,但这些工具似乎都是输入x、y数据来得到对应的z值,而我已有完整的x、y、z数据,仅需进行曲面拟合估计。
编辑:已实现CloughTocher插值拟合
在帮助下,我找到了CloughTocher2DInterpolator函数,并实现了以下拟合效果:
我不确定这是否是良好的拟合效果,若有优化建议请告知。我使用的代码如下:
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
相关产品推荐
相关产品推荐

