Open Cascade 7.7.0 Beta 新功能:BRepLib_PointCloudShape

转载请注明原文链接:https://blog.csdn.net/Mechanicoder/article/details/127328298

 

1. 简介

OCC官方在2022年10月3日发布 7.7 Beta 版,其中一个更新为:一个用于生成拓扑模型上的点集的工具方法。

Introduced new tool BRepLib_PointCloudShape generating a point set for a 
topological shape.

 参考新功能说明文档和用户文档,其主要功能:在距离模型表面指定距离内生成点集,可以用来模拟激光扫描模型所得到的点云,提供两种生成方式

  1. 根据设定的点集密度值自动生成点集;
  2. 根据模型三角形网格顶点生成。[文档特别注明该方法非线程安全]

 2. 测试效果

 使用三个模型进行测试,效果如下:

图1:模型1. 正方体,边长为10mm, 指定距离 设置为 2mm
图2:模型1. 正方体,将 指定距离 设置为 20mm, 按密度生成
图3:模型2. nist_ctc_05,模型来自 NIST, 按密度生成
图4:模型2. nist_ctc_05, Use Triangulation 按三角形网格顶点生成
图5:模型3. Schenkel,模型来自 FreeCAD, 按密度生成

3.  功能详解

通过以上图示,可进一步理解其具体功能是在模型周围指定距离内以某种随机算法生成点集,输入参数包括:模型、指定距离、指定密度值、是否按三角形网格顶点生成以及计算精度。

按密度生成 时,需指定密度值;此时生成的点集接近均匀,但生成原理还有待进一步探究;如上图1所示。

按三角形网格顶点生成 时,将使用模型的显示网格顶点生成点集,如上图4所示。此时不同的指定距离所得的点集完全相同,据此可以推测点集由网格顶点直接生成。不同指定距离的生成效果如下:

按三角形网格顶点生成时,不同的指定距离和点密度

 因此可以推测,对已显示模型(已具有三角网格模型)生成点集时,效率将非常快。

4. 代码

该工具 BRepLib_PointCloudShape 是一个抽象类,但只需要实现一个接收生成点结果的接口即可:

  //! Method to add point, normal to surface in this point and face for which point computed.
  //! @param[in] thePoint 3D point on the surface
  //! @param[in] theNorm  surface normal at this point
  //! @param[in] theUV    surface UV parameters
  //! @param[in] theFace  surface (face) definition
  Standard_EXPORT virtual void addPoint (const gp_Pnt& thePoint,
                                         const gp_Vec& theNorm,
                                         const gp_Pnt2d& theUV,
                                         const TopoDS_Shape& theFace) = 0;

从Open Cascade Beta 版的源代码中找到两处应用,分别是 PointCloudPntFiller 和 PointCloudPlyWriter,前者用在点云显示、后者用在 ply 点云读写。参考其中一处实现如下:

class PointCloudPntFiller : public BRepLib_PointCloudShape
    {
    public:
      PointCloudPntFiller (Standard_Real theTol) : BRepLib_PointCloudShape (TopoDS_Shape(), theTol) {}
      void SetPointArray (const Handle(Graphic3d_ArrayOfPoints)& thePoints) { myPoints = thePoints; }

    protected:
      virtual void addPoint (const gp_Pnt& thePoint,
                             const gp_Vec& theNorm,
                             const gp_Pnt2d& theUV,
                             const TopoDS_Shape& ) Standard_OVERRIDE
      {
        const Standard_Integer aPntIndex = myPoints->AddVertex (thePoint, theUV);
        if (theNorm.SquareMagnitude() > gp::Resolution())
        {
          myPoints->SetVertexNormal (aPntIndex, theNorm);
        }
        if (myPoints->HasVertexColors())
        {
          Quantity_Color aColor (360.0 * Standard_Real(aPntIndex) / Standard_Real(myPoints->VertexNumberAllocated()),
                                 1.0, 0.5, Quantity_TOC_HLS);
          myPoints->SetVertexColor (aPntIndex, aColor);
        }
      }

    private:
      Handle(Graphic3d_ArrayOfPoints) myPoints;
    };

PointCloudPntFiller 记录工具生成的点集,并用于后续显示之中。本文截图均基于 PointCloudPntFiller 实现。

最后,仍有几个疑问需要解决,随机生成点算法原理是什么、随机距离的原理是什么?当然最重要的是该工具的具体应用场景是什么?

对此感兴趣的同学可一起交流,本文源代码地址本文源代码

参考资料

1. 官方博客:OCCT 7.7.0 beta version is available - Forum Open Cascade Technology

2. 用户文档:BRepLib_PointCloudShape Class Reference - Open CASCADE Technology Documentation

3. Open Cascade 7.7.0 Beta 源代码:User account | OPEN CASCADE

 转载请注明原文链接:https://blog.csdn.net/Mechanicoder/article/details/127328298 

根据您提供的配置文件,这是一个用于姿态估计的pose_demo的配置示例。该配置文件包括了处理器配置(processor_cfg)和命令行参数配置(argparse_cfg)。 处理器配置包括以下内容: - type:指定处理器类型为"processor.pose_demo.inference",这可能是一个自定义的处理器类型。 - gpus:指定使用的GPU数量为1。 - worker_per_gpu:指定每个GPU的worker数量为1。 - video_file:指定输入视频的路径为"resource/data_example/skateboarding.mp4"。 - save_dir:指定结果保存的目录路径为"work_dir/pose_demo"。 检测配置(detection_cfg)包括以下内容: - model_cfg:指定检测模型的配置文件路径为"configs/mmdet/cascade_rcnn_r50_fpn_1x.py"。 - checkpoint_file:指定检测模型的checkpoint路径为"mmskeleton://mmdet/cascade_rcnn_r50_fpn_20e"。 - bbox_thre:指定检测目标的边界框阈值为0.8。 估计配置(estimation_cfg)包括以下内容: - model_cfg:指定姿态估计模型的配置文件路径为"configs/pose_estimation/hrnet/pose_hrnet_w32_256x192_test.yaml"。 - checkpoint_file:指定姿态估计模型的checkpoint路径为"mmskeleton://pose_estimation/pose_hrnet_w32_256x192"。 - data_cfg:指定姿态估计模型的数据配置,包括图像尺寸、像素标准化值、图像均值和标准差以及后处理选项。 命令行参数配置(argparse_cfg)包括了一些命令行参数的绑定,用于从命令行传递参数给处理器配置。 例如,您可以使用以下命令行参数来运行pose_demo: ``` python pose_demo.py --gpus 1 --video resource/data_example/skateboarding.mp4 --worker_per_gpu 1 --skeleton_model configs/pose_estimation/hrnet/pose_hrnet_w32_256x192_test.yaml --skeleton_checkpoint mmskeleton://pose_estimation/pose_hrnet_w32_256x192 --detection_model configs/mmdet/cascade_rcnn_r50_fpn_1x.py --detection_checkpoint mmskeleton://mmdet/cascade_rcnn_r50_fpn_20e ``` 请注意,以上仅为示例,具体的使用方式和命令行参数可能会有所不同,具体取决于实际情况。 如果您有进一步的问题,请提供更多细节,我将尽力帮助您。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值