点云/网格模型的体积计算
点云体积计算
有时用激光扫描设备扫描零件或者用无人机进行测量后会想知道它们的体积。比如下面的土堆:
如果扫描得到的数据是一系列三维点云,那么体积就比较难求,因为如何定义物体的边界比较困难。一种方法是提取三维点云的凸壳(包络体),然后再进行计算(当存在孔、洞时情况就很复杂了)。还有一种简便的估算方法如下图所示,将2.5D点云底面划分成离散的网格,计算每个网格对应单元的体积并相加求和。
point cloud dimension: 1.5D – function values along a line2D – positions in the plane 2.5D – function values in the plane3D – positions in 3DnD – multi-modal data
CloudCompare软件中提供了计算2.5D点云体积的功能:
导入PCD格式的点云,其体积大概为1(在XYZ方向分别生成0-1的随机数,一共200个随机点):
在体积计算界面中定义地面(Ground)及顶面(Ceil):这里地面选为常量,值为0;顶面选为点云,空单元(不包含数据点)不参与体积计算,这里将其选为leave empty。网格划分步长step不能选的太大或太小,选的太小将会有很多单元成为空单元,选的太大会出现较大的计算误差。下图可以看出步长设的太小,导致Matching cell为0,即全是空单元,因此计算出的体积也为零,显然不符合实际情况:
设置合理的步长后点击Update进行计算,可以看到估算出的点云体积为1.311接近1:
网格模型体积计算
在VTK中可以使用vtkMassProperties类来计算模型的体积和表面积(The general assumption here is that the model is of closed surface. Currently only triangles are processed. Use vtkTriangleFilter to convert any strips or polygons to triangles)。因为只能处理三角面片的polydata,需要在pipline中前置vtkTriangleFilter将其他网格类型转换成三角网格类型。下面代码计算Solidworks中导出的STL网格模型的体积和表面积:
#!/usr/bin/env python import vtkfilename = "C:\Users\Administrator\Desktop\part.stl"reader = vtk.vtkSTLReader() reader.SetFileName(filename) reader.Update() polydata = reader.GetOutput()mass = vtk.vtkMassProperties() mass.SetInputData(polydata)print "Surface = ", mass.GetSurfaceArea() print "Volume = ", mass.GetVolume()
Solidworks原始CAD模型导出成stl文件时由于精度限制,因此存在一定的误差。在CloudCompare软件中也可以很方便的对网格模型进行体积、表面积测量:
参考:
Algorithm for calculating the volume of the part of point cloud—stackoverflow
How Pix4Dmapper calculates the Volume?
Compute 2.5D volume
CloudCompare - 3D point cloud and mesh processing software
Volume estimation
VTK体积&表面积测量
点云/网格模型的体积计算相关推荐
- c语言求网格模型的体积,如何计算表面由三角形组成的3D网格物体的体积
实际上是一个非常简单的计算. 诀窍是计算四面体的有符号体积 -根据您的三角形并以原点为起点.体积的符号来自于三角形是否指向原点方向.(三角形的法线本身取决于顶点的顺序,这就是为什么您看不到下面明确引用 ...
- STL文件模型体积计算
体积计算方法[1] 三角网格的所有三角面片围成的空间区域是封闭的,三角网格模型的体积可由每个三角面片的投影体积之和来计算.图1所示棱长为l的立方体,投影平面与下底面平行且距离为h.由于立方体各侧面内的 ...
- VTK修炼之道48:图形基本操作进阶_符号化操作与模型区率计算
1.符号化Glyphing再谈 上一篇帖子提到一个事,就是用符号化操作显示单元的法向量. 模型的法向量数据是向量数据,因此法向量不能像前面讲到的通过颜色映射来显示.但是可以通过符号化(Glyphing ...
- threejs 形状几何体_Three.js模型几何体面积、体积计算
Three.js模型几何体面积.体积计算 在工作中通过Three.js开发项目的时候,一些特定的情况下你可能需要计算一个三维模型的表面积或者体积,比如在3D打印的Web项目中,你需要计算一个三维模型的 ...
- 08 Halcon 3D点云体积计算
1.基于halcon算法平台:2.提供深度图源文件以及解压密码:3.代码预览: /*********************************************************** ...
- 托管式服务网格:多种类型计算服务统一管理的基础设施
王夕宁 读完需要 8 分钟 速读仅需 3 分钟 作者简介:王夕宁 阿里云高级技术专家,阿里云服务网格产品ASM及Istio on Kubernetes技术负责人,专注于Kubernetes.云原生.服 ...
- OBJ网格模型文件(上) - 学习随笔
很早的时候一直有个执念: 我要从0开始,编程写一个obj模型的加载器. 在学习3dsmax的时候,发现这种格式被很多软件所支持,而且导出的文件只含模型和材质,体积很小很干净,建好模型之后通常保存为自身 ...
- 图形处理(十二)拉普拉斯网格优化、最小二乘网格模型光顺
看这篇博文前,请先参考我的另外一篇博文<图形处理(三)简单拉普拉斯网格变形-Siggraph 2004>学习拉普拉斯坐标的相关理论知识.这里要分享的paper,是通过拉普拉斯的方法实现三角 ...
- VTK修炼之道50:图形基本操作进阶_网格模型的特征边 与 封闭性检测
1.封闭性检测 由于受原始数据.重建方法的限制,得到的网格模型并不是封闭的.有时为了显示或者处理某些要求,需要网格必须是封闭的. 封闭性网格应该比较好理解,比如一个球形网格. 1.1网格模型边的分类 ...
最新文章
- cifar数据集介绍及到图像转换的实现
- 一些链接, 关于不可变数据
- 怎么快速插入 100 条数据,用时最短!
- Python入门系列之字符编码
- Pandas把dataframe中的整数数值(integer)转化为时间(日期、时间)信息实战
- java中如何实现两个值互换
- nodejs 向mongodB获取指定数目的数据
- php di,PHP-DI中文文档(基于有道翻译,基本是直接拿过来使用,并没有润色)
- esp32 rtc 时钟设置不对_咱们RTC时钟案例的时间为什么开始的时候总是2014年,怎么改呢?...
- 2021上饶市高考中考成绩查询,2021年上饶中考成绩公布查询时间 上饶中考成绩查询方式入口...
- 天池 在线编程 音乐组合
- IT NEWS WebSite
- [bzoj 2768][bzoj 1877]
- 可以声明一个抽象类类型变量_TypeScript系列(二)变量声明和数据类型
- iOS 代码触发button点击事件
- python源码中的学习笔记_第12章_编码格式与文件操作
- gcc详解以及静态,动态库的生成 1
- SSM+汽车销售平台 毕业设计-附源码171619
- 20145312 《信息安全系统设计基础》实验三 实时系统的移植
- python共存_多版本Python共存的配置方法