|
1 سال پیش | |
---|---|---|
data | 1 سال پیش | |
crop-demo-0.py | 1 سال پیش | |
crop-demo-1.py | 1 سال پیش | |
crop-demo-2.py | 1 سال پیش | |
doc-open3d.md | 1 سال پیش | |
mission-2d-slice-sum.py | 1 سال پیش | |
mission-voxelization.py | 1 سال پیش | |
mission_alpha_shaped_mesh.py | 1 سال پیش | |
mission_stock_pile_triangularization.py | 1 سال پیش | |
mission_stock_pile_triangularization_true_data.py | 1 سال پیش | |
mission_stock_pile_voxel.py | 1 سال پیش | |
mission_stock_pile_voxel_true_data.py | 1 سال پیش | |
point_cloud_paint.py | 1 سال پیش | |
readme.md | 1 سال پیش | |
stockpile_volume.ipynb | 1 سال پیش | |
watch-help.py | 1 سال پیش |
是二进制文件。坐标单位是米。有坐标、颜色、法线信息,无协方差信息。
只适用于土堆等(stockpile)堆在平地上的、从上方向地面看去表面一览无余的物体
对alpha shaped mesh求体积时报错:invalid tetra in TetraMesh,是因为mesh内部而非表面也有点。
可通过计算每个点到表面的距离来去除内部和外部的点。
用tri_mesh.is_watertight()判断是否封闭。
用这个算法同样不能确保封闭。create_from_point_cloud_ball_pivoting
也不用考虑Poisson surface reconstruction,这个算法可以保证mesh封闭,但open3d没有实现。
三个表面重构方法都不能保证封闭。但泊松方法洞最少,alpha shapes方法洞最多。
用PyVista配合pymeshfix倒是可以修复mesh的漏洞、计算体积。但如何从点云得到PyVista mesh???这又是一个未知领域。
import pymeshfix
import numpy as np
import pyvista as pv
pv.set_plot_theme('document')
array = np.genfromtxt('ct_prostate_contour_data.csv', delimiter=',')
point_cloud = pv.PolyData(array)
surf = point_cloud.reconstruct_surface(nbr_sz=20, sample_spacing=2)
mf = pymeshfix.MeshFix(surf)
mf.repair()
repaired = mf.mesh
pl = pv.Plotter()
pl.add_mesh(point_cloud, color='k', point_size=10)
pl.add_mesh(repaired)
pl.add_title('Reconstructed Surface')
pl.show()
讨论如何裁剪点云。
提问者的代码已过时,而且肯定有问题他才会提问。所以不管了。
第一个回答者的代码???
第二个回答者的代码???
裁剪相关
裁剪相关
前提:明确点云遗漏的漏洞最大直径r(即直径多少的球刚好能掉入漏洞)不超过多少。显然r完美情况下是0.01
点云降采样(颗粒度g,10厘米?)
(丢弃噪点?remove_statistical_outlier, https://jose-llorens-ripolles.medium.com/stockpile-volume-with-open3d-fa9d32099b6f)
表面重构,采用的参数依据r和g中较大者。
(mesh简化?)
(mesh求连同区域,舍弃零碎的?)
求体积
提供原始点和切割多面体
2222222222
控制台输入:
viewer.modules.clipping.getAllBoxes().filter(e=>!e.isNew).map(e=>e.box.geometry.vertices.map(p=>p.clone().applyMatrix4(e.matrixWorld)))