当数据不被锁住:一位用户用十周打造了 COLMAP 桥

热搜词条
首页/新闻动态/社区与生态
SHARE3DCAM 新闻 / 社区与生态

当数据不被锁住:一位用户用十周打造了 COLMAP 桥

SHARE C1 用户基于 SHARE3DCAM 开放原始数据和社区技术支持,独立开发 pose2colmap.py,将扫描位姿数据连接到 COLMAP、RealityCapture、Open3D、Python 和 SuperSplat 等第三方工作流。
社区与生态
发布日期:2026-07-10
SHARE3DCAM 社区团队
当数据不被锁住:一位用户用十周打造了 COLMAP 桥
新闻摘要
SHARE C1 用户基于 SHARE3DCAM 开放原始数据和社区技术支持,独立开发 pose2colmap.py,将扫描位姿数据连接到 COLMAP、RealityCapture、Open3D、Python 和 SuperSplat 等第三方工作流。

当 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.binGNSS 原始卫星观测数据。配合基站数据可进行 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**去畸变后相机模型、焦距、主点等内参

拥有原始数据意味着什么

当原始数据以开放格式交付时,三件事成为可能:

  1. 二次开发自由。 用任何编程语言和算法框架处理这些数据。COLMAP、Open3D、OpenCV、自定义 Python 脚本——没有格式壁垒。
  1. 工作流自主。 不被锁定在某个软件生态里。SHARE PointClouds Studio(赛尔点云管家)是推荐的起点,不是唯一的终点。数据可以进入 COLMAP、RealityCapture、Metashape、CloudCompare、AutoCAD、Revit 或其他可信赖的专业工具。
  1. 未来可延续。 数据以开放格式保存。五年后新算法出现或项目需要重新处理时,项目团队仍有机会基于原始数据重新验证、重建或扩展工作流。

Peter 就是在这样的环境中工作的:开放数据不是一个抽象口号,而是他能够从 SHARE C1 项目数据出发,持续测试、转换和验证真实工作流的前提。


Peter 看到的问题

SHARE3DCAM 扫描仪可以捕获高质量的 3D 数据。SHARE PointClouds Studio(赛尔点云管家)在 SHARE3DCAM 生态内处理这些数据,交付点云、3DGS 模型和 CAD 图纸等专业成果。但许多专业用户——测绘师、建筑师、文化遗产记录专家——还需要将这些数据导入 COLMAP 或 RealityCapture 等成熟的摄影测量管线中,以完成密集网格重建、多传感器融合或与既有专业工作流的集成。

挑战在于:SHARE3DCAM 的位姿输出使用了特定的相机模型和坐标约定,无法直接映射到标准摄影测量格式。

对大多数平台上的大多数用户来说,故事到这里就结束了——提交一个支持工单,然后等待。但因为原始数据是开放的,Peter 可以直接访问标定参数、传感器外参和逐帧位姿。一个原本需要等待厂商排期的功能请求,变成了一个可以动手解决的工程问题。

他看到了缺口,然后填补了它。

RealityCapture 2 中由 pose2colmap.py 转换后的 SHARE C1 图像位姿与点云混合数据集对齐结果,橙色相机轨迹显示导入后的相机位置。
Peter 使用 pose2colmap.py 输出的数据,在 RealityCapture 2 中验证混合数据集对齐结果。

十周,四个开发阶段: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 已通过这一过程获得相关更新)
  • 非鱼眼模式崩溃修复,全面错误提示与校验
PowerShell 窗口中显示 pose2colmap.py 的命令行参数示例,包括 RS2 输出、LFS 输出、相机轴向、点云轴向和 .las 点云导入选项。
pose2colmap.py 命令行参数示例,包含 RS2 / LFS 输出、相机轴向、点云轴向等设置。

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 社区的对应频道中维护。

PowerShell 终端中显示 pose2colmap.py v1.12 已完成 COLMAP_RS2 导出,生成 cameras.txt、images.txt、points3D.txt、xyzopk.txt 和图像目录。
pose2colmap.py v1.12 完成 COLMAP_RS2 导出,生成 cameras.txt、images.txt、points3D.txt 和图像目录。
LichtFeld Studio / SuperSplat 训练界面显示 SHARE C1 数据生成的 3DGS 模型,训练完成提示显示 305,800 次迭代和约 14 小时训练时间。
基于 SHARE C1 数据生成的 3DGS 模型,训练耗时约 14 小时。

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 在线模型,便于社区成员直接查看成果:

SuperSplat 编辑器中展示 Carrington Council Chambers 历史建筑的 3DGS 模型,左侧为场景管理器,右侧为建筑正立面可视化结果。
SuperSplat 中展示的 Carrington Council Chambers 历史建筑 3DGS 模型。

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

https://discord.gg/qyKcmjez6a


AVsupport 在 SHARE3DCAM 官方 Discord 社区中与 Bot 交互

开发幕后:AVsupport 在 SHARE3DCAM 官方社区中与 SHARE3DCAM Bot 进行技术交流。


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

取消
热门搜索: