Deal with Real World? Rotation & Translation

需要指出的是,在perspective projection这一步,我们处理的点是在以相机为参照系的三维世界坐标系中的,也就是说我们还需要把真实三维世界中的点( WP {}^{W}\!P)转化到以相机为参照系的三维世界坐标系中( CP {}^{C}\!P)。我们可以通过变换坐标系的方法来达到目的,而变换方法为旋转(rotate)和移动(translation)。

坐标系B到A的转换

假设两个坐标系A, B。在三维世界上有一个点P,在坐标系A上观察时,我们称点P为 AP {}^{A}\!P,同理在坐标系B上称之为 BP {}^{B}\!P。如果已知 BP {}^{B}\!P需要求出 AP {}^{A}\!P,我们可以通过矩阵乘法来达到目的:

AP=ATBBP

{}^{A}\!P={}^{A}\!T_B{}^{B}\!P
其中 ATB {}^{A}\!T_B被称为变换矩阵(transformation matrix)。

那该如何得到 ATB {}^{A}\!T_B呢?

首先,我们需要了解如何通过一系列的旋转和移动来进行坐标系变换。 假设坐标系B沿坐标轴x旋转了 α \alpha,沿坐标轴y旋转了 β \beta,沿z旋转了 θ \theta;并且沿坐标轴x平移了10个单位(unit)。

那么 ATB {}^{A}\!T_B可以写成:

ATB=[ARBAtB]

{}^{A}\!T_B=\left[ \begin{array}{c|c} {}^{A}\!R_B^{A}\!t_B \end{array} \right]
其中:

ARB=Rot(z,θ)Rot(y,β)Rot(x,α)

{}^{A}\!R_B=Rot(z, \theta)Rot(y, \beta)Rot(x, \alpha)

AtB=⎡⎣⎢⎢1000⎤⎦⎥⎥

{}^{A}\!t_B= \begin{bmatrix} 10 \\ 0 \\ 0 \\ \end{bmatrix}

Rot(x,α)=⎡⎣⎢⎢1000cosαsinα0−sinαcosα⎤⎦⎥⎥

Rot(x, \alpha)= \begin{bmatrix} 1&0&0 \\ 0&cos\alpha&-sin\alpha \\ 0&sin\alpha&cos\alpha \\ \end{bmatrix}

Rot(y,β)=⎡⎣⎢⎢cosβ0−sinβ010sinβ0cosβ⎤⎦⎥⎥

Rot(y, \beta)= \begin{bmatrix} cos\beta&0&sin\beta \\ 0&1&0 \\ -sin\beta&0&cos\beta \\ \end{bmatrix}

Rot(z,θ)=⎡⎣⎢⎢cosθsinθ0−sinθcosθ0001⎤⎦⎥⎥

Rot(z, \theta)= \begin{bmatrix} cos\theta&-sin\theta&0 \\ sin\theta&cos\theta&0 \\ 0&0&1 \\ \end{bmatrix}

坐标系A到B的转换

如果从坐标系A到B呢?我们很容易得到:

BP=(ATB)−1AP

{}^{B}\!P=({}^{A}\!T_B)^{-1}{}^{A}\!P
要知道旋转矩阵 ARB {}^{A}\!R_B是正交矩阵(orthonomal matrix),所以其逆矩阵等于其转置矩阵,考虑到

AP=ARB(BP)+AtB

{}^{A}\!P={}^{A}\!R_B({}^{B}\!P)+{}^{A}\!t_B
简化写法:

AP=R(BP)+t

{}^{A}\!P=R({}^{B}\!P)+t

RT(AP−t)=BP

R^T({}^{A}\!P-t)={}^{B}\!P
或者:

BP=(RT)AP−RTt

{}^{B}\!P=(R^T){}^{A}\!P-R^Tt
所以得到:

ATB=(BTA)−1=[(BRA)T]−(BRA)T(BtA)

{}^{A}\!T_B=({}^{B}\!T_A)^{-1}=[({}^{B}\!R_A)^T]-({}^{B}\!R_A)^T({}^{B}\!t_A)
这就是两个坐标轴的转换矩阵之间的关系。

另一种转换方法

事实上, ATB=[ARBAtB] {}^{A}\!T_B=\left[ \begin{array}{c|c} {}^{A}\!R_B^{A}\!t_B \end{array} \right] 蕴涵了很重要的几何关系。 ARB {}^{A}\!R_B上的每一列都代表了相对于坐标系A,B坐标系的单位向量,所以又可以写成:

ARB=[AxBAyBAzB]

{}^{A}\!R_B= \begin{bmatrix}{}^{A}\!x_B^{A}\!y_B^{A}\!z_B\end{bmatrix}
而 ATB {}^{A}\!T_B 的第四列 AtB {}^{A}\!t_B 是坐标系B的原点在坐标系A中的坐标。
这样的话,可以由观察得到变换矩阵。

Summary — Camera Matrix

所以,image formation pipeline可以由三个步骤组成,分别为:

最终,我们可以把公式写成:

⎡⎣⎢⎢⎢imximy1⎤⎦⎥⎥⎥=⎡⎣⎢⎢x/ωy/ω1⎤⎦⎥⎥

\begin{bmatrix}{}^{im}\!x\\{}^{im}\!y\\1\end{bmatrix}=\begin{bmatrix}x/\omega\\y/\omega\\1\end{bmatrix}

⎡⎣⎢⎢xyω⎤⎦⎥⎥=⎡⎣⎢⎢⎢f/sx000f/sy0oxoy1⎤⎦⎥⎥⎥[CRCt]⎡⎣⎢⎢⎢⎢XWYWZW1⎤⎦⎥⎥⎥⎥

\begin{bmatrix}x\\y\\\omega\end{bmatrix}=\begin{bmatrix}f/s_x&0&o_x\\0&f/s_y&o_y\\0&0&1\end{bmatrix}\begin{bmatrix}{}^{C}\!R^{C}\!t\end{bmatrix} \begin{bmatrix}X_W\\Y_W\\Z_W\\1\end{bmatrix}
或者更简单的写法:

⎡⎣⎢⎢xyω⎤⎦⎥⎥=M⎡⎣⎢⎢⎢⎢XWYWZW1⎤⎦⎥⎥⎥⎥

\begin{bmatrix}x\\y\\\omega\end{bmatrix}=M\begin{bmatrix}X_W\\Y_W\\Z_W\\1\end{bmatrix}
M就是相机矩阵(camera matrix),大小为3*4。这个矩阵也是我们在图像转换中需要求得的参数。

下一篇文章将讲述Homography的基本概念,以及如何用python实现几种简单的图像变换。

Image Formation Pipeline --- 从2D到3D(二)相关推荐

  1. 三维球体换算到二维_单图像三维重建、2D到3D风格迁移和3D DeepDream

    项目网址:http://hiroharu-kato.com/projects_en/neural_renderer.html 代码网址:https://github.com/hiroharu-kato ...

  2. 【人体姿态估计综述(2D、3D)】

    人体姿态估计综述(2D.3D) 一.任务描述 二.2D人体姿态估计 2.1 2D单人姿态估计 2.1.1 回归方法 2.1.2 heatmap方法 2.2 2D多人姿态估计 2.2.1 自顶向下 2. ...

  3. 2D和3D机器视觉检测技术的优势和局限性

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|新机器视觉 机器视觉一般由工业光源,图像采集单元,图像处理 ...

  4. 一文为你详解2D与3D人脸识别有什么区别?

    最近业界内刮起了一股"人脸识别安全"的大讨论,小到个人大到超市以及银行,都在使用这个刷脸认证或支付,说它好吧,确实解决了无接触,快速高效等问题,你说它不好吧,也是有原因的,比如最明 ...

  5. 计算机图形学应用场景,计算机图形学: 应用Java 2D和3D

    摘要: <计算机科学丛书·计算机图形学应用Java 2D和3D>提供了一个完整而权威的计算机图形学介绍,它并不需要低层次的编程或高深的数学背景.作者权衡了在软件和硬件方面的最新进展,结合高 ...

  6. 2d的公式_用深度学习实现 2D 到 3D 的转换

    随着 5G 时代的到来,VR 端应用呈爆发式增长,3D 内容作为构建 VR 生态的主力输出一直深受广大用户的追捧和喜爱.针对目前 3D 内容过少,质量不高.生产昂贵等现状,爱奇艺作为国内领先的互联网视 ...

  7. 保姆级解读!CSS属性transform变形+2D转换+3D转换实例+代码+解析——Web前端系列学习笔记

    文章目录 transfrom 2D转换 案例代码 效果图 元素变形原点 3D转换 3D转换--案例 案例代码 transfrom transform,翻译成中文的含义是"改变,使-变形:转换 ...

  8. html笔记(五)2D、3D、3D动画

    大标题 小节 一.2D 1. css3 渐变的语法及应用 2. 动画过渡:transition 3. 2D转换属性:transform 二.3D 1. 3D转换 2. 3D视距 3. 3D翻转方法 4 ...

  9. 使用Disentangling形式的损失函数回归2D和3D目标框

    本文介绍一篇 ICCV 2019 的论文『 Disentangling Monocular 3D Object Detection』.详细信息如下: 论文链接:https://arxiv.org/ab ...

最新文章

  1. python三层装饰器-python开发学习day16 (三层装饰器;迭代器)
  2. View和ViewGroup常用方法
  3. 没有他,就没有我们现在的WebRTC
  4. excel的mysql语言,Mysql中文乱码及导出sql语句和Excel的相关解决方法
  5. 小创意,大世界——休闲游戏开发者指南
  6. 如何在缺乏商业项目经验的前提下成功通过面试,兼说我如何甄别非商业项目经验...
  7. PAT—1082 射击比赛(20)
  8. pytorch---之halfTensor
  9. 创建项目连接错误_EF6连接Postgresql数据库
  10. windows优化大师怎么用_曾经辉煌的装机必备软件,你用过几个?
  11. USB转RS485/RS422接线说明
  12. 雨滴网易云播放器html代码,【问题求助】这种代码的播放器怎么关联网易云?...
  13. java 清除stdin缓冲区_使用fflush(stdin)
  14. php 加密网页,PHP_解密七种html网页加密解密法,自己辛苦做出来的内容被别人 - phpStudy...
  15. 10电脑睡眠后自动关机怎么回事 win_win10电脑睡眠变关机怎么解决_win10睡眠变自动关机的处理方法-系统城...
  16. TSMC HPC工艺介绍
  17. Outlook无法启动一直显示“正在启动”的解决方法
  18. Axure 进阶 | 制作携程网酒店“入住日期”与“退房日期”控件
  19. Spring boot集成Redis实现sessions共享时,sessions过期时间问题分析
  20. ASW3410设计说明|双通道 2切1/1切2 USB3.1 多路切换器设计|USB3.1/2.0双向切换方案

热门文章

  1. Linux命令--pushd和popd
  2. 用MATLAB画荷花+源代码+仿真结果
  3. 打乱一个文件 shuf
  4. js 对象转数组 的方法
  5. SqlServer2005数据库紧急恢复案例
  6. 我国中小学生linux启蒙教育起步了吗?
  7. 我用 10000 张图片合成我们美好的瞬间
  8. 本地 wordpress安装+php运行环境
  9. winserver2012r2 jihuo码 永久jihuo
  10. linux中vi后如何退出命令,linux vi保存退出命令 (如何退出vi)