一个用Python编写的交互式点云可视化工具,主要用于激光雷达数据(.bin文件)的直接可视化和分析。
- 🚀 自动格式检测: 支持多种点云数据格式的自动识别
- 🎯 实时3D可视化: 基于Open3D的高质量3D渲染,自动打开3D视角
- 🎬 序列播放: 支持点云序列的自动播放,像视频一样浏览点云数据
- 📊 2D多视角显示: 提供顶视图、侧视图和高度分布图
- 🎨 多种着色模式: 按高度、强度、距离等方式着色
- 📁 拖拽支持: 支持文件和文件夹的拖拽加载
- ⌨️ 快捷键控制: 丰富的键盘快捷键支持序列播放
- 🔧 模块化架构: 易于扩展新的数据集格式
目前支持的数据集格式: KITTI, KITTI处理格式, NCLT, Oxford, Boreas, Boreas处理格式
pip install -r requirements.txtpython pointcloud_viewer.py- 单个点云: 拖拽单个.bin文件到程序窗口或使用按钮加载
- 序列播放: 拖拽包含多个.bin文件的文件夹到程序窗口
- 3D查看: 程序会自动打开3D视角,支持鼠标交互
- 播放控制: 使用播放按钮或快捷键控制序列播放
- 调整设置: 修改点大小、颜色模式、播放速度等参数
pointcloud_viewer/
├── pointcloud_viewer.py # 主应用程序
├── requirements.txt # 项目依赖
├── loaders/ # 数据集加载器模块
│ ├── __init__.py # 模块初始化
│ ├── base_loader.py # 基础加载器类
│ ├── kitti_loader.py # KITTI数据集加载器
│ ├── kitti_processed_loader.py # KITTI处理格式加载器
│ ├── nclt_loader.py # NCLT数据集加载器
│ ├── oxford_loader.py # Oxford数据集加载器
│ ├── boreas_loader.py # Boreas数据集加载器(修正)
│ ├── generic_loader.py # 通用格式加载器
│ └── loader_manager.py # 加载器管理器
├── CHANGES.md # 更新日志
└── README.md # 项目说明
- KittiLoader: KITTI数据集专用加载器 (4 float32: XYZI)
- KittiProcessedLoader: KITTI处理格式加载器 (3 float64: XYZ)
- NcltLoader: NCLT数据集专用加载器
- OxfordLoader: Oxford RobotCar数据集专用加载器
- BoreasLoader: Boreas数据集专用加载器 (6 float32: XYZI + 附加信息)
- BoreasProcessedLoader: Boreas处理格式加载器 (支持多种格式)
- LoaderManager: 统一管理所有加载器
- 支持自动格式检测和手动格式指定
- 可扩展的架构,添加新格式只需实现新的加载器类
- BaseLoader: 所有加载器的抽象基类
- 定义统一的接口和通用功能
- 包含坐标验证和文件信息获取等工具方法
from loaders import LoaderManager
loader_manager = LoaderManager()
xyz, intensity, format_name = loader_manager.load_pointcloud(file_path)# 支持的格式类型
formats = loader_manager.get_available_formats()
# ['auto', 'kitti', 'kitti_processed', 'boreas_processed', 'nclt', 'oxford', 'boreas']
xyz, intensity, format_name = loader_manager.load_pointcloud(file_path, 'kitti')要添加新的点云格式支持:
- 继承
BaseLoader类 - 实现
can_load()和load()方法 - 在
LoaderManager中注册新的加载器
class NewFormatLoader(BaseLoader):
def can_load(self, file_path: str) -> bool:
# 实现格式检测逻辑
pass
def load(self, file_path: str) -> Tuple[np.ndarray, Optional[np.ndarray]]:
# 实现数据加载逻辑
pass- 鼠标控制: 使用界面播放控制按钮
- 键盘快捷键:
空格键: 播放/暂停←/→: 上一帧/下一帧Home/End: 跳转到首帧/末帧Escape: 停止播放并重置
- 高质量渲染: Open3D提供的专业级3D渲染
- 交互控制: 鼠标操作的直观3D导航 (左键旋转、滚轮缩放、Shift+左键平移)
- 视角优化: 预设的斜上方观察角度,更好地展示点云结构
- 自动打开: 加载点云后自动打开3D视角
- 多视角投影: 顶视图(X-Y)、侧视图(X-Z)、前视图(Y-Z)
- 统计分析: 高度分布直方图
- 颜色映射: 基于高度或强度的伪彩色显示
- 高度着色: 基于Z坐标的渐变色 (默认)
- 强度着色: 基于激光反射强度
- 距离着色: 基于到原点的距离
- 统一颜色: 单一颜色显示
- Python: 3.7+
- 操作系统: Windows / macOS / Linux
- 内存: 建议4GB以上(取决于点云大小)
- 显卡: 支持OpenGL的显卡(用于3D渲染)
- 自动驾驶: 激光雷达数据可视化和分析,序列播放查看车辆行驶轨迹
- 机器人导航: SLAM算法的点云数据验证,动态观察环境变化
- 研究教学: 点云处理算法的可视化教学,序列演示算法效果
- 数据标注: 3D场景理解和标注工作,时序数据分析
- 算法调试: 点云处理流程的中间结果查看,帧间变化分析
- 质量检查: 点云采集质量评估,异常帧快速定位
- 模块化: 每个数据集格式独立管理,便于维护
- 可扩展: 新增格式支持无需修改现有代码
- 类型安全: 明确的接口定义和类型提示
- 自动检测: 智能的格式识别机制
- 错误处理: 完善的异常处理和回退机制
- 用户友好: 直观的界面和便捷的拖拽操作
欢迎提交Issue和Pull Request来改进这个项目!
本项目基于MIT许可证开源。
如果这个项目对你有帮助,请给它一个⭐星标支持!