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

这篇具有很好参考价值的文章主要介绍了【踩坑记录】colmap中的相机位姿的坐标系定义及其可视化结果的隐含转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

1 问题引出

  下面先从我们还不知道坐标系定义的视角开始理解,引出问题所在。使用的是一份无人机影像数据,共有59张影像:
【踩坑记录】colmap中的相机位姿的坐标系定义及其可视化结果的隐含转换
  下图是colmap输出的稀疏重建结果,没有什么问题,与实际飞行情况也是相符合的:
【踩坑记录】colmap中的相机位姿的坐标系定义及其可视化结果的隐含转换
  下图是导出的txt格式的重建结果中的images.txt文件,根据格式说明,其中IMAGE_ID这行的倒数第三个数据是相机的Z坐标,比如图像1为0.365289,图像2为-0.0520487。
【踩坑记录】colmap中的相机位姿的坐标系定义及其可视化结果的隐含转换
  现在,我们将所有图像的X、Y、Z都导出,在cloudcompare软件中进行可视化,如下图所示。可以看出,这些相机的分布与colmap中的是不一样的,这里的分布有种高低错落的感觉。很明显,这不是正确的,无人机在采集数据时候也是不可能这么飞行的。
【踩坑记录】colmap中的相机位姿的坐标系定义及其可视化结果的隐含转换
  这就很奇怪了,这个数据明明是直接从colmap中导出来的,我没有对其进行任何更改,怎么会出现不一样的显示?这点诡异还在于,如果你去colmap中双击重建结果中的某个相机,可以看到该图像的信息,比如图像1,如下图所示,其tx、ty、tz和images文件中的一模一样。那为什么一样的数据,在colmap中的显示看上去是符合常理的正确结果,但是在其他软件上显示的却不一样(但是不可能是因为cloudcompare软件有问题)?
【踩坑记录】colmap中的相机位姿的坐标系定义及其可视化结果的隐含转换
  于是,我决定去修改images文件中的所有相机的Z坐标值,我将它们全部设置为5.0,这样的话,按理说这些相机的可视化结果肯定在一个平面上。但是并不是这样的,其在colmap中的显示结果如下图所示:
【踩坑记录】colmap中的相机位姿的坐标系定义及其可视化结果的隐含转换
  就很诡异的,该结果与正确结果在cloudcompare里的显示似乎排列很像。为什么会出现这种情况?这个问题其实困扰了我很久,一度以为是相机的排列或是什么原因。但是其实它们确实也并不是随机杂乱的排列,而是似乎存在某种变换关系。于是,我对其进行了变换(在下一节说明),再次获得的位姿结果在cloudcompare中进行了可视化,如下图所示,这回总算是正确的了。
【踩坑记录】colmap中的相机位姿的坐标系定义及其可视化结果的隐含转换
  

2 坐标系定义及转换

  首先介绍一下世界坐标系和相机坐标系,它们之间是存在一个转换关系的(它们是互逆的变换)。世界坐标系就是指定一个世界原点,所有相机的坐标都是相对于这个原点来定义的。相机坐标系就是以每个相机自身作为坐标系原点(三维空间中即为[0,0,0])。现假设空间中一点X,它在某个相机坐标系下的坐标是Xcamera,在世界坐标系下的坐标是Xworld。假设它通过R和t实现从相机坐标系到世界坐标系之间的转换:

Xworld = RXcamera + t

  那么,由上式,我们可以推得从世界坐标系向相机坐标系的转换关系(RT=R-1,所以通常直接使用RT即可):

Xcamera = RTXworld - RTt

  但是,在colmap中,其坐标系定义和上面说的这个是相反的:

Xcamera = RXworld + t

  所以相应的,将其变换到世界坐标系下的公式为:

Xworld = RTXcamera - RTt

  也就是说,colmap输出的images文件中的四元数Q和平移向量T,是其定义的相机坐标系下的R和t。但是,如果我们要将这些相机放在一起进行可视化的话,那么我们需要首先将其变换到世界坐标系下(这样才能统一),即:

R’ = RT
t’ = -RTt

  实际上,colmap自身在进行可视化的时候,已经隐含了这样的一个变换过程了,但是如果你去点击可视化的相机,查看到的数值其实还是相机坐标系下的Q和t,极具迷惑性(这个例子在第一节中已经有说明了)。

关于相机坐标系和世界坐标系之间的转换和关系的理解,可以参考:【三维视觉】相机模型和旋转矩阵文章来源地址https://www.toymoban.com/news/detail-456071.html

到了这里,关于【踩坑记录】colmap中的相机位姿的坐标系定义及其可视化结果的隐含转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 齐次坐标变换的理解以及在无人机相机定位坐标系转换中的应用

    4*4矩阵的右边三个数表示平移,如果原来的向量u的w=0,那么就是u+(ai+bj+ck) 对应xyz三个轴的循环变换,注意负号的位置 用描述空间一点的变换方法来描述物体在空间的位置和方向。 先变换的矩阵乘在右边。 A p = B p + A p B o {}^{A}p={}^{B}p+{}^{A}p_{B_{o}} A p = B p + A p B o ​ ​ 从

    2024年04月15日
    浏览(59)
  • 无人机中的坐标系、旋转矩阵与相机姿态计算

    球坐标系 球坐标系是三维坐标系中的一种,在无人机中一般使用球坐标系来表示相机姿态,相机姿态的坐标是相对于无人机的,而无人机的飞行姿态则是相对于大地坐标系的。这里我们使用的相机是2自由度的相机,即可以水平 ϕ phi ϕ 和垂直 θ theta θ 两个方向转动,其中

    2024年02月12日
    浏览(40)
  • 6_相机坐标系_相机4个坐标系详述

            相机系列文章是用来记录使用opencv3来完成单目相机和6轴机械臂手眼标定。本人吃饭的主职是linux下6轴机械臂相关应用开发。但对于机械臂运动学、相机应用等都非常感兴趣,所以对一些线性代数基础薄弱又想深入了解机械臂内部运算的同志比较有体会。由于是探

    2024年04月09日
    浏览(55)
  • 世界坐标系、相机坐标系、图像坐标系、像素坐标系

    四个坐标系都是什么? 1.世界坐标系-相机坐标系-图像坐标系-像素坐标系 2.像素坐标系-图像坐标系-相机坐标系-世界坐标系 图像处理、立体视觉等等方向常常涉及到四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系                     构建世界坐标系只是

    2024年01月21日
    浏览(69)
  • 相机坐标系、像素坐标系转换

    相机内参矩阵是相机的重要参数之一,它描述了相机光学系统的内部性质,例如焦距、光学中心和图像畸变等信息。在计算机视觉和图形学中,相机内参矩阵通常用于将图像坐标系中的像素坐标转换为相机坐标系中的三维坐标,或者将相机坐标系中的三维坐标投影到图像坐标

    2024年02月13日
    浏览(48)
  • 坐标转换(相机坐标系、世界坐标系、图像物理坐标系、图像像素坐标系)

    一般情况下我们所涉及到的坐标包括四个,即相机坐标系、世界坐标系、图像物理坐标系、图像像素坐标系。我们本文的讲解思路是在讲解每个坐标转换之前先讲清楚每个坐标系所表示的含义。本文主要参考由高翔主编的视觉SLAM十四讲第五章相机模型。 相机将三维世界的坐

    2024年02月09日
    浏览(73)
  • 世界坐标系、相机坐标系和图像坐标系的转换

    之前只是停留在会用的阶段,一直没去读懂计算的原理,今天通读了大佬的文章,写的言简意赅,感谢感谢~~特此记录一下,仅用作个人笔记 贴链接,十分感谢~ https://blog.csdn.net/weixin_44278406/article/details/112986651 https://blog.csdn.net/guyuealian/article/details/104184551 将三维物体转换成照

    2023年04月15日
    浏览(64)
  • 图像坐标系如何转换到相机坐标系。

    问题描述:图像坐标系如何转换到相机坐标系。 问题解答: 图像坐标系的定义: 图像坐标系是用于描述数字图像中像素位置的坐标系。图像坐标系的原点是相机光轴与成像平面的交点。X轴沿着成像平面的水平方向正向,Y轴沿着成像平面的垂直方向正向。 相机坐标系的定义

    2024年02月04日
    浏览(51)
  • 关于世界坐标系,相机坐标系,图像坐标系,像素坐标系的一些理解

    在项目中,研究标定时,像素坐标与轴位置的关系时,需要用到关于坐标系的转换。在此也就是找到世界坐标系与像素坐标系的转换关系。想理清楚故做如下记录。 四坐标关系图如下: 图中: 世界坐标系(O W —X W Y W Z W ): 一个三维直角坐标系,以其为基准可以描述相机

    2024年02月09日
    浏览(72)
  • C++ api调用realsense d435相机,将坐标转换到相机坐标系

            在使用Intel RealSense相机进行编程时,首先需要创建一个 rs2::pipeline 对象,并使用该对象启动相机的数据流。在启动数据流后,相机将根据配置的参数生成相应的数据流,例如深度、彩色或红外流,并将这些数据传输到计算机中。 RS2_STREAM_DEPTH :指定启用的流类型为

    2024年02月16日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包