共计 1376 个字符,预计需要花费 4 分钟才能阅读完成。
为什么需要点云标注?
在三维重建、自动驾驶、机器人导航等领域,点云 (Point Cloud) 数据是重要的信息来源。通过标注点云中的物体(如车辆、行人、建筑物),我们可以为机器学习模型提供训练数据。举个实际例子:自动驾驶汽车需要准确识别周围环境,这就依赖于大量标注好的激光雷达点云数据。

工具对比:CloudCompare vs 其他方案
- CloudCompare:
- 优点:开源免费、支持多种点云格式、标注工具丰富
-
缺点:界面稍显复杂、缺少团队协作功能
-
LabelCloud:
- 优点:专为标注设计、操作简单
-
缺点:功能相对单一
-
Supervisely:
- 优点:云端协作、项目管理完善
- 缺点:收费、需要网络连接
对于个人学习和小型项目,CloudCompare 是最佳选择。
完整标注流程指南
1. 数据导入与预处理
- 打开 CloudCompare,点击 ”File” > “Open” 导入点云文件(支持.pcd/.las/.ply 等格式)
- 使用 ”Edit” > “Subsample” 对密集点云降采样,提升运行速度
- 通过 ”Tools” > “Segmentation” > “RANSAC” 去除地面点
2. 开始标注
- 边界框标注:
- 点击 ”Tools” > “Labeling” > “Create Bounding Box”
- 在点云上拖动创建 3D 框
-
右键调整框体大小和位置
-
多边形标注:
- 选择 ”Tools” > “Labeling” > “Polyline”
- 在多个视角下连续点击创建闭合区域
3. 导出标注结果
标注完成后,可以导出为:
– CSV 格式:包含物体类别和坐标信息
– JSON 格式:保留完整的标注元数据
Python 批量处理示例
import json
from pathlib import Path
def process_annotations(annotation_dir: Path):
"""批量处理标注文件"""
try:
for json_file in annotation_dir.glob('*.json'):
with open(json_file, 'r') as f:
data = json.load(f)
# 示例:提取所有车辆标注
vehicles = [obj for obj in data['objects']
if obj['class'] == 'vehicle']
print(f"{json_file.stem}: 找到 {len(vehicles)} 辆汽车")
except Exception as e:
print(f"处理 {json_file} 时出错: {str(e)}")
if __name__ == "__main__":
process_annotations(Path("./annotations"))
生产环境实践经验
点云密度的影响
- 高密度点云(>100 点 /㎡):标注精度高,但需要更强硬件
- 低密度点云(<10 点 /㎡):考虑使用插值算法补充数据
多人协作方案
- 使用 Git 管理标注文件
- 为每个标注员创建独立分支
- 定期合并并解决冲突
质量评估指标
- 交并比(IoU) > 0.7
- 漏标率 < 5%
- 错标率 < 2%
动手实践任务
推荐使用 SemanticKITTI 数据集:
1. 下载 000000.bin 点云文件
2. 在 CloudCompare 中标注至少 5 辆汽车
3. 导出为 JSON 格式
4. 用 Python 脚本统计标注结果
通过这个完整流程,你应该已经掌握了点云标注的基本技能。在实际项目中,记得根据具体需求调整标注策略,并定期检查标注质量。
正文完
发表至: 未分类
近三天内
