如何从点云或 3d 对象 analyse/calculate 人体部位的周长?

How to analyse/calculate circumference of human body parts from point cloud or 3d objects?

我正在使用 win10、python 和 c#。我想使用点云或 .stl .obj .ply 等 3d 扫描来计算人体部位(腹部、二头肌等)的周长。现在我可以用kinect v2得到人体的点云。我有人体点云,以 .stl .obj .ply 格式扫描 3d 人体。

我需要一些关于它的想法和信息。我不知道如何分析我所拥有的东西,如何计算我想要的东西。

在这里我找到了一个我正在尝试做的例子,但它不需要像那样非常稳定,它是为了学校作业。也许你可以给我一些关于如何实现我的目标的想法。感谢您的帮助。

https://www.youtube.com/watch?time_continue=48&v=jOvaZGloNRo

我使用 kinect v2 获取 3d 扫描对象并使用 PCL 将其转换为点云。

我不知道如何将 PCL 与 Python 或 C# 一起使用。一般来说,您正在查看以下步骤:

  1. 将点过滤到感兴趣的区域
  2. 分割形状
  3. 提取参数

如果您只对 Python 感兴趣,那么 OpenCV 可能是最佳选择。您还可以使用 C++ 开发核心逻辑并将其包装为 Python 或 C#。 C++ 也有一些不错的 UI 库(Qt,nanogui),请参阅以下详细信息以使用 PCL

实现 objective

过滤

CropBox or PassThrough can be used for this. It'll result in similar results as shown in the image assuming that the frame has been chosen properly. If not, the points cloud can be easily transformed

分割形状

假设您想要一个平均周长,您可能需要尝试使用 Circle 2D、Circle 3D 和 Cylinder 模型。有关用法和 API 的更多详细信息是 here。选择的方法可以是简单的 SAC(样本一致性),如 RANSAC(随机 SAC)或高级方法,如 LMEDS(最小二乘中位数)或 MLESAC(最大似然估计 SAC)

提取参数

所有模型都有一个半径字段,可用于使用标准公式 (2*pi*r)

求周长

免责声明:请注意形状是圆形,不是椭圆形,圆柱体是直角圆柱体。因此,如果测量的对象(手臂或二头肌)不是圆形,在极端情况下计算值可能不接近真实值