【踩坑记录】colmap中的相机位姿的坐标系定义及其可视化结果的隐含转换

  这个问题来自于我想要使用colmap的稀疏重建结果,然后发现由于相机坐标系的定义没弄清楚,导致我获取的结果存在问题。
  

1 问题引出

  下面先从我们还不知道坐标系定义的视角开始理解,引出问题所在。使用的是一份无人机影像数据,共有59张影像:
在这里插入图片描述
  下图是colmap输出的稀疏重建结果,没有什么问题,与实际飞行情况也是相符合的:
在这里插入图片描述
  下图是导出的txt格式的重建结果中的images.txt文件,根据格式说明,其中IMAGE_ID这行的倒数第三个数据是相机的Z坐标,比如图像1为0.365289,图像2为-0.0520487。
在这里插入图片描述
  现在,我们将所有

### 实现相机姿可视化 为了在 Colmap 中实现相机姿可视化,可以利用 Colmap 自带的图形界面工具来查看稀疏重建结果中的相机置和姿态。启动 Colmap 并加载已经完成稀疏重建的项目文件后,在主界面上可以选择 “Sparse model viewer” 或者 “Dense model viewer”,这取决于是否有密集重建的数据[^1]。 对于更进一步的操作或是自定义开发需求来说,则可能涉及到读取由 Colmap 输出的 `.bin` 或 `.txt` 文件格式保存下来的特征点与相机参数信息,并通过其他软件库如 Open3D 来绘制这些数据以达到视觉化的效果。 ```python import open3d as o3d # 假设已从COLMAP二进制模型中提取了相机内参矩阵K以及每帧图像对应的外参RT cameras, images, points3D = read_model(path='path_to_colmap_sparse', ext='.bin') for i in range(len(images)): R = images[i].qvec2rotmat() t = images[i].tvec # 创建坐标轴并设置颜色(红绿蓝分别代表XYZ) axes = o3d.geometry.TriangleMesh.create_coordinate_frame(size=0.5) # 将世界坐标系下的原点平移到相机中心,并应用旋转变换 axes.transform(np.hstack((R, t.reshape(3, 1)))) # 添加到场景中显示 vis.add_geometry(axes) vis.run() ``` 需要注意的是,Colmap相机坐标系遵循右手定则,其中 Z 轴指向前方,X 和 Y 分别对应水平向右和平行于传感器平面朝下方向;而在某些情况下,当把 COLMAP 结果用于其他平台时可能会遇到不同约定之间的差异问题,因此要特别留意这一点。
评论 68
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zeeq_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值