搞视觉SLAM的,如果对这个关系都不是很清楚的话,那说明你太忙了,忙于写着业务代码,却忘了原理才是我们业务的骨架,不搞清楚这些,升职加薪无望啊,那我们就来看看,这些极具价值的知识究竟是什么东西。

计算机视觉领域中常见的四个坐标系:像素坐标系、图像坐标系,相机坐标系,世界坐标系。

像素坐标系(u,v)(u,v)(u,v)
图像坐标系(x,y)(x,y)(x,y)
相机坐标系(Xc,Yc,Zc)(X_c,Y_c,Z_c)(Xc​,Yc​,Zc​)
世界坐标系(Xw,Yw,Zw)(X_w,Y_w,Z_w)(Xw​,Yw​,Zw​)

1. 像素坐标系

如下图所示,像素坐标系u-v的原点为O0O_0O0​,横坐标u和纵坐标v分别是图像所在的行和列,在视觉处理库OpenCV中,u对应x,v对应y。

2. 图像坐标系

如图所示,图像坐标系x-y的原点是O1O_1O1​,为像素坐标系的中点:

从上图可知,O1O_1O1​在u-v坐标系下的坐标,假设dxd_xdx​和dyd_ydy​分别表示每个像素在横轴x和纵轴y的物理尺寸,单位为毫米/像素,O1O_1O1​在图像坐标系和在像素坐标系的坐标的关系是:
u=xdx+u0(1)u=\frac{x}{d_x}+u_0\tag{1}u=dx​x​+u0​(1)
v=ydy+v0(2)v=\frac{y}{d_y}+v_0\tag{2}v=dy​y​+v0​(2)

假设物理坐标系中的单位为毫米,那么dx的单位为毫米/像素,dx,dyd_x,d_ydx​,dy​表示感光芯片上像素的实际大小,是连接像素坐标系和真实尺寸坐标系的。u0,v0u_0,v_0u0​,v0​表示的是图像的中心像素坐标和图像圆点像素坐标之间相差的横向和纵向像素数。得出这个公式后我们可以运用线性代数的知识把方程用矩阵形式表示:
[uv1]=[1dx0u001dyv0001][xy1](3)\begin{bmatrix} u\\v\\1 \end{bmatrix}= \begin{bmatrix} \frac{1}{d_x}&0&u_0\\0&\frac{1}{d_y}&v_0\\0&0&1 \end{bmatrix} \begin{bmatrix} x\\y\\1 \end{bmatrix} \tag{3} ⎣⎡​uv1​⎦⎤​=⎣⎡​dx​1​00​0dy​1​0​u0​v0​1​⎦⎤​⎣⎡​xy1​⎦⎤​(3)
或者
[xy1]=[dx0−u0dx0dy−v0dy001][uv1](4)\begin{bmatrix} x\\y\\1 \end{bmatrix}= \begin{bmatrix} d_x&0&-u_0d_x\\0&d_y&-v_0d_y\\0&0&1 \end{bmatrix} \begin{bmatrix} u\\v\\1 \end{bmatrix} \tag{4} ⎣⎡​xy1​⎦⎤​=⎣⎡​dx​00​0dy​0​−u0​dx​−v0​dy​1​⎦⎤​⎣⎡​uv1​⎦⎤​(4)

3. 相机坐标系

相机坐标系与图像坐标系的关系如下图:

脑补各种三角形相似之后可得:
ABoC=XCx=AOCoOC=ZCf=PBpC=YCy(5)\frac{AB}{oC}= \frac{X_C}{x}= \frac{AO_C}{oO_C}= \frac{Z_C}{f}= \frac{PB}{pC}= \frac{Y_C}{y} \tag{5} oCAB​=xXC​​=oOC​AOC​​=fZC​​=pCPB​=yYC​​(5)
      结合公式(1)和(2),可以得到:
u=xdx+u0=XCZCdxf+u0⟹fxXCZC+u0(6)u=\frac{x}{d_x}+u_0=\frac{X_C}{Z_Cd_x}f+u_0\tag{6} \\\Longrightarrow f_x\frac{X_C}{Z_C}+u_0 u=dx​x​+u0​=ZC​dx​XC​​f+u0​⟹fx​ZC​XC​​+u0​(6)
v=ydy+v0=YCZCdyf+v0⟹fyYCZC+v0(7)v=\frac{y}{d_y}+v_0=\frac{Y_C}{Z_Cd_y}f+v_0\tag{7} \\\Longrightarrow f_y\frac{Y_C}{Z_C}+v_0 v=dy​y​+v0​=ZC​dy​YC​​f+v0​⟹fy​ZC​YC​​+v0​(7)
      其中,fx、fyf_x、f_yfx​、fy​是相机焦距fff除以dx、dyd_x、d_ydx​、dy​得到的值,还记得前面说的吗?

dx、dyd_x、d_ydx​、dy​单位为毫米/像素,dx,dyd_x,d_ydx​,dy​表示感光芯片上像素的实际大小,是连接像素坐标系和真实尺寸坐标系的

,即有fx=fdx,fy=fdyf_x = \frac{f}{d_x},f_y = \frac{f}{d_y}fx​=dx​f​,fy​=dy​f​,这就是我们经常在内参矩阵中看到的fx、fyf_x、f_yfx​、fy​参数来源。把公式(6)、(7)写成矩阵的形式,可得:

[uv1]=[fx0u00fyv0001][XCZCYCZC1](8)\begin{bmatrix} u\\v\\1 \end{bmatrix}= \begin{bmatrix} f_x&0&u_0\\0&f_y&v_0\\0&0&1 \end{bmatrix} \begin{bmatrix} \frac{X_C}{Z_C}\\\frac{Y_C}{Z_C}\\1 \end{bmatrix} \tag{8} ⎣⎡​uv1​⎦⎤​=⎣⎡​fx​00​0fy​0​u0​v0​1​⎦⎤​⎣⎡​ZC​XC​​ZC​YC​​1​⎦⎤​(8)

接下来,是最后一个坐标系:世界坐标系。

4. 世界坐标系

默认两个坐标系都是右手坐标系,从相机坐标系到世界坐标系属于刚体变换,即物体不会发生形变,主要依靠旋转变换和平移变换。

关于这部分,我就不过多阐述了,感兴趣的童鞋可以参考二维平移旋转过程,最后得到世界坐标系和相机坐标系之间的关系是:

[XCYCZC]=R[XWYWZW]+T(9)\begin{bmatrix} X_C\\Y_C\\Z_C \end{bmatrix}= R \begin{bmatrix} X_W\\Y_W\\Z_W \end{bmatrix}+T \tag{9} ⎣⎡​XC​YC​ZC​​⎦⎤​=R⎣⎡​XW​YW​ZW​​⎦⎤​+T(9)
      其中,XC,YC,ZCX_C,Y_C,Z_CXC​,YC​,ZC​为相机坐标,XW,YW,ZWX_W,Y_W,Z_WXW​,YW​,ZW​为世界坐标,RRR为旋转矩阵,TTT为平移矩阵。

5. 总结

综上,从像素坐标系到世界坐标系经过了三次变换:

  • 像素与像平面
  • 投影关系
  • 相机与世界

从公式推导看,其公式为:

ZC[uv1]=[1dx0u001dyv0001][f0000f000010][Rt01][XCYCZC1](10)Z_C\begin{bmatrix} u\\v\\1 \end{bmatrix}= \begin{bmatrix} \frac{1}{d_x}&0&u_0\\0&\frac{1}{d_y}&v_0\\0&0&1 \end{bmatrix} \begin{bmatrix} f&0&0&0\\0&f&0&0\\0&0&1&0 \end{bmatrix} \begin{bmatrix} R&t\\0&1 \end{bmatrix} \begin{bmatrix} X_C\\Y_C\\Z_C\\1 \end{bmatrix} \tag{10} ZC​⎣⎡​uv1​⎦⎤​=⎣⎡​dx​1​00​0dy​1​0​u0​v0​1​⎦⎤​⎣⎡​f00​0f0​001​000​⎦⎤​[R0​t1​]⎣⎢⎢⎡​XC​YC​ZC​1​⎦⎥⎥⎤​(10)

对应如上变换,其关系如下:

转换成我们常用的形式,就是:
ZC[uv1]=[fx0u000fyv000010]⏟内参[Rt01]⏟外参[XCYCZC1](11)Z_C\begin{bmatrix} u\\v\\1 \end{bmatrix}= \underbrace{ \begin{bmatrix} f_x&0&u_0&0\\0&f_y&v_0&0\\0&0&1&0 \end{bmatrix} }_{\text{内参}} \underbrace{ \begin{bmatrix} R&t\\0&1 \end{bmatrix} }_{\text{外参}} \begin{bmatrix} X_C\\Y_C\\Z_C\\1 \end{bmatrix} \tag{11} ZC​⎣⎡​uv1​⎦⎤​=内参⎣⎡​fx​00​0fy​0​u0​v0​1​000​⎦⎤​​​外参[R0​t1​]​​⎣⎢⎢⎡​XC​YC​ZC​1​⎦⎥⎥⎤​(11)

6. 关系图

大家还有疑问的话,可以认真研究下图,懂了之后能解决很多心里的疑问(点击查看高清大图):

7. Jacobian

现有内参矩阵是K,K是:
K=[fx0cx0fycy001]K= \begin{bmatrix} fx & 0 & cx\\ 0 & fy & cy\\ 0 & 0 & 1 \end{bmatrix} K=⎣⎡​fx00​0fy0​cxcy1​⎦⎤​
现有三维坐标点p=[pxpypz]Tp=\begin{bmatrix} px & py & pz \end{bmatrix} ^Tp=[px​py​pz​]T,其在相机平面上投影的像素坐标点是(u,v)(u,v)(u,v),投影函数设为hhh,则hhh可表示成:
h(p)=h[pxpypz]=[cx+fx∗px/pzcy+fy∗py/pz]h(p)=h\begin{bmatrix} px \\ py \\ pz \end{bmatrix}=\begin{bmatrix} cx+fx*px/pz \\ cy+fy*py/pz \end{bmatrix} h(p)=h⎣⎡​pxpypz​⎦⎤​=[cx+fx∗px/pzcy+fy∗py/pz​]

其Jacobian矩阵是:
∂h(p)∂p=[fx/pz0−fx∗px/pz20fy/pz−fy∗py/pz2]\frac{\partial h(p)}{\partial p} = \begin{bmatrix} fx/pz&0&-fx*px/pz^2 \\ 0&fy/pz&-fy*py/pz^2 \end{bmatrix} ∂p∂h(p)​=[fx/pz0​0fy/pz​−fx∗px/pz2−fy∗py/pz2​]

参考:
1.世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换
2.世界坐标系和相机坐标系,图像坐标系的关系
3.单目和多目视觉统一标定
4.LaTeX 特殊符号、加帽子符号、横线和波浪线

像素坐标系、图像坐标系、相机坐标系和世界坐标系的关系(简单易懂版)相关推荐

  1. 像素坐标系、图像坐标系、相机坐标系、世界坐标系

    像素坐标系.图像坐标系.相机坐标系.世界坐标系 文章目录 像素坐标系.图像坐标系.相机坐标系.世界坐标系 1.图像坐标系 → \rightarrow →​像素坐标系 2.图像坐标系 → \righta ...

  2. 关于世界坐标系,相机坐标系,图像坐标系,像素坐标系的一些理解

    关于世界坐标系,相机坐标系,图像坐标系,像素坐标系的一些理解 前言 一.各坐标系的含义 二.坐标系转换 1.世界坐标系与相机坐标系(旋转与平移) 2.相机坐标系与图像坐标系(透视) 3.图像坐标系与像 ...

  3. slam十四讲,第五讲中相机坐标系,像素平面坐标系,世界坐标系,归一化坐标系总结

    #笔记,方便日后忘记回看,仅总结,具体推导回看十四讲 先上图: 如图,现实世界中有一个P点和一个相机(光心),描述这个P点的空间坐标首先得有一个坐标系,那么以光心为原点O建一个坐标系,叫相机坐标系. ...

  4. 世界坐标系/相机坐标系/图像坐标系 转换

    目录 一.各坐标系简要介绍 二.坐标系转换 2.1 世界坐标系转为相机坐标系 2.2 相机坐标系转为物理图像坐标系 2.3 物理图像坐标系转为图像坐标系 2.4 总结 2.5 为什么要使用齐次坐标 参 ...

  5. 相机标定 2D图像到3D坐标转换 像素坐标转到世界坐标时相机坐标系中的Zc值求解:线结构光平面标定法

    线激光平面拟合图像 在单目视觉中会丢失掉焊缝的深度信息,为了后续求解焊缝的世界坐标则需要先求解出焊缝的深度信息才可以进行坐标计算. 在α和β平面分别对标定板进行拍照多幅图片(我采集了13幅)进行相机标 ...

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

    例子 如下图所示,右边的坐标系是相机坐标系,左边的是世界坐标系. 假设他们只有 x 轴方向上的平移. 相机坐标系原点在相机坐标系下的坐标是 (0,0,0), 假设相机坐标系在世界坐标系沿 x 轴正方向 ...

  7. 小杨说事-基于Halcon的多相机坐标系统一原理个人理解

    大家好呀,时隔两年小杨说事系列又开始更新了,打工人在苦逼的自动化行业里面挣扎着,工作了三年看到还有很多朋友在学习机器视觉,尤其是定位类型项目,旋转中心,分离轴,多相机标定等概念还是剪不断,里还乱的状态 ...

  8. 【Android Camera1】Camera1 对焦(一) UI坐标系和相机坐标系

    一.简介 本篇文章为对焦系列文章的第一篇:主要讲解UI坐标系和相机坐标系.后续其他相关文章如下: 相关文章: Camera1 对焦(二) 对焦区域计算的几种方式(Touch to Focus) Cam ...

  9. 【自动驾驶】16.计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换

    本篇博客为转载,我对其中的细节添加了一些说明. 原文链接:https://blog.csdn.net/chentravelling/article/details/53558096 0.前言 最近整理 ...

最新文章

  1. 各类常见的网站检查工具
  2. Zepto.js简介
  3. SQL Server 分区表的创建方法与管理
  4. win7安装mysql8.0创建用户_CentOS如何安装MySQL8.0、创建用户并授权的详细步骤
  5. JavaScript学习随记——数组二
  6. UNIX/Linux 系统管理技术手册阅读(二)
  7. 反向传播网络(BP 网络)
  8. 软件版本GA,RC,alpha,beta,Build 含义
  9. 数据库导入导出的几种方式
  10. Apache ShenYu 网关正式支持 Dubbo3 服务代理
  11. uniapp开发微信小程序教程(一)
  12. java 线程 设计模式_Java多线程设计模式(四)
  13. wpf 如何让当前窗口隐藏
  14. 尚雯婕个唱化身宫廷芭比娃娃
  15. 只需一个损失函数,一个超参数即可压缩BERT,MSRA提模型压缩新方法
  16. window安装mysql默认密码忘记_MySQL忘记root密码的处理办法及安装windows服务
  17. 关于ADC芯片的选型
  18. 【Linux】内核驱动篇九--设备模型
  19. 【Linux】Linux下怎么下载安装Chrome?
  20. 基于高德SDK实现跑步时轨迹渐变功能

热门文章

  1. 场景分享|40多种常见的电子签应用场景汇总
  2. MATLAB去雾的算法及实现
  3. alpha融合---PS制作带连续alpha值的png图片
  4. keepalived启动失败问题记录
  5. 安卓Android手机浏览器访问本地SD卡的HTML网页,要用file
  6. php+微信接口开发的微信分销平台拆分讲解(一)微信oauth2接口
  7. 哪个版本android优化触屏,安卓界最强优化工具超级触控,终于更新了全新体验...
  8. 台式电脑计算机为什么没有EF盘,打开电脑,D、E、F盘不见了,怎么处理?
  9. windows10系统安装nvm切换电脑node版本
  10. esp32 cam 1.44寸TFT彩屏 ST7735S驱动 TFT_eSPI库驱动