Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Patience-Joey/pointcloud_viewer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Point Cloud Viewer / 点云查看器

Python PyQt5 Open3D

一个用Python编写的交互式点云可视化工具,主要用于激光雷达数据(.bin文件)的直接可视化和分析。

✨ 主要特性

  • 🚀 自动格式检测: 支持多种点云数据格式的自动识别
  • 🎯 实时3D可视化: 基于Open3D的高质量3D渲染,自动打开3D视角
  • 🎬 序列播放: 支持点云序列的自动播放,像视频一样浏览点云数据
  • 📊 2D多视角显示: 提供顶视图、侧视图和高度分布图
  • 🎨 多种着色模式: 按高度、强度、距离等方式着色
  • 📁 拖拽支持: 支持文件和文件夹的拖拽加载
  • ⌨️ 快捷键控制: 丰富的键盘快捷键支持序列播放
  • 🔧 模块化架构: 易于扩展新的数据集格式

目前支持的数据集格式: KITTI, KITTI处理格式, NCLT, Oxford, Boreas, Boreas处理格式

🚀 快速开始

安装依赖

pip install -r requirements.txt

运行程序

python pointcloud_viewer.py

使用方法

  1. 单个点云: 拖拽单个.bin文件到程序窗口或使用按钮加载
  2. 序列播放: 拖拽包含多个.bin文件的文件夹到程序窗口
  3. 3D查看: 程序会自动打开3D视角,支持鼠标交互
  4. 播放控制: 使用播放按钮或快捷键控制序列播放
  5. 调整设置: 修改点大小、颜色模式、播放速度等参数

🛠️ 项目结构

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处理格式加载器 (支持多种格式)

3. 管理器模式

  • LoaderManager: 统一管理所有加载器
  • 支持自动格式检测和手动格式指定
  • 可扩展的架构,添加新格式只需实现新的加载器类

4. 基础类设计

  • 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')

扩展新格式

要添加新的点云格式支持:

  1. 继承 BaseLoader
  2. 实现 can_load()load() 方法
  3. 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: 停止播放并重置

3D可视化

  • 高质量渲染: Open3D提供的专业级3D渲染
  • 交互控制: 鼠标操作的直观3D导航 (左键旋转、滚轮缩放、Shift+左键平移)
  • 视角优化: 预设的斜上方观察角度,更好地展示点云结构
  • 自动打开: 加载点云后自动打开3D视角

2D分析

  • 多视角投影: 顶视图(X-Y)、侧视图(X-Z)、前视图(Y-Z)
  • 统计分析: 高度分布直方图
  • 颜色映射: 基于高度或强度的伪彩色显示

着色模式

  • 高度着色: 基于Z坐标的渐变色 (默认)
  • 强度着色: 基于激光反射强度
  • 距离着色: 基于到原点的距离
  • 统一颜色: 单一颜色显示

📋 系统要求

  • Python: 3.7+
  • 操作系统: Windows / macOS / Linux
  • 内存: 建议4GB以上(取决于点云大小)
  • 显卡: 支持OpenGL的显卡(用于3D渲染)

🔍 应用场景

  • 自动驾驶: 激光雷达数据可视化和分析,序列播放查看车辆行驶轨迹
  • 机器人导航: SLAM算法的点云数据验证,动态观察环境变化
  • 研究教学: 点云处理算法的可视化教学,序列演示算法效果
  • 数据标注: 3D场景理解和标注工作,时序数据分析
  • 算法调试: 点云处理流程的中间结果查看,帧间变化分析
  • 质量检查: 点云采集质量评估,异常帧快速定位

💡 优势

  1. 模块化: 每个数据集格式独立管理,便于维护
  2. 可扩展: 新增格式支持无需修改现有代码
  3. 类型安全: 明确的接口定义和类型提示
  4. 自动检测: 智能的格式识别机制
  5. 错误处理: 完善的异常处理和回退机制
  6. 用户友好: 直观的界面和便捷的拖拽操作

🤝 贡献

欢迎提交Issue和Pull Request来改进这个项目!

📄 许可证

本项目基于MIT许可证开源。


如果这个项目对你有帮助,请给它一个⭐星标支持!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages