6_相机坐标系_相机4个坐标系详述

        相机系列文章是用来记录使用opencv3来完成单目相机和6轴机械臂手眼标定。本人吃饭的主职是linux下6轴机械臂相关应用开发。但对于机械臂运动学、相机应用等都非常感兴趣,所以对一些线性代数基础薄弱又想深入了解机械臂内部运算的同志比较有体会。由于是探索性学习,所以文章并没有太多规律而言,更像是技术路线调整,但这更贴近实际。探索事物本质是快乐的,强者不是天生的,而是学习思考来的。

最近参与了3D相机应用项目,与同事交流下又对机械臂运行学有了新的理解,像是一层窗户纸被捅破了,最终感觉就是算矩阵。

一、相机四个坐标系

世界坐标系、相机坐标系、图像坐标系、像素坐标系。

相机将三维世界中的坐标点(单位是m)映射到二维图像平面(单位为像素)的过程可用一个几何模型进行描述。模型有很多种,最简单的是针孔模型,即小孔成像。

5ddc775f15b268dedb11e84527a1bd2c.png

上图中O为相机的光心,也是针孔模型中的针孔。现实世界的空间点P,经过小孔O投影后,落在物理成像平面O’-x’-y’上,成像点为P’。设P的坐标位[X, Y, Z]T,P’为[X’, Y’, Z’]T,设物理成像平面到小孔的距离为f(焦距),则根据三角形相似,得    

Z/f = -X/X’ = -Y/Y’

其中负号代表成像是倒立的。但实际应用中图像并不是倒像(否则相机的使用会非常不便)。为了让模型更符合实际,可以等价的将成像平面对称的放在相机前方,和三维空间点一起放在相机坐标系的同一侧。如图,这样可以将公式中负号去掉,则:

Z/f = X/X’ = Y/Y’                                                      ......(1)式

72bdf9422565037d447d72fe4712dbf2.png

整理得:

X’ = fX/Z

Y’ = fY/Z

上式描述了P点和它成像之间的空间关系,这里所有单位都可以理解成米。但在相机中我们获得的是一个个的像素,所以还需要进一步转换。

1、像素坐标系

设在成像平面上像素坐标系o-x-y,则在像素平面得到P’的像素坐标:[u, v]T。

像素坐标系通常定义为:原点o’位于图像左上角,u轴向右与x轴平行,v轴向下与y轴平行,则像素坐标系与成像平面之间相差一个缩放与一个原点平移。设像素坐标在u轴上缩放α倍,在u轴上缩放β倍;原点平移了[cx, cy]T,则P’(图像坐标)坐标与像素坐标[u, v]的关系为:

u = αX’ + cx    

v = βY’ + cy

与(1)式联立,令αf为fx,βf为fy,得

u = αfxX/Z + cx

v = βfyY/Z + cy

上式f单位为m,α和β单位为像素/米,则fx、fy、cx、cy的单位为像素。将上式携程矩阵形式,左侧是齐次坐标,右侧是非齐次:

a859c1d93708d61a5e112ad53a88c841.png

则:

    b1c3d036dfa187a92575c88515163978.png

让人快乐的消息是中间这个3×3矩阵正是被称为相机内参的矩阵。通常认为相机内参在出厂后㐊固定的,不会再使用过程中发生变化。

OK,接下来就是外参。上式中P的坐标是基于相机坐标系的,但实际上由于相机在运动,所以P的相机坐标应该是它的世界坐标(Pw)根据相机当前的姿态变换到相机坐标系下的结果。相机位姿由它的旋转矩阵和R和平移矩阵t来描述(这块之后再细说)。则:

08df2f054d296571768eca9e7b7d95a9.png

注意后式隐含了一次齐次到非齐次的转换(么看出来)。它描述了P的世界坐标到相机坐标的投影关系。其中,相机的位姿R,t又称为相机的外参数。相比不变的内参,外参会随着相机的运动发生改变。    

《视觉SLAM十四讲》第二版,P123

注意: 本内容仅用作个人学习,勿用作商业用途

欢迎关注,记录学习!

e5f0471b2ebe9fab9fbee273140d0764.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/573294.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Trello国内替代工具有哪些?分享5款

盘点5款类似Trello的本地部署项目管理工具:1.PingCode;2.Worktile;3.Teambition;4.redmine;5.TAIga.io。 Trello是一款杰出的协作与工作管理应用,专为追踪团队项目、凸显当前活动任务、分配责任人&#xff…

imx6ull使用【QT+V4l2】驱动USB摄像头

仓库:https://gitee.com/wangyoujie11/imx6ull-camera“”记得给的star哦“” “”正文开始" 一、配置内核,使其支持UVC(USB Video Class) 在Linux系统中,UVC驱动的支持在Linux Kernel 2.4之后被增加到内核中。 找到自己的linux源码文件…

【LeetCode热题100】105. 从前序与中序遍历序列构造二叉树(二叉树)

一.题目要求 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 二.题目难度 中等 三.输入样例 示例 1: 输入: preorder [3,9,20,15,7], inorder…

政安晨:【Keras机器学习实践要点】(六)—— 使用内置方法进行训练和评估

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎机器学习 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 本文涵盖使用内置 API 进行训练和验证&#…

【leetcode】双“指针”

标题:【leetcode】双指针 水墨不写bug 我认为 讲清楚为什么要用双指针 比讲怎么用双指针更重要! (一)快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数…

JAVA面试大全之JVM和调优篇

目录 1、类加载机制 1.1、类加载的生命周期? 1.2、类加载器的层次? 1.3、Class.forName()和ClassLoader.loadClass()区别? 1.4、JVM有哪些类加载机制? 2、内存结构 2.1、说说JVM内存整体的结构?线程私有还是共享的? 2.2…

布隆过滤器详讲

本文旨在讲解布隆过滤器的原理以及实现方式,希望通过本文能使读者对布隆过滤器有一定的认识! 一、布隆过滤器的引入 在讲解布隆过滤器之前,我们还是先提及一下前面讲的位图行,位图可以处理大量的数据,广泛用于查找等…

【检索稳定|火爆征稿中】2024年企业管理与数字化经济国际学术会议(ICBMDE 2024)

【检索稳定|火爆征稿中】2024年企业管理与数字化经济国际学术会议(ICBMDE 2024) 2024 International Conference on Business Management and Digital Economy(ICBMDE 2024) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~…

小米HyperOS 澎湃os机型免答题 免社区等级 秒接bl锁操作步骤解析

小米机型解锁bl 绕过社区等级5才可以解锁的限制的教程_没有五级社区怎么解锁bl-CSDN博客 上次解析了小米有些出厂不是HyperOS系统的机型绕社区等级接bl锁的操作。目前有更新出厂为HyperOS系统的机型免社区登录等级限制 免答题解锁bl的操作。而且有网友在米14 平板6sp k70这些新…

报错there is no HDFS_NAMENODE_USER defined

在Hadoop安装目录下找到sbin文件夹,修改里面的四个文件 1、对于start-dfs.sh和stop-dfs.sh文件,添加下列参数: HDFS_DATANODE_USERroot HDFS_DATANODE_SECURE_USERhdfs HDFS_NAMENODE_USERroot HDFS_SECONDARYNAMENODE_USERroot 2、对于st…

什么是物联网监控平台?部署物联网平台有什么作用?

随着物联网技术的飞速发展,越来越多的企业开始关注并投入到这一领域。物联网监控平台作为连接物理世界与数字世界的桥梁,正逐渐成为企业数字化转型的关键组件。今天,我们将深入探讨物联网监控平台的定义、部署物联网平台的作用,以…

OSG编程指南<二十一>:OSG视图与相机视点更新设置及OSG宽屏变形

1、概述 什么是视图?在《OpenGL 编程指南》中有下面的比喻,从笔者开始学习图形学就影响深刻,相信对读者学习场景管理也会非常有帮助。 产生目标场景视图的变换过程类似于用相机进行拍照,主要有如下的步骤: (1)把照相机固定在三脚架上,让它对准场景(视图变换)。 (2)…