
当 SHARE3DCAM 的 Discord 社区中出现一个问题——"我能把 SHARE3DCAM 的扫描数据用到 COLMAP 里吗?"——回答不是某个产品功能,而是一位用户主动利用 SHARE3DCAM 开放的原始数据和社区技术交流支持,对自己的工作流做出了优化尝试。
认识一下 AVsupport(Peter Graf),SHARE C1 用户,也是 SHARE3DCAM Kickstarter 众筹项目的早期支持者。在十周内,Peter 从发现工作流缺口,到成为 pose2colmap.py 的主要作者——这是一款将 SHARE3DCAM 位姿导出数据转换为 COLMAP 和 RealityCapture 标准格式的 Python 脚本。
Peter 的故事本身就值得被讲述。但它也指向了一件事:当扫描数据不被锁在专有壁垒背后时,每天接触这些数据的人可以动手优化自己的工作流。从一个在 Kickstarter 阶段提了一个问题的支持者,到亲手写出一款实用的格式转换工具——这个轨迹比任何产品页面都更能说明开放数据意味着什么。
这个案例的核心价值很清楚:SHARE3DCAM 的意义不只在于交付点云、3DGS 或 CAD 成果,也在于让专业用户能够基于开放数据继续连接自己的摄影测量、重建和研发工作流。
为什么开放数据在这里很重要
在深入细节之前,有必要了解行业背景——因为这正是让 Peter 的工作显得特别的原因。
行业默认:原始数据通常是不可获取的
在手持 LiDAR 扫描和空间采集领域,一个长期存在的现实塑造了用户能做什么、不能做什么:用户拿到的通常是厂商处理后的成果(彩色点云、网格模型、报告),而不是采集过程中的原始传感器数据。 原始 LiDAR 帧、IMU 惯导流、相机图像序列、标定参数文件——在大多数平台上被封装在专有管线内部,用户无法直接访问或导出。
这不是某一个厂商独有的做法,而是行业运行多年的默认模式。对厂商来说,锁定数据能控制产品质量、绑定软件生态、简化技术支持。但对用户而言,这意味着:在厂商预设的功能边界之外,你无法探索、重处理或集成你自己的数据。
一个典型的例子:你想把扫描仪的原始数据导入 COLMAP 做密集重建、用自定义算法优化轨迹、或在五年后重新处理存档数据。在绝大多数平台上,这些事要么技术上不可能脱离厂商软件环境完成,要么需要额外的商业授权和专用工具。不是因为数据不存在——而是因为你拿不到。
SHARE3DCAM 的数据处理方式
SHARE3DCAM 的路线有所不同。通过 SHARE PointClouds Studio(赛尔点云管家),用户可以获得专业级的处理成果:彩色点云、3DGS/高斯泼溅模型、CAD 图纸导出。这些是大多数项目需要的最终交付物。
在这些成果之外,SHARE3DCAM 也提供可访问的原始数据包。从入门级的 SHARE C1 到专业级的 S100 系列,设备工作流不仅面向处理后的成果,也保留了成果背后的底层传感器数据,为后续验证、二次处理和第三方工具集成提供基础。
以下是 SHARE3DCAM 扫描仪单次任务交付的原始数据内容:
原始采集数据包
| 数据项 | 内容说明 |
|---|---|
| **ROSBAG(*.bag)** | 核心原始数据载体。包含 LiDAR 点云帧、IMU 惯导数据、相机图像帧、时间戳等逐帧传感器原始信息,是后续高精度轨迹优化、时空同步和建模重算的基础 |
| frame_pose.txt | 每一帧 LiDAR 的位置坐标与姿态角,按时间顺序排列。可用于轨迹显示、外参联动和配准验证 |
| ROVER_PPKRAW.bin | GNSS 原始卫星观测数据。配合基站数据可进行 PPK 后处理,提升轨迹绝对精度 |
| info/ | 相机内参、LiDAR/IMU 传感器标定参数、各传感器之间的外参关系文件 |
| pointcloud.pcd | 预览点云,用于快速检查扫描覆盖范围和采集完整性 |
| project_info.json | 设备型号、项目名称、采集时间、任务属性等结构化项目信息 |
| control_points_photos/ | 控制点现场实拍照片 |
| log/ | 任务启动/结束、采集状态、异常与错误信息的完整运行日志 |
SHARE PointClouds Studio(赛尔点云管家)解算后的去畸变影像数据包
| 数据项 | 内容说明 |
|---|---|
| left/right | 已去除镜头畸变的左/右相机图像序列 |
| left_mask/right_mask | 像元有效范围与无效区域屏蔽信息 |
| ImgPose.txt | 每张照片的位置、roll/pitch/yaw、四元数及时间戳,适合程序解析与多传感器融合 |
| xyzopk.txt | 使用 Omega/Phi/Kappa 表达相机姿态,兼容传统摄影测量软件接口 |
| TransformedCam.json | 单张照片的内外参数结构化信息 |
| **\_undistort.opt / \_undistort_intrinsic.txt** | 去畸变后相机模型、焦距、主点等内参 |
拥有原始数据意味着什么
当原始数据以开放格式交付时,三件事成为可能:
- 二次开发自由。 用任何编程语言和算法框架处理这些数据。COLMAP、Open3D、OpenCV、自定义 Python 脚本——没有格式壁垒。
- 工作流自主。 不被锁定在某个软件生态里。SHARE PointClouds Studio(赛尔点云管家)是推荐的起点,不是唯一的终点。数据可以进入 COLMAP、RealityCapture、Metashape、CloudCompare、AutoCAD、Revit 或其他可信赖的专业工具。
- 未来可延续。 数据以开放格式保存。五年后新算法出现或项目需要重新处理时,项目团队仍有机会基于原始数据重新验证、重建或扩展工作流。
Peter 就是在这样的环境中工作的:开放数据不是一个抽象口号,而是他能够从 SHARE C1 项目数据出发,持续测试、转换和验证真实工作流的前提。
Peter 看到的问题
SHARE3DCAM 扫描仪可以捕获高质量的 3D 数据。SHARE PointClouds Studio(赛尔点云管家)在 SHARE3DCAM 生态内处理这些数据,交付点云、3DGS 模型和 CAD 图纸等专业成果。但许多专业用户——测绘师、建筑师、文化遗产记录专家——还需要将这些数据导入 COLMAP 或 RealityCapture 等成熟的摄影测量管线中,以完成密集网格重建、多传感器融合或与既有专业工作流的集成。
挑战在于:SHARE3DCAM 的位姿输出使用了特定的相机模型和坐标约定,无法直接映射到标准摄影测量格式。
对大多数平台上的大多数用户来说,故事到这里就结束了——提交一个支持工单,然后等待。但因为原始数据是开放的,Peter 可以直接访问标定参数、传感器外参和逐帧位姿。一个原本需要等待厂商排期的功能请求,变成了一个可以动手解决的工程问题。
他看到了缺口,然后填补了它。

十周,四个开发阶段:Peter 是怎么做的
Peter 独立开发了 pose2colmap.py 作为开源项目,利用 SHARE3DCAM 的开放数据、公开文档和社区资源。开发过程在 SHARE3DCAM 的 Discord 频道中公开进行,从 4 月中旬持续到 6 月下旬,脚本从早期版本迭代到 v1.12。
第一阶段:基础架构(4月中旬–5月中旬)
- 双相机支持(左 + 右立体基线,沿 X 轴约 79.4mm)
- 从 SHARE PointClouds Studio(赛尔点云管家)导出目录自动发现位姿文件和图像
- 多 viewer 约定支持(RealityCapture 2、LichtFeld Studio、PostShot)
- 鱼眼相机模型映射(SHARE3DCAM POLYFISHEYE → COLMAP OPENCV_FISHEYE — 进行中,目前使用过渡性估算桥接方案)
- 相机与点云变换参数解耦(--camera-pitch/yaw/roll 独立控制)
第二阶段:手性难题(5月中旬–5月下旬)——整个项目最具技术深度的阶段
TransformedCam.json 中的旋转矩阵行列式为 -1(左手坐标系),而 COLMAP 要求 +1(右手坐标系)。行列式不匹配导致相机在导入 COLMAP 后姿态"爆炸"。
Peter 最初的尝试——检测行列式后取反旋转矩阵列——破坏了旋转本身。真正的突破来自一个数学发现:展开相机中心公式 C = -R_colmap^T @ t_colmap 后,旋转和位置变换可以完全解耦,简化为 C = S_pos @ t_slam。这意味着可以独立控制相机朝向(用于解决手性问题)和位置(用于世界坐标对齐),同时满足这两个原本矛盾的需求。
基于这一突破,后续又经过多轮测试,确认了最终的 yaw+90° 朝向修正方案。整个过程在 Discord 频道中公开迭代,每一版都用真实扫描数据验证。
第三阶段:标定精度(5月下旬–6月初)
- 支持 Metashape XML 标定数据(EquisolidFisheye → OPENCV_FISHEYE 转换,进行中)
- POLYFISHEYE → Kannala-Brandt 曲线拟合回退方案
- 多轮畸变系数符号约定调整(k1-k4 取反策略)
- C1 相机硬编码参考标定值
第四阶段:生产化(6月)
- 跨平台兼容性修复
--upscale标志:处理 SHARE PointClouds Studio(赛尔点云管家)去畸变时的图像上采样- RS2 trailing newline 格式修复(RS2 已通过这一过程获得相关更新)
- 非鱼眼模式崩溃修复,全面错误提示与校验

pose2colmap.py 是什么?
pose2colmap.py 是一款独立的开源 Python 命令行工具,由 Peter Graf 开发和维护。它的核心功能是将 SHARE3DCAM 手持扫描仪的位姿导出数据转换为 COLMAP 和 RealityCapture 等摄影测量软件可读取的标准格式。当前版本 v1.12,约 2,300 行代码。
主要能力:
- 从 SHARE PointClouds Studio(赛尔点云管家)导出目录自动发现并读取位姿文件、图像和标定参数
- 将 SHARE3DCAM 的 POLYFISHEYE 鱼眼相机模型映射为 COLMAP 的 OPENCV_FISHEYE 模型
- 支持双相机立体基线(左 + 右),自动处理手性修正
- 输出 COLMAP 格式,以不同约定适配 RS2(RealityCapture 2)和 PS/LichtFeld Studio 工作流,底层使用相同的 images.txt / cameras.txt / points3D.txt 结构
- 兼容 RS2(RealityCapture 2)和 LichtFeld Studio 等多套 viewer 约定
- 提供
--upscale标志以匹配 SHARE PointClouds Studio(赛尔点云管家)去畸变时的图像上采样
适合谁用:
- 需要将 SHARE3DCAM 扫描数据导入 COLMAP 做密集点云重建或网格生成的用户
- 使用 RealityCapture 进行高精度摄影测量处理的测绘与工程团队
- 希望基于 SHARE3DCAM 原始数据进行自定义算法开发的研究者与开发者
- 已有 Metashape 标定数据、希望以更高精度完成位姿转换的专业用户
关于鱼眼镜头挑战的一个说明:目前在三维重建中直接使用超广角鱼眼图像而不进行去畸变处理,仍然是一个具有挑战性的方向——去畸变可能带来图像质量下降和视场角损失。LichtFeld Studio 正在这一方向上做出探索。在此期间,pose2colmap.py 提供了一条实用路径:当 Metashape 标定数据(EquisolidFisheye)可用时,脚本可以利用它在 SHARE3DCAM 原生 Polyfisheye 格式和 COLMAP 支持的鱼眼模型之间建立连接,使测试和工作流开发得以推进。
获取方式:
pose2colmap.py 作为独立开源项目托管在 GitHub(github.com/grafpez/pose2colmap),使用文档、命令行参数说明和版本更新均在 SHARE3DCAM 官方 Discord 社区的对应频道中维护。


SHARE3DCAM 提供了什么
pose2colmap.py 是 Peter 构建的——代码、架构决策、真实场景测试和功能方向全部来自他。SHARE3DCAM 内部工程师没有参与脚本编写。
SHARE3DCAM 的角色是提供让这项工作能够发生并持续推进的条件:
- 开放原始数据 — ROSBAG、IMU、标定参数和位姿数据等原始数据包可被访问和解析,减少加密或专有格式壁垒对二次开发的限制。
- SHARE3DCAM Bot — 一个搭载产品知识库的 AI 助手,基于 OpenClaw 构建,直接集成在 Discord 社区中。Peter 在整个项目中将其作为实时技术参考使用。
- 知识库 — 内部文档、标定模型和技术规格向社区开放。
- 社区空间 — Discord 频道为公开迭代、测试和反馈提供了环境。
这需要什么条件
Peter 有技术、有主动性,也投入了十周时间。他还有一个关键条件:可以直接访问项目背后的原始数据。
当传感器流、标定参数和逐帧位姿以开放格式存在时,一个有相关技术背景的人就能发现缺口、动手开发原型、用真实数据验证结果,而不必从逆向工程未公开格式开始。这里发生的事就是这样:一次务实的尝试,一个用户,运用 SHARE3DCAM 开放的原始数据和社区技术支持对自己的工作流进行了优化。
如果你每天都在接触扫描数据,并且看到了可以改进的地方——原始数据就在那里。Bot 就在那里。社区就在那里。Peter 做的事不是只属于他一个人的。
SHARE3DCAM 数据交付 vs. 行业常见做法
| 维度 | 行业常见做法 | SHARE3DCAM |
|---|---|---|
| 原始传感器数据(LiDAR帧/IMU/相机) | 常封装在专有管线中,用户通常较难直接获取 | ROSBAG + 文本格式,支持原始数据交付 |
| 相机/IMU 标定参数 | 通常不作为常规交付内容 | 在 info/ 目录中提供,便于解析和验证 |
| GNSS 原始观测数据 | 部分设备不可导出或需要额外流程 | ROVER_PPKRAW.bin 可作为项目数据包的一部分 |
| 第三方工具集成 | 多依赖厂商支持的数据格式或授权合作 | 更容易进入 COLMAP、RealityCapture、Open3D 等第三方工作流 |
| 社区二次开发 | 通常不在厂商常规支持范围内 | 通过开放数据、AI 助手和社区频道提供支持环境 |
下一步
pose2colmap.py 向 SHARE3DCAM 社区及更广泛的用户开放。如果您正在使用 COLMAP、RealityCapture 或任何摄影测量管线,这个工具可以架起桥梁。
Peter 也分享了基于该工作流生成的 SuperSplat 在线模型,便于社区成员直接查看成果:

如果你也在基于 SHARE3DCAM 的开放数据构建工具,或者想看看其他用户在用这些数据做什么——欢迎加入 SHARE3DCAM 官方 Discord 社区。从标定参数的调试讨论,到 COLMAP 的集成问题,到下一个社区工具的想法——这里就是对话发生的地方。

开发幕后:AVsupport 在 SHARE3DCAM 官方社区中与 SHARE3DCAM Bot 进行技术交流。
pose2colmap.py 由 Peter Graf 作为独立开源项目开发和维护。SHARE3DCAM 提供了开放原始数据、Bot、知识库和协作空间。感谢 Peter 及更广泛的 SHARE3DCAM Discord 社区在测试、反馈和技术讨论中的贡献。

.png)
.png)
.png)
.png)












