例子

如下图所示,右边的坐标系是相机坐标系,左边的是世界坐标系。
假设他们只有 x 轴方向上的平移。
相机坐标系原点在相机坐标系下的坐标是 (0,0,0),
假设相机坐标系在世界坐标系沿 x 轴正方向 5 m 外,
则在世界坐标系下,相机坐标系原点的坐标为 (5,0,0)
也就是说针对任意一点 P,它在相机坐标系下的坐标为 (x_c,y_c,z_c)
那么它在世界坐标系下的坐标为 (x_c+5,y_c,z_c)
此时 c2w(camera to world) 矩阵右上角的 平移向量 为 (5,0,0)
也就是说 平移向量跟相机坐标系原点在世界坐标系下的坐标是一样的

如何取得相机坐标系原点在世界坐标系下的坐标

原理

定义坐标系1、坐标系2,那么向量 a\mathbf{a}a 在两个坐标系下的坐标为 a1\mathbf{a}_1a1​, a2\mathbf{a}_2a2​,它们之间的关系应该是
a1=R12a2+t12\mathbf{a}_1 = \mathbf{R}_{12}\mathbf{a}_2+\mathbf{t}_{12}a1​=R12​a2​+t12​
这里的
R12\mathbf{R}_{12}R12​
是指“把坐标系2的向量变换到坐标系1”中。由于向量乘在这个矩阵的右边,它的下标是从右读到左的。同理,如果我们要表达“从1到2的旋转矩阵”时,就写成
R21\mathbf{R}_{21}R21​
关于平移
t12\mathbf{t}_{12}t12​
它实际对应的是坐标系1原点指向坐标系2原点的向量,在坐标系1下取的坐标,所以建议读成“从1到2的向量”。
相反地,
t21\mathbf{t}_{21}t21​
即从2指向1的向量在坐标系2下的坐标,却并不等于−t12-\mathbf{t}_{12}−t12​,而是和两个坐标系的旋转还有关系。
所以,当初学者问“我的坐标在哪里”这样的问题时,我们需要清楚地说明这句话的含义。这里“我的坐标”实际上指的是从世界坐标系指向自己坐标系原点的向量,在世界坐标系下取到的坐标。对应到数学符号上,应该是
tWC\mathbf{t}_{WC}tWC​ 的取值。
同理,它并不等于
−tCW-\mathbf{t}_{CW}−tCW​

代码

ray_o = c2w[:3, 3]

相机原点(光心)在世界坐标系下取到的坐标用上述代码获取。
首先 c2wc2wc2w 是 相机到 世界坐标系的变换矩阵,对应平移向量可以写成
tWC\mathbf{t}_{WC}tWC​
注意
W←CW\leftarrow CW←C
自右向左

为什么

至于为什么是这样,举个例子就很清楚,因为是坐标系的变换,所以刚好和坐标的变换有点相反过来的味道。

参考

《视觉SLAM14讲》第二版,电子工业出版社,p45-p46

相机光心在世界坐标系下的坐标(相机坐标系原点在世界坐标系下的坐标与c2w的关系)相关推荐

  1. [图形学] 坐标系变换——从世界坐标系到相机坐标系

    坐标系变换是图形学中最基础的部分,一个物体从建模到显示在屏幕,经历了从物体坐标系到世界坐标系,再从世界坐标系到观察坐标系,最后通过投影到2D平面,再变换到屏幕坐标等一系列过程. 投影矩阵 我们可以很容 ...

  2. 从像素坐标到相机坐标_【视觉知识】机器视觉几何坐标概论

    作者:林青春 来源:知乎 一.机器视觉几何坐标概论 机器视觉系统有三大坐标系,分别是:1.世界坐标系,2.摄像机坐标系,3.图像(像素)坐标系. 1.世界坐标系 世界坐标系(Xw,Yw,Zw)是目标物 ...

  3. 浅析相机相关坐标系的相互转换(世界坐标系、相机坐标系、图像坐标系、像素坐标系、内参矩阵、外参矩阵、扭转因子)【相机标定计算机视觉】

    最近在网上看到了很多关于坐标系转换的帖子,但是其内容很多都是相互转载(甚至还有一部分是错误的),同时大部分的文章内容都是告诉你四种坐标系间的相互转化的数学公式,看完之后很多时候还是不知所云,本文意在深 ...

  4. 小孔成像模型中四个坐标系的转换:世界 相机光心 图像毫米 像素

    相机模型 数码相机图像拍摄的过程实际上是一个光学成像的过程.相机的成像过程涉及到四个坐标系:世界坐标系.相机坐标系.图像坐标系.像素坐标系以及这四个坐标系的转换. 理想透视模型--针孔成像模型 相机模 ...

  5. steamvr2.0 vr模式下,多相机共存

    在使用steamvr htc vive硬件时,会有需要两个相机的情况,在已有vr相机的情况下,直接添加额外的相机,运行程序,vr不可用,这个时候需要做如下设置: vr相机保持默认,额外添加的相机 Ta ...

  6. **c#下halcon调用相机发生错误,不知道什么原因**

    c#下halcon调用相机发生错误,不知道什么原因 "HalconDotNet.HOperatorException"类型的未经处理的异常在 halcondotnet.dll 中发 ...

  7. ROS入门:ROS下使用电脑相机运行ORB_Slam2

    介绍: 最近在学习slam,想将其应用在ros平台上,故跑了orb-slam2的代码.这里粗略总结一下"ROS下使用电脑相机运行ORB_Slam2"的过程.本人菜鸟一枚,如有问题欢 ...

  8. basler 相机取图超时_Opencv打开basler相机——实现显示视频、保存图片、记录视频(Windows下)...

    //定义是否保存图片 #define saveImages 0 //定义是否记录视频 #define recordVideo 0 // 加载OpenCV API #include #include # ...

  9. 工业视觉检测要求下的高速相机的角色

    相机,原本就是为了保留人眼的瞬间记忆而产生的,因此,高速相机在工业领域也是"鹰眼"一样的存在,或者说是智能质检员,流水线上一整套质检系统,如果看做是之前的质检员的话,那么高速相机就 ...

最新文章

  1. VUE项目中使用this.$forceUpdate();解决页面v-for中修改item属性值后页面v-if不改变的问题
  2. MAP(Mean Average Precision)
  3. .NET:命令行解析器介绍
  4. 基于docker搭建svn-server
  5. javascript提示抖动实现方法
  6. linux 下 storm环境搭建,Storm在Ubuntu环境下的单机部署
  7. 【Flink】Flink 任务实时监控
  8. Linux学习笔记005----CentOS7 vi模式保存并退出
  9. C mysql带参数存储过程_C# 调用Mysql 带参数存储过程
  10. 项目组成和开发步骤——VB
  11. Qt配置OpenCV教程
  12. 老K整理|4月|物流技术圈职位招聘合集!
  13. 28岁程序员晒出脑门照,问以后会秃么?网友:这不已经秃了!
  14. Python(2)——根据英文字符输出中文星期
  15. 10.数据库恢复技术
  16. PS如何扣除部分图并添加图
  17. 《Unity2018AR与VR开发快速上手》随书内容资源相关说明
  18. 读《Google软件测试之道》笔记---SWE,SET,TE职责
  19. 手把手学会LoadRunner参数化【LoadRunner】
  20. Webbrowser 使用IE 最高版本

热门文章

  1. m基于FH-GFSK信号的盲解调matlab仿真
  2. 厦门商标注册之快闪家族
  3. 怎样向一个外行人解释操作系统内核?+一篇有关将黑客帝国比作操作系统的旧文
  4. sharepoint同步本地 linux,SharePoint迁移工具
  5. python 分类算法_python机器学习之KNN分类算法
  6. PAT乙级1018,附题目解析和代码注释
  7. java多线程买票实例
  8. [SQL]INSERT INTO tb_user VALUES (1, ‘zhangsan‘, ‘123‘, ‘男‘, ‘北京‘); [Err] 1366 - Incorrect string val
  9. Xcode无证书打ipa包
  10. 敏捷革命:提升个人创造力与企业效率的全新协作模式--读书笔记全书