【点云标注与分割】CloudCompare基础入门教程与快捷操作(gif动图演示)

文章目录

    • 1 数据准备与概览
    • 2 CloudCompare使用步骤
      • 2.1 导入点云
      • 2.2 分割点云
      • 2.3 标注点云
      • 2.4 融合点云
      • 2.5 导出点云
    • 3 结语
    • 4 相关文章

在正式介绍 CloudCompare点云分割标注前,我先介绍一下体例中使用的数据载体和标注情景,接下来从 导入、分割、标注、融合、导出 5个部分并结合我的使用经验、快捷键、和踩过的坑来介绍标注方法。

1 数据准备与概览

点云是由一系列点组成的集合,每个点拥有类似于 [ x , y , z , n x , n y , n z , r , g , b , l a b e l ] [{\color{#2EA9DF}{x,y,z}},nx,ny,nz,r,g,b,{\color{#E16B8C}{label}}] [x,y,z,nx,ny,nz,r,g,b,label]的形式,其中 x , y , z {\color{#2EA9DF}{x,y,z}} x,y,z通常是必要的坐标位置信息,而在做分割(seg)任务时,常需要 l a b e l {\color{#E16B8C}{label}} label作为该点所属部位的标签,用于监督训练神经网络。

结合具体场景来说,假设现在有停车场的原始点云数据,涉及的主要物体有person、car、pillar,我们的目的是从原始的点云数据把属于person这一部分的点给分割开来,即需要的 l a b e l {\color{#E16B8C}{label}} labelperson(0)、others(nan) 两类。

简便起见,以原始尺寸为 ( N , 3 ) (N,3) (N,3)的点云为例, N N N为该电云中点的数量, 3 3 3代表每个点具有 [ x , y , z ] [{\color{#2EA9DF}{x,y,z}}] [x,y,z]的形式。点云数据下图所示:图1
可视化后,如下图所示,所有物体的颜色( l a b e l {\color{#E16B8C}{label}} label)都一样,其中红框中的是person
在这里插入图片描述
接下来需要使用CloudCompare软件给点云中的每个点增加一个 l a b e l {\color{#E16B8C}{label}} label,使得其变为 [ x , y , z , l a b e l ] [{\color{#2EA9DF}{x,y,z}},{\color{#E16B8C}{label}}] [x,y,z,label] ( N , 4 ) (N,4) (N,4)点云数据。如下图所示:
在这里插入图片描述
可视化如下图,其中蓝色的是person
在这里插入图片描述

2 CloudCompare使用步骤

博主使用的是CloudCompare_v2.13.2,点击即可下载(可能需要梯子)。

不知道你是否注意到了前文中,我给others标注的是nan而不是1,这是因为CloudCompare中默认的标注信息是nan,在上述只需要分割person的情况下,我们只需要标记person就可以了,剩下的nan如果需要的话可以使用Python程序替换为1,这样在面对批量的点云标注时可以提高效率。相关程序如下:

label = 1 #特定的标签号
pcd[np.isnan(pcd)]= label#pcd为点云

总的来说,使用CloudCompare标记点云可以分为以下5步:

  • 导入点云
  • 分割点云
  • 标注点云
  • 融合点云
  • 导出点云

在每步操作的时候要小心些,因为CloudCompare对撤销的支持不太好。

2.1 导入点云

导入点云前建议先在软件中新建一个文件夹,用于集中存放处理好的点云,也便于集中导出,并保存项目,做好记录,而不要直接导入零散的点云文件,这对批量处理点云十分重要。
在这里插入图片描述
接下来就可以批量导入点云文件了,按住Shift多选,中间会出现一个筛选界面,选择你需要的维度,点击Apply all即可。这里以导入前5帧的点云ply文件为例。
在这里插入图片描述
这里每个点云文件都会以一个文件夹的形式导入,对每个点云的处理在各自的文件夹进行,处理完后再将文件夹中的点云一起移入一开始创建的pcd文件夹。

2.2 分割点云

首先,将暂不处理的点云文件夹按Shift选中,并切换(Toggle)为冻结模式(快捷键:A),选中文件夹切换模式后其中的点云不会切换模式,便于后续处理:

常用快捷键01:A 切换选中文件的状态:激活/冻结

在这里插入图片描述
接着,选中0号点云(要选中才能操作,选中和显示是两回事),并调整视角,建议可以先观察点云(鼠标左键、中键、右键都试试),了解待分割目标的特征,然后切换到俯视图模式下进行分割,之后视角非必要就不要动了。
在这里插入图片描述

  • 接在进入裁剪模式T,左键画多边形选中区域,右键结束选取,选中的是此时的视角对多边形投影后包裹的点云。
  • 接着分割出选中区域I,并按Enter确定。
  • 在下面的动图中,注意观察左上角的点云文件变化,其中*.segment就是我们分割的部分,以*.remaining为剩余的部分。

常用快捷键02:T - 左键右键 - I - Enter 快速分割出选中区域

在这里插入图片描述
如果需要分割多个不相邻的目标,要继续选中*.remaining点云,重复上述操作。

2.3 标注点云

接着就要给*.segment文件贴 l a b e l {\color{#E16B8C}{label}} label了(如果有多个,则每个对象都要操作一遍,可惜该软件好像不支持批量操作)。选中对应文件,点击顶部的号,首先让你输入 SF(scaler field) 的名字,然后输入Value值。

①首先,输入名字都默认为Constant,无论你标注的对象实际是什么。否则最后导出的点云文件不会是3+1列,而可能是3+n列,n为你添加的SF名称的种类数。相当于每一个SF名称都是一个总的分割域,而通常的标注是在同一分割域下进行的。
②接着,输入Value,这里就是实际的分割号了,自己拟定即可。如果只是做种类不多的简单分割的话,建议默认值0,因为这样按两下Enter即可快速标注,之后有需要再用程序批量更改标号。

常用快捷键03:Enter - Enter 实现快速标注

在这里插入图片描述

2.4 融合点云

Shift选中需要融合的文件(大家可以尝试下与Ctrl多选的区别),注意选择顺序,第一个选中的文件名即为融合后的文件名,之后点击顶部的融合按钮,并在接下来的弹框中选择(可以使用 → \bold{\rightarrow} - Enter快捷键,熟练了后比鼠标快),不然就会像多个SF名称一样在最后的导出文件中多出几列。

常用快捷键04: → \bold{\rightarrow} - Enter 快速融合

在这里插入图片描述
注意此时,融合后的点云处于选中状态,直接按A就可以取消激活了,然后再选择下一个待处理的点云文件夹,按A激活,进入下一轮循环即可。

2.5 导出点云

  • 在处理完上述点云文件后,将各文件夹中的点云按Ctrl选中后拖入一开始创建的pcd文件夹,并右键该文件夹选择排序选项。
  • 然后可以再集中用Shift选中与A激活的方式,分批次的检查融合后的点云文件。
  • 检查无误后再右键pcd文件夹一起导出。注意导出的文件名字结尾的标号仅与pcd文件夹中点云文件的数量相关,而与其在项目中的名称无关,留意不要覆盖之前的文件了。
    另外,可以结合Advanced Renamer_v3.95软件实现文件的批量重命名,点击即可下载。
  • 在导出弹出的窗口中,可以设置坐标和标签的精度等信息。
图像描述

导出结果如下:
在这里插入图片描述

3 结语

使用CloudCompare标注分割点云数据主要有导入点云、分割点云、标注点云、融合点云、导出点云 这5步,涉及的快捷键如下:

常用快捷键01:A 切换选中文件的状态:激活/冻结
常用快捷键02:T - 左键右键 - I - Enter 快速分割出选中区域
常用快捷键03:Enter - Enter 实现快速标注
常用快捷键04: → \bold{\rightarrow} - Enter 快速融合

在使用过程中注意保存和名称覆盖的问题。

4 相关文章

这个点云教程是基于AVP项目撰写的,如有对深度图转融合点云、PointNet++语义分割、Dbscan实例化有兴趣的可以看以下传送门:

### 如何在 CloudCompare 中对点云数据进行打标签 #### 加载点云数据 为了开始标注过程,需先加载待处理的点云文件到CloudCompare环境中。这可以通过菜单中的`File -> Open`选项完成,支持多种常见格式如`.las`, `.ply`, 或者`.xyz`等[^1]。 #### 创建新属性列 一旦点云被成功加载,在左侧的对象浏览器(Object Browser)中找到对应的点云实体并右键单击选择`Add scalar field...`命令来创建一个新的标量字段用于存储标签信息。此时可以选择默认名称或自定义命名此字段为`Label`以便于识别[^2]。 #### 设置初始标签值 对于整个点云集合设定统一的初始标签值是一个常见的做法。通过执行`Edit -> Fill selected SF(scalar fields)`操作,并指定希望赋予所有点的起始标签编号(比如0表示未分类),可以快速实现这一点[^3]。 #### 使用过滤器和选择工具标记特定区域 针对不同类别对象实施精确标注时,可借助软件内建的选择工具(例如矩形/多边形选取框)圈定目标范围内的点群;之后再利用上述提到的方法更新这些选定部分的具体标签值。另外,也可以采用布尔逻辑组合多个条件表达式进一步细化筛选标准[^4]。 #### 应用高级编辑技巧提高效率 当面对复杂场景下的大规模点云时,掌握一些进阶技能有助于加快工作进度。例如,运用Python脚本接口自化重复性的任务;或是学习如何配置宏录制功能记录一系列连续作供日后重放使用[^5]。 ```python # Python 脚本示例:批量更改所选点云的标签值 import cloudcompare as cc app = cc.CloudCompare() selected_clouds = app.GetSelectedEntities() for cloud in selected_clouds: sf_label = cloud.getScalarFieldByName('Label') if not sf_label is None: with sf_label.editable() as editor: for i in range(len(editor)): editor[i] = new_value # 将new_value替换为你想要设置的新标签值 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值