CloudProcess 点云处理

CloudProcess 算子用于点云处理,包含:

type 功能
点云中心坐标 功能用于输出点云的 pose 中心。
计算法向量 求出点云相应的法向量。
合并点云 将多个点云合并为一个点云输出。
去除NaN值 用于去除 NAN(不是数)值。(点云图中的 NAN 值代表无效或未定义的点,需要注意检测和处理以避免影响点云的处理和分析结果。)
半径异常值删除 半径滤波。对点云中的每一个点确定一个半径的邻域,若邻域范围内点数 < min_neighbors ,则认为该点为噪声点,并剔除。
统计异常值去除 从点云数据集中移除离群点,即测量噪声点。通过计算点到临近点的平均距离分布,设置阈值,对不符合标准的点进行去除。
法向量过滤 计算点云中每个点的 NormalXYZ 与参考 NormalXYZ 的夹角,与最大最小阈值进行比较,选取符合条件的点云输出。
解析点云 用于输出点云或者点云列表的物品类型。
点云点数 用于输出点云的所有点数。
计算空间高度 用于计算点云中空间高度。

点云中心坐标

将 CloudProcess 点云处理 类型设置为 点云中心坐标 ,用于输出点云的 pose 中心。

注意:输出的姿态自动选择为基坐标系而不是沿着目标的长宽方向。

算子参数

  • 坐标:设置点云中心 pose 在 3D 视图中的可视化属性。

    • icon_visOn 打开点云中心 pose 可视化。

    • icon_visOff 关闭点云中心 pose 可视化。

    • icon_size 设置点云中心 pose 的尺寸大小。取值范围:[0.001,10] 。默认值:0.1。

  • 坐标列表:设置 pose 列表在 3D 视图中的可视化属性。值描述与 pose 一致。

数据信号输入输出

输入:

说明:根据需求选择其中一种数据信号输入即可。

  • 点云

    • 数据类型:PointCloud

    • 输入内容:点云数据

  • 点云列表

    • 数据类型:PointCloudList

    • 输入内容:点云列表数据

输出:

  • 坐标

    • 数据类型:Pose

    • 输出内容:点云中心 pose 数据

  • 坐标列表

    • 数据类型:PoseList

    • 输出内容:点云中心 pose 数据列表

功能演示

使用 CloudProcess 算子中点云中心坐标 输出加载点云的 pose 中心。

步骤1:算子准备

添加 Trigger 、Load 、CloudProcess 算子至算子图。

步骤2:设置算子参数

  1. 设置 Load 算子参数:

    • 类型 → 点云

    • 文件 → icon_more → 选择点云文件名( example_data/pointcloud/line.pcd )

    • 点云→ icon_visOn 可视

  2. 设置 CloudProcess 算子参数:

    • 类型→ 点云中心坐标

    • 坐标 → icon_visOn 可视

步骤3:连接算子

image-20240913161113335

步骤4:运行

点击 RVS 运行按钮,触发 Trigger 算子。

运行结果

如下图所示,在 3D 视图中显示加载的点云及其中心 pose 。

3D_CloudFilter_CloudCentroid_result

计算法向量

将 CloudProcess 点云处理 类型 设置为 计算法向量 ,用于求出点云相应的法向量。

  • 搜索半径/search_radius:该属性表示点云中的点的半径,半径范围内,搜索到多个相邻点拟合出的平面的法向量即当前点的法向量。

  • 反转法线/flip_normals :法向量反转。

    • True:反转点云法向量的朝向。

    • False :点云法向量的朝向正常。

  • 点云/cloud:设置点云相应的法向量在 3D 视图中的可视化属性。

    • icon_visOn 打开点云相应的法向量可视化。

    • icon_visOff 关闭点云相应的法向量可视化。

    • icon_color 设置3D视图中点云的颜色。取值范围:[-2,360] 。默认值:-1 。

    • icon_size 设置点云中点的尺寸。取值范围:[1,50] 。默认值:1 。

数据信号输入输出

输入:

  • 点云

    • 数据类型:PointCloud

    • 输入内容:点云数据

输出:

  • 点云

    • 数据类型:PointCloud

    • 输出内容:点云数据及其法向量

功能演示

步骤1:算子准备

添加 Trigger 、Load 、CloudProcess 算子至算子图。

步骤2:设置算子参数

  1. 设置 Load 算子参数:

    • 类型 → 点云

    • 文件 → icon_more → 选择点云文件名( example_data/pointcloud/model.pcd )

  2. 设置 CloudProcess 算子参数:

    • 类型 → 计算法向量

步骤3:连接算子

image-20240913161916837

步骤4:运行

  1. 点击 RVS 运行按钮,触发 Trigger 算子。

  2. 双击3D视图中的点云,显示 POINTCLOUD 面板,勾选“显示法向量”。

    3D_CloudFilter_EstimateNormal_dashboard

运行结果

如下图所示,在 3D 视图中显示加载的点云及其法向量。

3D_CloudProcee_EstimateNormal_result

合并点云

将 CloudProcess 点云处理 类型 设置为 合并点云 ,用于将多个点云合并为一个点云输出。

算子参数

  • 输入数量/number_input:决定该算子的输入端口 cloud 的数量。取值范围:[0,10]。默认值:1。

  • 列表输入数量/number_input_list:决定该算子的输入端口 cloud_list 的数量。取值范围:[0,10]。默认值:0 。

  • 点云/cloud:设置合并后点云在 3D 视图中的可视化属性。

    • icon_visOn 打开合并后点云可视化。

    • icon_visOff 关闭合并后点云可视化。

    • icon_color 设置 3D 视图中点云的颜色。取值范围:[-2,360] 。默认值:-1 。

    • icon_size 设置点云中点的尺寸。取值范围:[1,50] 。默认值:1 。

数据信号输入输出

输入:

说明:根据需求选择其中一种数据信号输入即可。

  • 点云_0/1

    • 数据类型:PointCloud

    • 输入内容:点云数据

输出:

  • 点云

    • 数据类型:PointCloud

    • 输出内容:合并后点云数据

功能演示

使用 CloudProcess 算子中 MergeCloud 将加载的两个点云合并成一个点云输出。

步骤1:算子准备

添加 Trigger、Load(2个)、 CloudProcess 算子至算子图。

步骤2:设置算子参数

  1. 设置 Load 算子参数:

    • 类型 → 点云

    • 文件 → icon_more → 选择点云文件名( example_data/pointcloud/wolf1.pcd )

  2. 设置 Load_1 算子参数:

    • 类型 → 点云

    • 文件 → icon_more → 选择点云文件名( example_data/pointcloud/wolf2.pcd )

  3. 设置 CloudProcess 算子参数:

    • 类型 → 合并点云

    • 文件 → icon_visOn 可视

步骤3:连接算子

image-20240913162708295

步骤4:运行

点击 RVS 运行按钮,触发 Trigger 算子。

运行结果

如下图所示,3D 视图中显示合并后的点云。

3D_CloudProcee_MergeCloud_result

去除NaN值

将 CloudProcess 点云处理 类型 设置为 去除NaN值,用于去除 NAN 值。

算子参数

  • 点云/cloud:设置去除NAN值后点云在 3D 视图的可视化属性。

    • icon_visOn 打开去除 NAN 值后点云可视化

    • icon_visOff 关闭去除 NAN 值后点云可视化

    • icon_color 设置 3D 视图中点云的颜色。取值范围:[-2,360] 。默认值:-1 。

    • icon_size 设置点云中点的尺寸。取值范围:[1,50] 。默认值:1 。

  • 点云列表/cloud_list:设置去除 NAN 值后点云列表的可视化属性。值描述与 点云 一致。

数据信号输入输出

输入:

说明:根据需求选择其中一种数据信号输入即可。

  • 点云

    • 数据类型:PointCloud

    • 输入内容:点云数据

  • 点云列表

    • 数据类型:PointCloudList

    • 输入内容:点云列表数据

输出:

  • 点云

    • 数据类型:PointCloud

    • 输出内容:去除NAN值后点云数据

  • 点云列表

    • 数据类型:PointCloudList

    • 输出内容:去除 NAN 值后点云列表数据

功能演示

步骤1:算子准备

添加 Trigger 、Load、CloudProcess 、Save 算子至算子图。

步骤2:设置算子参数

  1. 设置 Load 算子参数:

    • 类型 → 点云

    • 文件 → icon_more → 选择点云文件名( example_data/pointcloud/pointcloud_ascii.pcd ) ,此点云为 ascii 形式。

  2. 设置 CloudProcess 算子参数:类型 → 去除NaN值

  3. 设置 Save 算子参数:

    • 类型 → 点云

    • format → ascii

    • 文件 → NAN_pointcloud_ascii.pcd

步骤3:连接算子

image-20240913164550449

步骤4:运行

点击 RVS 运行按钮,触发 Trigger 算子。保存点云 NAN_pointcloud_ascii.pcd

运行结果

使用 vscode 编辑器打开两个点云文件进行对比,会发现 NAN_pointcloud_ascii.pcd 点云文件中去除了 NAN 值,并且将有序点云变成了无序点云。

3D_CloudProcess_NANRemoval_result

半径异常值删除

将 CloudProcess 点云处理 类型 设置为 半径异常值删除 ,用于半径滤波。对点云中的每一个点确定一个半径的邻域,若邻域范围内点数 < min_neighbors ,则认为该点为噪声点,并剔除。

算子参数

  • 搜索半径/search_radius:以点云中的点为圆心设置半径。默认值:0.1 。单位:m。

    注意:该属性值设置与点云的密度和单位有关。如果运行过程中出现算子卡死的情况,建议从小到大逐步调整该参数,并不断测试效果。

  • 最小邻居数/min_neighbors:点半径范围内最少的邻近点。当小于该值时,剔除该点。

  • 点云/cloud:设置半径滤波后点云在3D视图中的可视化属性。

    • icon_visOn 打开半径滤波后点云可视化。

    • icon_visOff 关闭半径滤波后点云可视化。

    • icon_color 设置 3D 视图中点云的颜色。取值范围:[-2,360] 。默认值:-1 。

    • icon_size 设置点云中点的尺寸。取值范围:[1,50] 。默认值:1 。

数据信号输入输出

输入:

  • 点云

  • 数据类型:PointCloud

  • 输入内容:点云数据

输出:

  • 点云

    • 数据类型:PointCloud

    • 输出内容:半径滤波后点云数据

功能演示

步骤1:算子准备

添加 Trigger 、Load 、DownSampling 、CloudProcess 算子至算子图。

步骤2:设置算子参数

  1. 设置 Load 算子参数:

    • 类型 → 点云

    • 文件 → icon_more → 选择点云文件名( example_data/pointcloud/ClusterExtraction_cloud.pcd )

  2. 设置 DownSampling 算子参数:

    • 类型 → 网格降采样

    • x 方向采样 → 0.02

    • y 方向采样 → 0.02

    • z 方向采样 → 0.02

    • 点云 → icon_visOn 可视

  3. 设置 CloudProcess算 子参数:

    • 类型 → 半径异常值删除

    • 搜索半径 → 0.05

    • 最小邻居数 → 40

    • 点云 → icon_visOn 可视

步骤3:连接算子

image-20240913165059330

步骤4:运行

点击 RVS 运行按钮,触发 Trigger 算子。

运行结果

如下图所示,3D 视图中,左图为 DownSampling 算子结果,右图为半径滤波后的结果。

3D_CloudProcess_RadiusOutlierRemoval_result

统计异常值去除

将 CloudProcess 点云处理类型 设置为统计异常值去除,用于从点云数据集中移除离群点,即测量噪声点。通过计算点到临近点的平均距离分布,设置阈值,对不符合标准的点进行去除。

算子参数

  • 最近邻近点数:用于计算每个点的平均距离的最近邻点的数量。如果最近邻近点数设置为 10,则每个点的平均距离将基于其最近的 10 个邻近点计算。

  • 标准偏差乘数:用于确定离群点的阈值。如果标准偏差乘数设置为 1.0,则离群点的阈值为平均距离加上 1 倍的标准偏差。

  • 点云:设置统计异常值去除点云在3D视图中的可视化属性。

    • icon_visOn 打开点云可视化。

    • icon_visOff 关闭点云可视化。

    • icon_color 设置 3D 视图中点云的颜色。取值范围:[-2,360] 。默认值:-1 。

    • icon_size 设置点云中点的尺寸。取值范围:[1,50] 。默认值:1 。

数据信号输入输出

输入:

  • 点云

  • 数据类型:PointCloud

  • 输入内容:点云数据

输出:

  • 点云

    • 数据类型:PointCloud

    • 输出内容:统计异常值去除后点云数据

功能演示

使用 CloudProcess 中统计异常值去除,去除加载点云中噪声点。

步骤1:算子准备

添加 Trigger 、Load 、CloudProcess 算子至算子图。

步骤2:设置算子参数

  1. 设置 Load 算子参数:

    • 类型 → 点云

    • 文件 → icon_more → 选择点云文件名( example_data/pointcloud/StatisticalOutlierRemoval_test.pcd )

    • 点云 → icon_visOn 可视 → icon_color-2

  2. 设置 CloudProcess 算子参数:

    • 类型 → 统计异常值去除

    • 最近邻近点数 → 5

    • 标准偏差乘数 → 1

    • 点云 → icon_visOn 可视→ icon_color-2

步骤3:连接算子

image-20240717172937626

步骤4:运行

点击 RVS 运行按钮,触发 Trigger 算子。

运行结果

如下图所示,3D 视图中,左图为 Load 算子结果,右图为统计异常值去除后的结果。

20240717173653

法向量过滤

将 CloudProcess 点云处理 类型 设置为法向量过滤 ,计算点云中每个点的 NormalXYZ 与参考 NormalXYZ 的夹角,与最大最小阈值进行比较,选取符合条件的点云输出。

算子参数

  • 参考法向量X:参考法向量的 X 分量。如果参考法向量 X 设置为 1.0,则参考法向量在 X 方向上的分量为 1.0。

  • 参考法向量Y:参考法向量的 Y 分量。

  • 参考法向量Z:参考法向量的 Z 分量。

  • 最小角度:点云法向量与参考法向量之间的最小夹角,单位为度。如果最小角度设置为 10.0,则过滤掉与参考法向量夹角小于 10 度的点。

  • 最大角度:点云法向量与参考法向量之间的最大夹角,单位为度。

  • 点云:设置法向量过滤点云在3D视图中的可视化属性。

    • icon_visOn 打开点云可视化。

    • icon_visOff 关闭点云可视化。

    • icon_color 设置 3D 视图中点云的颜色。取值范围:[-2,360] 。默认值:-1 。

    • icon_size 设置点云中点的尺寸。取值范围:[1,50] 。默认值:1 。

数据信号输入输出

输入:

  • 点云

  • 数据类型:PointCloud

  • 输入内容:点云数据

输出:

  • 点云

    • 数据类型:PointCloud

    • 输出内容:法向量过滤后点云数据

  • 参考法向量

    • 数据类型:Pose

    • 输出内容:参考法向量

功能演示

使用 CloudProcess 中法向量过滤,选取符合条件的点云输出。

步骤1:算子准备

添加 Trigger 、Load 、CloudProcess(2个)算子至算子图。

步骤2:设置算子参数

  1. 设置 Load 算子参数:

    • 类型 → PointCloud

    • 文件 → icon_more → 选择点云文件名( example_data/pointcloud/StatisticalOutlierRemoval_test.pcd )

    • 点云 → icon_visOn 可视→ icon_color-2

  2. 设置 CloudProcess 算子参数:

    • 类型 → 计算法向量

    • 点云 → icon_visOn 可视

  3. 设置 CloudProcess_1 算子参数:

    • 类型 → 法向量过滤

    • 点云 → icon_visOn 可视→ icon_color-2

    • 参考法向量 → icon_visOn 可视

步骤3:连接算子

image-20240717171646033

步骤4:运行

点击 RVS 运行按钮,触发 Trigger 算子。

运行结果

如下图所示,3D 视图中,左图为 Load 算子结果,右图为法向量过滤后的结果。

image-20240717174109430

解析点云

将 CloudProcess 点云处理 类型 设置为 解析点云 ,用于输出点云或者点云列表的物品类型。 通常用于查看 ai 推理后的物品类型。

算子参数

  • 标签/label:设置点云标签的曝光属性。打开后可用与交互面板中输出工具文本框进行绑定。

    • icon_visOn 打开点云标签的曝光属性。

    • icon_visOff 关闭点云标签的曝光属性。

  • 标签列表/label_list:设置点云标签的曝光属性。打开后可用与交互面板中输出工具表格进行绑定。

    • icon_visOn 打开点云标签列表的曝光属性。

    • icon_visOff 关闭点云标签列表的曝光属性。

数据信号输入输出

输入:

  • 点云

    • 数据类型:PointCloud

    • 输入内容:点云数据

  • 点云列表

    • 数据类型:PointCloudList

    • 输入内容:点云列表数据

输出:

  • 标签

    • 数据类型:String

    • 输出内容:物品类型

  • 标签列表

    • 数据类型:StringList

    • 输出内容:物品类型列表

  • 索引

    • 数据类型:String

    • 输出内容:物品索引

  • 索引列表

    • 数据类型:StringList

    • 输出内容:物品索引列表

功能演示

步骤1:算子准备

添加 Trigger( 2 个)、Load( 2 个)、LoadCalibFile、AIDetectGPU、ProjectMask、CloudProcess 算子至算子图

步骤2:设置算子参数

  1. 设置 Trigger_1 算子参数:

    • 算子名称→初始化触发

    • 类型 → InitTrigger

  2. 设置 Load 算子参数:

    • 类型 → 图像

    • 文件 → icon_more→选择图像文件名 (example_data/mask_data_train/20221010113840917/rgb.png )

    • 图像 → icon_visOn可视

  3. 设置 Load_1 算子参数:

    • 类型 → 点云

    • 文件 → icon_more→ 选择与图像匹配点云文件名 (example_data/mask_data_train/20221010113840917/cloud.pcd )

    • 点云 → icon_visOn可视

  4. 设置 LoadCalibFile 算子参数:

    • 相机标定文件 → 图漾相机出厂标定文件 ( example_data/mask_data_train/mask_ty_color_calib.txt )

  5. 设置 AIDetect 算子参数:

    说明:该端口连接/不连接,输出所有类别的旋转矩阵。连接时,可填写 select_class 来输出指定类别的旋转矩形。

    • 类名文件路径 →icon_more → 选择相应文件名(example_data/mask_data_train/fruits.txt )

    • 权重文件路径 →icon_more → 选择相应权重文件名 (example_data/mask_data_train/train_output/model_final.pth )

    • 配置文件路径 →icon_more → 选择相应权重文件名 (example_data/mask_data_train/train_output/config.yaml )

    • 物体得分阈值 →icon_more → 0.75

    • 识别结果图像 → icon_visOn 可视

  6. 设置 ProjectMask 算子参数:

    • 类型→ MaskList

    • 点云列表 → icon_visOn可视

  7. 设置 CloudProcess 算子参数:

    • 类型 → 解析点云

步骤3:连接算子

image-20240913165728001

步骤4:运行

点击 RVS 运行按钮,触发 Trigger 算子。

运行结果

如下图所示,鼠标放置 CloudProcess 算子 label_list 端口静置 1s ,显示推理所得的掩码图列表转换为 3D 点云列表的物品类型。

image-20240913170248928

点云点数

将 CloudProcess 点云处理 类型 设置为 点云点数 ,用于输出点云的所有点数。

数据信号输入输出

输入:

  • 点云

    • 数据类型:PointCloud

    • 输入内容:点云数据

输出:

  • 点云点数

    • 数据类型:Matrix

    • 输出内容:点云包含的点数

功能演示

步骤1:算子准备

添加 Trigger、Load、CloudProcess 算子至算子图

步骤2:设置算子参数

  1. 设置 Load 算子参数:

    • 类型→点云

    • 文件 → 点云文件,pcd 格式。

  2. 设置 CloudProcess 算子参数:类型 → 点云点数

步骤3:连接算子

image-20240717170334700

步骤4:运行

点击 RVS 运行按钮,触发 Trigger 算子。

运行结果

如下图所示,鼠标放置 CloudProcess 算子点云点数端口静置 1s ,输出加载点云的点数。

image-20240717170548953

计算空间高度

将 CloudProcess 点云处理 类型 设置为 计算空间高度 ,用于计算点云数据中的高度信息。

算子参数

  • 模式:根据指定模式输出 Z 值。

    • 最大值:计算点云数据中的最大高度值。

    • 最小值:计算点云数据中的最小高度值。

    • 均值:计算点云数据中的平均高度值。

  • 最小点数:指定计算高度时所需的最小点数。如果点云数据中的点数少于此值,则不进行计算。

  • 头部切除比例:指定在计算高度时,按 Z 轴值高度从低到高排序后,切除的Z轴最高部分点的比例。取值范围:[0~1]。例如,设置为 0.1 表示切除最高的 10% 的点。

  • 尾部切除比例:指定在计算高度时,按 Z 轴值从低到高排序后,切除的 Z 轴最低部分点的比例。取值范围:[0~1]。例如,设置为 0.1 表示切除最低的 10% 的点。

数据信号输入输出

输入:

  • 点云

    • 数据类型:PointCloud

    • 输入内容:点云数据

  • 点云列表

    • 数据类型:PointCloudList

    • 输入内容:点云列表数据

输出:

  • max_value

    • 数据类型:Matrix

    • 输出内容:高度值

功能演示

使用

步骤1:算子准备

添加 Trigger、Load、CloudProcess 算子至算子图。

步骤2:设置算子参数

  1. 设置 Load 算子参数:

    • 类型→点云

    • 文件 → 点云文件,pcd 格式(example_data/pointcloud/plane.pcd

  2. 设置 CloudProcess 算子参数:

    • 类型 → 计算空间高度

    • 模式 → 最大值

    • 头部切除比例 → 0.5

    • 尾部切除比例 → 0.1

步骤3:连接算子

image-20240910111500059

步骤4:运行

点击 RVS 运行按钮,触发 Trigger 算子。

运行结果

如下图所示,鼠标放置 CloudProcess 算子max_value端口静置 1s ,输出加载点云的高度信息。

image-20240910111713000