目录
本博文按照下面的顺序介绍如何使用CloudCompare进行标注以及修改点云标签,还会介绍在使用CC进行标注时会遇到的几个坑,适合刚入门点云分割,想要给自己数据集进行标注的同志们。
1.CloudCompare下载
下载地址:直接在下面链接下载安装就行了,非常方便,简单快捷。CloudCompare - Open Source projecthttps://www.cloudcompare.org/
2.点云标注
我这里就随便以ShapeNet数据集中一个点云进行标注作为例子了。直接
2.1 载入点云
可以通过直接拖拽的方式或者File-Open打开点云图。
2.2 标注点云
第一,点击打开的点云(有点看不清楚,其实这是一架飞机),直到显示出黄色的框,然后在工具栏中选择“剪刀”形状的功能按钮,如下所示:
第二,点击“剪刀”按钮后,调整到合适的角度,使用鼠标左键开始描点,最后选择鼠标右键确认所选的区域,如下所示:
第三,点击右上角实心的“五边形”按钮,最后点击确认,可完成该区域的选择,如下所示。
第四,给第3点中选中的点云添加标签,注意要先选中刚分割出来的点云,再点击“+”按钮,添加标签,如下所示。
第五,第一个设置,SF name默认为Constant就好了,第二个Value设置为对应的标签序号就行了,比如这里的标签1表示机翼,标签0则表示机头,标注方法都是一样的。
这里再演示标注第二个机翼,因为会存在一个坑,如下所示:简单来说,就是每次进行标注的时候,要注意选对点云就好,不然会提示[ccGenericPointCloud::getTheVisiblePoints] No point in selection.错误,经历过的人自然知道我在说什么,刚开始标注的时候被这个错误搞了好久。
第六,把刚刚标注好的点云进行合并,如下所示
这里介绍一下第二个坑,合并的时候要注意选择No。
2.3 保存点云
保存点云很简单,按照如下步骤走就行,可以保存的类型很多,比如txt,pcd,bin等点云格式,我这里演示保存为txt格式的点云,一直默认就行。
打开保存后的.txt格式点云 ,可以看到其结构为n行4列,每一列分别代表每一个点的x,y,z坐标以及标签类别,如下所示。
2.4 修改点云标签
其实CloudCompare这个软件对于修改标签的操作是不太友好的,在查阅了很多博客后都没有得到比较好的方法,既然该软件不太完美只能在修改后使用脚本对标签进行处理了,下面以增加一个类别为例,说明如何修改标签。
第一,在已经标注好的点云上增加一个类别,操作流程和正常给点云打标签一样(2.2的步骤)。
第二,分割好并且打上标签后,同样的,要将点云进行合并,如下所示。
第三,将合并后保存的.txt文件打开,发现原本只有4列的标签,现在变成了5列,并且第5列还有nan值,这是什么情况呢?其实很简单,多出来的第5列,就是刚才修改过的点,3表示该点修改后变成3(该点原本的标签是0),而nan值是没有修改的点的标签,既然如此,我就用后一列的标签去覆盖前一列的标签,从而实现更新坐标。
第四,代码如下,只对单个点云文件进行处理,也可以写成对文件夹的处理。
import numpy as np
#用软件修改后保存的.txt文件,有5列值
before_file=r"./before.txt"
#用代码修改后保存的.txt路径,有4列值
after_file=r"./after.txt"
points=np.loadtxt(before_file)
for i in range(1,points.shape[1]-3):
# 找到最后一列不为NaN的值的索引
valid_indices = ~np.isnan(points[:, -i])
# 将最后一列不为NaN的值赋值给倒数第二列对应位置的值
points[valid_indices, -(i+1)] = points[valid_indices, -i]
np.savetxt(after_file, points[:,:4],fmt='%.8f')
修改后,可以对比一下本节3中的点,已经实现了更新,如下所示。
在CloudCompare中可视化可以看到机头的部分已经显示出不同的颜色了,如下所示。
3.其他
最后想谈一谈这个软件在标注时候遇到的其他问题,比如,在对有标签的点云文件进行可视化的时候,不是根据标签的值来决定点的颜色的,比如当点云只有2,4标签时,2是红色,4是绿色,而当点云只有1,2标签时,1是红色,2是绿色,CC是按照已有标签的大小来给点赋颜色的,这一点感觉挺不方便的。
还有一点就是不能导入有中文路径的点云,这一点没什么好说的,大家注意一下就行。
如果各位大佬在使用该软件时还有什么值得推荐的操作或者对博文有什么指正的地方,欢迎在底下评论,向大家学习。