SLAM学习入门(1)针孔相机模型公式推导
图(1) 针孔相机模型
在谈到针孔相机模型时,首先要搞清楚以下几个坐标系:
世界坐标系:世界坐标系也称绝对坐标系,是一个基准坐标系,可以根据根据实际情况进行指定。世界坐标系中的点我们用(XwX_wXw, YwY_wYw, ZwZ_wZw)T表示。
相机坐标系:图中的O-x-y-z为相机坐标系,以光心O(也是相机的针孔)为原点,相机坐标系会随着相机的运动不断发生变化。相机坐标系中的点我们用(XcX_cXc, YcY_cYc, ZcZ_cZc)T表示。
图像物理坐标系:图中的O’-x’-y’为图像物理坐标系,位于CCD/CMOS的成像平面上。图像物理坐标系中的点我们用(X′,Y′)(X', Y')(X′,Y′)表示。
像素坐标系:图中的O’‘-u-v为图像像素坐标系,像素坐标系中的点用(u,v)(u, v)(u,v)表示,它表征的是像素所在的行和列。
针孔相机模型实际是将世界坐标系中的空间点映射到像素坐标系中,那么如果已知PPP点在世界坐标系中的坐标为(XwX_wXw, YwY_wYw, ZwZ_wZw)T,怎么求PPP点在像素坐标系下投影的坐标(u,v)(u, v)(u,v)呢?
1、世界坐标系 —> 相机坐标系
世界坐标系与相机坐标系之间的关系为欧式变换关系,将世界坐标系下的点(XwX_wXw, YwY_wYw, ZwZ_wZw)T转换到相机坐标系,可以通过旋转矩阵RRR和平移向量ttt进行变换得到:
[XcYcZc1]4∗1=[R3∗3t3∗101]4∗4.[XwYwZw1]4∗1=M4∗4.[XwYwZw1]4∗1(1)\left[ \begin{matrix} X_c \\ Y_c \\ Z_c \\ 1 \\ \end{matrix} \right] _{4*1} = \left[ \begin{matrix} R_{3*3} & t_{3*1} \\ 0 & 1 \\ \end{matrix} \right]_{4*4} . \left[ \begin{matrix} X_w \\ Y_w \\ Z_w \\ 1 \\ \end{matrix} \right] _{4*1} = M_{4*4} . \left[ \begin{matrix} X_w \\ Y_w \\ Z_w \\ 1 \\ \end{matrix} \right] _{4*1}\tag{1} ⎣⎢⎢⎡XcYcZc1⎦⎥⎥⎤4∗1=[R3∗30t3∗11]4∗4.⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤4∗1=M4∗4.⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤4∗1(1)
其中M4∗4M_{4*4}M4∗4称为外参矩阵。
2、相机坐标系 —> 图像物理坐标系
图(2)
根据图(2)的相似三角形有:
Zcf=−XcX′=−YcY′(2)\frac{Z_c}{f} = -\frac{X_c}{X'} = -\frac{Y_c}{Y'} \tag{2}fZc=−X′Xc=−Y′Yc(2)
其中负号表示成倒立的像,fff表示相机的焦距。
若将成像平面放到三维空间点同一边,那么式(2)可简化:
Zcf=XcX′=YcY′(3)\frac{Z_c}{f} = \frac{X_c}{X'} = \frac{Y_c}{Y'} \tag{3}fZc=X′Xc=Y′Yc(3)
即:
{X′=fXcZcY′=fYcZc(4)\begin{cases} X' = f\frac{X_c}{Z_c} \\ Y' = f\frac{Y_c}{Z_c} \\ \end{cases} \tag{4} {X′=fZcXcY′=fZcYc(4)
写成矩阵形式为:
[X′Y′1]3∗1=1Zc[f000f0001]3∗3.[XcYcZc]3∗1(5)\left[ \begin{matrix} X' \\ Y' \\ 1 \\ \end{matrix} \right] _{3*1} = \frac{1}{Z_c} \left[ \begin{matrix} f & 0 & 0 \\ 0 & f &0 \\ 0 & 0 & 1 \\ \end{matrix} \right]_{3*3} . \left[ \begin{matrix} X_c \\ Y_c \\ Z_c \\ \end{matrix} \right] _{3*1} \tag{5} ⎣⎡X′Y′1⎦⎤3∗1=Zc1⎣⎡f000f0001⎦⎤3∗3.⎣⎡XcYcZc⎦⎤3∗1(5)
3、图像物理坐标系 —> 像素坐标系
根据图(1),我们假设图像物理坐标系的原点O’在像素坐标系的坐标为(u0u_0u0,v0v_0v0),
令dx、dy分别表示单个像素在x’和y’方向上的实际物理尺寸大小,则:
{u=X′dx+u0v=Y′dy+v0(6)\begin{cases} u = \frac{X'}{dx} + {u_0} \\ v = \frac{Y'}{dy} + {v_0} \\ \end{cases} \tag{6} {u=dxX′+u0v=dyY′+v0(6)
将式(6)写成齐次矩阵形式:
[uv1]3∗1=[1dx0u001dyv0001]3∗3.[X′Y′1]3∗1(7)\left[ \begin{matrix} u \\ v \\ 1 \\ \end{matrix} \right] _{3*1} = \left[ \begin{matrix} \frac{1}{dx} & 0 & {u_0} \\ 0 & \frac{1}{dy} & {v_0} \\ 0 & 0 & 1 \\ \end{matrix} \right]_{3*3} . \left[ \begin{matrix} X' \\ Y' \\ 1 \\ \end{matrix} \right] _{3*1} \tag{7} ⎣⎡uv1⎦⎤3∗1=⎣⎡dx1000dy10u0v01⎦⎤3∗3.⎣⎡X′Y′1⎦⎤3∗1(7)
联立式(5)(7),将X′X'X′、Y′Y'Y′用XcX_cXc、YcY_cYc表示得到:
[uv1]3∗1=1Zc[1dx0u001dyv0001]3∗3.[f000f0001]3∗3.[XcYcZc]3∗1(8)\left[ \begin{matrix} u \\ v \\ 1 \\ \end{matrix} \right] _{3*1} = \frac{1}{Z_c} \left[ \begin{matrix} \frac{1}{dx} & 0 & {u_0} \\ 0 & \frac{1}{dy} & {v_0} \\ 0 & 0 & 1 \\ \end{matrix} \right]_{3*3} . \left[ \begin{matrix} f & 0 & 0 \\ 0 & f &0 \\ 0 & 0 & 1 \\ \end{matrix} \right]_{3*3} . \left[ \begin{matrix} X_c \\ Y_c \\ Z_c \\ \end{matrix} \right] _{3*1} \tag{8} ⎣⎡uv1⎦⎤3∗1=Zc1⎣⎡dx1000dy10u0v01⎦⎤3∗3.⎣⎡f000f0001⎦⎤3∗3.⎣⎡XcYcZc⎦⎤3∗1(8)
再将式(1)与式(8)联立,将XcX_cXc、YcY_cYc用XwX_wXw、YwY_wYw表示:
[uv1]3∗1=1Zc[1dx0u001dyv0001]3∗3.[f0000f000010]3∗4.[R3∗3t3∗101]4∗4.[XwYwZw1]4∗1(9)\left[ \begin{matrix} u \\ v \\ 1 \\ \end{matrix} \right] _{3*1} = \frac{1}{Z_c} \left[ \begin{matrix} \frac{1}{dx} & 0 & {u_0} \\ 0 & \frac{1}{dy} & {v_0} \\ 0 & 0 & 1 \\ \end{matrix} \right]_{3*3} . \left[ \begin{matrix} f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0\\ \end{matrix} \right]_{3*4} . \left[ \begin{matrix} R_{3*3} & t_{3*1}\\ 0 & 1\\ \end{matrix} \right]_{4*4}. \left[ \begin{matrix} X_w \\ Y_w \\ Z_w \\ 1 \\ \end{matrix} \right] _{4*1} \tag{9} ⎣⎡uv1⎦⎤3∗1=Zc1⎣⎡dx1000dy10u0v01⎦⎤3∗3.⎣⎡f000f0001000⎦⎤3∗4.[R3∗30t3∗11]4∗4.⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤4∗1(9)
令fxf_xfx = f/dxf/dxf/dx,fyf_yfy=f/dyf/dyf/dy,则式(9)可简化为:
[uv1]3∗1=1Zc[fx0u000fyv000010]3∗4.[R3∗3t3∗101]4∗4.[XwYwZw1]4∗1(10)\left[ \begin{matrix} u \\ v \\ 1 \\ \end{matrix} \right] _{3*1} = \frac{1}{Z_c} \left[ \begin{matrix} f_x & 0 & {u_0} & 0 \\ 0 & f_y & {v_0} & 0 \\ 0 & 0 & 1 & 0 \\ \end{matrix} \right]_{3*4}. \left[ \begin{matrix} R_{3*3} & t_{3*1}\\ 0 & 1\\ \end{matrix} \right]_{4*4}. \left[ \begin{matrix} X_w \\ Y_w \\ Z_w \\ 1 \\ \end{matrix} \right] _{4*1} \tag{10} ⎣⎡uv1⎦⎤3∗1=Zc1⎣⎡fx000fy0u0v01000⎦⎤3∗4.[R3∗30t3∗11]4∗4.⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤4∗1(10)
式(10)中fxf_xfx、fyf_yfy、u0u_0u0、v0v_0v0称为相机的内参数,当相机给定时是固定的;RRR和ttt为相机的外参数,反映的是世界坐标系与相机坐标系之间的关系。
参考文献:
1、高翔,视觉slam十四讲[M]
SLAM学习入门(1)针孔相机模型公式推导相关推荐
- 转g代码教程_图深度学习入门教程(九)——图滤波神经网络模型
本教程是一个系列免费教程,争取每月更新2到4篇.(由于精力有限,近期停止了一段时间,在此向大家道个歉). 主要是基于图深度学习的入门内容.讲述最基本的基础知识,其中包括深度学习.数学.图神经网络等相关 ...
- 几种相机模型:针孔相机模型、双目相机模型、RGB-D相机——SLAM学习笔记5
几种相机模型:针孔相机模型.双目相机模型.RGB-D相机 针孔相机模型 双目相机模型 RGB-D相机模型 针孔相机模型 针孔相机是最简单的相机,很多相机也可以看作是针孔相机来进行处理.如图1所示,空间 ...
- 2023年的深度学习入门指南(14) - 不能只关注模型代码
2023年的深度学习入门指南(14) - 不能只关注模型代码 最近,有一张大模型的发展树非常流行: 这个图是相当不错的,对于加深对于Transformer模型编码器.解码器作用的理解,模型的开源和闭源 ...
- 【多传感融合】优达学城多传感融合学习笔记(一)——针孔相机模型
针孔相机模型 目录 针孔相机模型 针孔相机成像模型 镜头和光圈 枕形畸变和桶形畸变 图像标定和校准概念 三维坐标系到像素坐标系的转换 图像传感器和拜耳阵列(Bayer Pattern) CCD vs. ...
- 视觉SLAM——针孔相机模型 相机标定原理 双目相机模型 深度相机对比
前言 本博客为主要学习<视觉SLAM十四讲>第5讲.<机器人学的状态估计>第6章6.4.1透视相机.<多视图几何>第5章摄像头模型等SLAM内容的总结与整理. 主要 ...
- 2023年的深度学习入门指南(6) - 在你的电脑上运行大模型
2023年的深度学习入门指南(6) - 在你的电脑上运行大模型 上一篇我们介绍了大模型的基础,自注意力机制以及其实现Transformer模块.因为Transformer被PyTorch和Tensor ...
- [TensorFlow深度学习入门]实战七·简便方法实现TensorFlow模型参数保存与加载(ckpt方式)
[TensorFlow深度学习入门]实战七·简便方法实现TensorFlow模型参数保存与加载(ckpt方式) 个人网站–> http://www.yansongsong.cn TensorFl ...
- AI深度学习入门与实战21 文本分类:用 Bert 做出一个优秀的文本分类模型
在上一讲,我们一同了解了文本分类(NLP)问题中的词向量表示,以及简单的基于 CNN 的文本分类算法 TextCNN.结合之前咱们学习的 TensorFlow 或者其他框架,相信你已经可以构建出一个属 ...
- 重磅! SLAM从入门到精通系统教程汇总
3D视觉工坊相继推出了<透彻刨析室内.室外激光SLAM关键算法原理.代码与实战>.<激光-视觉-IMU-GPS融合SLAM算法:理论推导.代码讲解和实战>.<彻底搞懂基于 ...
- SLAM学习--视觉slam学习教材推荐(附相关技术文档下载链接)
(理论上看完前三本,足够掌握视觉slam的所有理论知识,实践部分参考各种开源代码) 一.<视觉slam十四讲>,高翔,清华大学出版社,(目前已出第二版,优先推荐) 以上教材,其实是基于国外 ...
最新文章
- 使用Google 官方的控件SwipeRefreshLayout实现下拉刷新功能
- MPB:扬州大学王梦芝组-反刍动物瘤胃原虫18S rRNA测序分析技术
- MSDN-9月杂志推荐
- dubbo k8s 服务发现_服务化改造实践(二)| Dubbo + Kubernetes-阿里云开发者社区
- linux系统下cpu如何测试,Linux 系统下如何查看CPU个数
- Apple 的CEO 吹响了战斗的号角啦!
- nvm-windows 安装后,node 命令报错
- Java并发编程学习笔记(二)——对象的共享
- Python多人聊天室
- Java开发需要的官方文档
- 信捷PLC以太网连接编程软件
- IntelliJ IDEA主题选择
- 跨时空的相遇~为她制作一个专属的QQ空间相册(附源代码)
- Inspect(VB.NET、C#版)软件的的下载和使用
- 解决win10控制面板闪退问题
- 使用 Entrust 扩展包在 Laravel 5 中实现 RBAC 权限管理与安装配置
- 「TCG 规范解读」初识嵌入式和工业工作组
- 怎么样导包测试JavaWeb代码?
- 各行业不一样,WMS该如何入手?
- 惠普微波仪器的奠基人 硅谷首位华人工程師 - 邝达璇