【必备知识】 三维空间/坐标转换/相机知识

这篇具有很好参考价值的文章主要介绍了【必备知识】 三维空间/坐标转换/相机知识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【必备知识】📷 三维空间/坐标转换/相机知识

以下内容包含了2D坐标与3D坐标系之间的转换以及关于相机场的基础知识,理解这部分内容可以更快入门SLAM相关、多视角合成、三维空间变换等内容。

1. 相机标定

1.1 动机

  • 照相机制造过程中的一些涉及到透镜精密以及组装工艺等原因需要对图像进行相应的矫正。如下所示:

三维坐标转换,必备知识,机器学习,人工智能,视频,计算机视觉,深度学习,人机交互,vr

  • 需要建立世界坐标系到图像坐标系之间的映射关系从而保证后续的任务的进行。

1.2 张氏标定法

坐标系转换原理

三维坐标转换,必备知识,机器学习,人工智能,视频,计算机视觉,深度学习,人机交互,vr

其中的四个坐标系分别是世界坐标系/相机坐标系/图像坐标系/像素坐标系,各种坐标系之间可以通过转换公式联系起来,其中,相机坐标系就是观察空间,将世界坐标系的真实信息变换到相机坐标系的观察空间下就是取景变换,相机它自己位于观察空间的坐标系原点,沿z轴正向观察,x轴指向相机右侧,y轴指向相机正上方。取景变换(view transform),对应的矩阵称作观察矩阵(view matrix)。
三维坐标转换,必备知识,机器学习,人工智能,视频,计算机视觉,深度学习,人机交互,vr

总的来说就是四个坐标系及其之间的联系:

世界坐标系通过平移旋转得到观察空间坐标系也就是相机坐标系。相机坐标系通过成像模型中的相似三角形原理得到图像坐标系。图像坐标系通过平移和缩放得到像素坐标系。
三维坐标转换,必备知识,机器学习,人工智能,视频,计算机视觉,深度学习,人机交互,vr

1.3 世界坐标系到观察空间即相机坐标系/取景变换(view transform)

(本质上就是欧拉角)外参构建平移关系
通过平移和旋转(即刚体变换)对坐标系进行相应的变换,刚体变换不改变形状变换:

三维坐标转换,必备知识,机器学习,人工智能,视频,计算机视觉,深度学习,人机交互,vr

通过上图可以得到下述的坐标系之间的转换公式:

{ X c = X w Y c = Y w × cos ⁡ θ + Z w × sin ⁡ θ Z c = − Y w × sin ⁡ θ + Z w × cos ⁡ θ \left\{\begin{array}{l}X_c=X_w \\ Y_c=Y_w \times \cos \theta+Z_w \times \sin \theta \\ Z_c=-Y_w \times \sin \theta+Z_w \times \cos \theta\end{array}\right. Xc=XwYc=Yw×cosθ+Zw×sinθZc=Yw×sinθ+Zw×cosθ

进一步将其转换为以x轴的矩阵的形式:

[ X c Y c Z c ] = [ 1 0 0 0 cos ⁡ θ sin ⁡ θ 0 − sin ⁡ θ cos ⁡ θ ] [ X w Y w Z w ] = R x [ X w Y w Z w ] \left[\begin{array}{c}X_c \\ Y_c \\ Z_c\end{array}\right]=\left[\begin{array}{ccc}1 & 0 & 0 \\ 0 & \cos \theta & \sin \theta \\ 0 & -\sin \theta & \cos \theta\end{array}\right]\left[\begin{array}{c}X_w \\ Y_w \\ Z_w\end{array}\right]=R_x\left[\begin{array}{c}X_w \\ Y_w \\ Z_w\end{array}\right] XcYcZc = 1000cosθsinθ0sinθcosθ XwYwZw =Rx XwYwZw

同理可得以y轴和z轴的矩阵的形式:

[ X c Y c Z c ] = [ cos ⁡ θ 0 − sin ⁡ θ 0 1 0 sin ⁡ θ 0 cos ⁡ θ ] [ X w Y w Z w ] = R y [ X w Y w Z w ] [ X c Y c Z c ] = [ cos ⁡ θ sin ⁡ θ 0 − sin ⁡ θ cos ⁡ θ 0 0 0 1 ] [ X w Y w Z w ] = R z [ X w Y w Z w ] \begin{aligned} & {\left[\begin{array}{l}X_c \\ Y_c \\ Z_c\end{array}\right]=\left[\begin{array}{ccc}\cos \theta & 0 & -\sin \theta \\ 0 & 1 & 0 \\ \sin \theta & 0 & \cos \theta\end{array}\right]\left[\begin{array}{l}X_w \\ Y_w \\ Z_w\end{array}\right]=R_y\left[\begin{array}{l}X_w \\ Y_w \\ Z_w\end{array}\right]} \\ & {\left[\begin{array}{l}X_c \\ Y_c \\ Z_c\end{array}\right]=\left[\begin{array}{ccc}\cos \theta & \sin \theta & 0 \\ -\sin \theta & \cos \theta & 0 \\ 0 & 0 & 1\end{array}\right]\left[\begin{array}{l}X_w \\ Y_w \\ Z_w\end{array}\right]=R_z\left[\begin{array}{l}X_w \\ Y_w \\ Z_w\end{array}\right]}\end{aligned} XcYcZc = cosθ0sinθ010sinθ0cosθ XwYwZw =Ry XwYwZw XcYcZc = cosθsinθ0sinθcosθ0001 XwYwZw =Rz XwYwZw

这几个绕轴其实就对应了欧拉角的几种情形:俯仰角(绕X轴)、翻滚角(绕Z轴)和偏航角(绕Y轴),以上三个部分可以由陀螺仪等传感器得到,所以旋转矩阵即 R = { R x R y R z } R=\{R_x R_y R_z\} R={RxRyRz},所以有:

三维坐标转换,必备知识,机器学习,人工智能,视频,计算机视觉,深度学习,人机交互,vr

因此有:

[ X c Y c Z c ] = R [ X w Y w Z w ] + T ⟶ [ X c Y c Z c 1 ] = [ R T 0 T 1 ] [ X w Y w Z w 1 ] R : 3 × 3 T : 3 × 1 \begin{gathered}{\left[\begin{array}{c}X_c \\ Y_c \\ Z_c\end{array}\right]=R\left[\begin{array}{c}X_w \\ Y_w \\ Z_w\end{array}\right]+T \longrightarrow\left[\begin{array}{c}X_c \\ Y_c \\ Z_c \\ 1\end{array}\right]=\left[\begin{array}{cc}R & T \\ 0^T & 1\end{array}\right]\left[\begin{array}{c}X_w \\ Y_w \\ Z_w \\ 1\end{array}\right]} \\ R: 3 \times 3 \quad T: 3 \times 1\end{gathered} XcYcZc =R XwYwZw +T XcYcZc1 =[R0TT1] XwYwZw1 R:3×3T:3×1

上面这个过程就是世界坐标系到观察空间/相机坐标系的刚体变换,也叫做取景变换(view transform)。而这个相机外参矩阵也就是包含R和T的转移变换矩阵,假设计做W,也就是:
相机外参矩阵即是:

W = [ R T 0 T 1 ] W=\left[\begin{array}{cc}R & T \\ 0^T & 1\end{array}\right] W=[R0TT1]

其中R是旋转矩阵,T是平移量。
观察空间/相机坐标系=R×世界坐标系+t=外参矩阵×世界坐标系(此公式可以进行互换)
即世界坐标系=外参x观察空间

综合来看就是完成世界坐标系到相机坐标系之间的转换需要四个参数,分别是欧拉角的三个参数和t转移矢量的一个参数即可完成转换。

1.4 相机坐标系到图像坐标系(投影变换)内参构建

通过 x c x = y c y = z c f \frac{x_c}{x}=\frac{y_c}{y}=\frac{z_c}{f} xxc=yyc=fzc有如下的关系式子:

三维坐标转换,必备知识,机器学习,人工智能,视频,计算机视觉,深度学习,人机交互,vr

上面这个关系式子中可以看到二维坐标系(图像)和三维坐标系(相机坐标系)之间的转换是通过f也就是相机焦距 f f f,相机距离图像的距离进行对应量化的。

上面的公式可以直接写为下面的形式:

[ x y 1 ] = [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ X c Y c Z c 1 ] / Z c \left[\begin{array}{l}x \\ y \\ 1\end{array}\right]=\left[\begin{array}{llll}f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0\end{array}\right]\left[\begin{array}{c}X_c \\ Y_c \\ Z_c \\ 1\end{array}\right] / Z_c xy1 = f000f0001000 XcYcZc1 /Zc

注意:二维坐标系转换到三维坐标系需要扩充一个维度,x和y好说,而z则是非线性的,因此需要增广形式把它扩充一个维度,

{ x f = X c Z c y f = Y c Z c \left\{\begin{array}{l}\frac{x}{f}=\frac{X_c}{Z_c} \\ \frac{y}{f}=\frac{Y_c}{Z_c}\end{array}\right. {fx=ZcXcfy=ZcYc

根据上面的式子我们也可以得到:

{ x = f X c Z c y = f Y c Z c \left\{\begin{array}{l}x=f \frac{X_c}{Z_c} \\ y=f \frac{Y_c}{Z_c}\end{array}\right. {x=fZcXcy=fZcYc

进一步可以得到增广的形式:

Z c [ x y 1 ] = [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ X c Y c Z c 1 ] = [ K ∣ 0 ] [ X c Y c Z c 1 ] Z_c\left[\begin{array}{l}x \\ y \\ 1\end{array}\right]=\left[\begin{array}{llll}f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0\end{array}\right]\left[\begin{array}{c}X_c \\ Y_c \\ Z_c \\ 1\end{array}\right]=[K \mid 0]\left[\begin{array}{c}X_c \\ Y_c \\ Z_c \\ 1\end{array}\right] Zc xy1 = f000f0001000 XcYcZc1 =[K0] XcYcZc1

说明:
由于实际应用不知道主点的确切位置,因此以图像的中心位置或者图像的左上角为坐标原点建立图像的坐标系,当主点不是坐标原点的时候,相机的内参矩阵就变为了:

K = [ f 0 x 0 0 f y 0 0 0 1 ] K=\left[\begin{array}{ccc}\boldsymbol{f} & \mathbf{0} & \boldsymbol{x}_{\mathbf{0}} \\ \mathbf{0} & \boldsymbol{f} & \boldsymbol{y}_{\mathbf{0}} \\ \mathbf{0} & \mathbf{0} & \mathbf{1}\end{array}\right] K= f000f0x0y01

K相机内参矩阵中的f和相机的焦距大小和成像大小相关,而x_0和y_0则与相机的成像平移距离有关,因此在SLAM中这些是假定已知的,而三维重建中这些参数则是未知的。这个就是光心或者主点,因此内参矩阵也写为这样的形式,这个如果提供IMU等数据的话可以观察一下是否主点是已知的:

K = [ f s x 0 0 f y 0 0 0 1 ] K=\left[\begin{array}{ccc}\boldsymbol{f} & \boldsymbol{s} & \boldsymbol{x}_0 \\ \mathbf{0} & \boldsymbol{f} & \boldsymbol{y}_0 \\ \mathbf{0} & \mathbf{0} & \mathbf{1}\end{array}\right] K= f00sf0x0y01

相机坐标系Z×图像坐标系=K×相机坐标系 或 图像坐标系=(K×相机坐标系)/深度Z

1.5 图像坐标系到像素坐标系

像素坐标系u-v的原点是 o u v o_{uv} ouv,而图像坐标系x-y的坐标原点是 o ( u 0 , v 0 ) o(u_0,v_0) o(u0,v0),也就是像素坐标系的中心位置,因此每一个图像坐标系上的点在像素坐标系上的宽高分别是dx和dy,因此有下面的式子:

三维坐标转换,必备知识,机器学习,人工智能,视频,计算机视觉,深度学习,人机交互,vr

这个变换就是通过一个矩阵将二维图像平面转换到二维像素平面,而这个转换矩阵我们计为 s u b m a t r i x submatrix submatrix(上三角矩阵):

s u b m a t r i x = [ 1 / d x 0 u 0 0 1 / d y v 0 0 0 1 ] submatrix =\left[\begin{array}{ccc}1 / d x & 0 & u_0 \\ 0 & 1 / d y & v_0 \\ 0 & 0 & 1\end{array}\right] submatrix= 1/dx0001/dy0u0v01

其中的1/dx和1/dy是用焦距充当了缩放因子,而u0和v0则是主点,也就是光心,而这里的s就是调整实际像平面和理想像平面。而submatrix就是我们经常说到的像平面-像素平面转换矩阵,通过这个矩阵以及相机内参矩阵完成光学射线到像素射线的转换任务。

像素坐标系=一定关系×图像坐标系

由上述的等式我们得到四个坐标系的总的转换关系式子:

三维坐标转换,必备知识,机器学习,人工智能,视频,计算机视觉,深度学习,人机交互,vr

即下面的公式就是总的转换关系式子:

z c [ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ R t 0 T 1 ] [ x w y w z w 1 ] z_c\left[\begin{array}{c}u \\ v \\ 1\end{array}\right]=\left[\begin{array}{ccc}\frac{1}{d x} & 0 & u_0 \\ 0 & \frac{1}{d y} & v_0 \\ 0 & 0 & 1\end{array}\right]\left[\begin{array}{cccc}f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0\end{array}\right]\left[\begin{array}{cc}R & t \\ 0^T & 1\end{array}\right]\left[\begin{array}{c}x_w \\ y_w \\ z_w \\ 1\end{array}\right] zc uv1 = dx1000dy10u0v01 f000f0001000 [R0Tt1] xwywzw1

由于相机本身的制造工艺等原因:

u = u 0 + x d d x − y d cot ⁡ θ d x v = v 0 + y d d y sin ⁡ θ \begin{gathered}u=u_0+\frac{x_d}{d x}-\frac{y_d \cot \theta}{d x} \\ v=v_0+\frac{y_d}{d y \sin \theta}\end{gathered} u=u0+dxxddxydcotθv=v0+dysinθyd

因此有如下的公式:

z c [ u v 1 ] = [ 1 d x − cot ⁡ θ d x u 0 0 1 d y sin ⁡ θ v 0 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ R t 0 T 1 ] [ x w y w z w 1 ] z_c\left[\begin{array}{c}u \\ v \\ 1\end{array}\right]=\left[\begin{array}{ccc}\frac{1}{d x} & -\frac{\cot \theta}{d x} & u_0 \\ 0 & \frac{1}{d y \sin \theta} & v_0 \\ 0 & 0 & 1\end{array}\right]\left[\begin{array}{cccc}f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0\end{array}\right]\left[\begin{array}{cc}R & t \\ 0^T & 1\end{array}\right]\left[\begin{array}{c}x_w \\ y_w \\ z_w \\ 1\end{array}\right] zc uv1 = dx100dxcotθdysinθ10u0v01 f000f0001000 [R0Tt1] xwywzw1
三维坐标转换,必备知识,机器学习,人工智能,视频,计算机视觉,深度学习,人机交互,vr

即:

三维坐标转换,必备知识,机器学习,人工智能,视频,计算机视觉,深度学习,人机交互,vr

相机标定即求解这两个内外参数矩阵
其中当把世界坐标系放在标定板处时候,Z方向即为0,此时公式就可以转换为:

[ u v 1 ] = s [ f x γ u 0 0 f y v 0 0 0 1 ] [ r 1 r 2 t ] [ x W y W 1 ] \left[\begin{array}{l}u \\ v \\ 1\end{array}\right]=s\left[\begin{array}{ccc}f_x & \gamma & u_0 \\ 0 & f_y & v_0 \\ 0 & 0 & 1\end{array}\right]\left[\begin{array}{lll}r_1 & r_2 & t\end{array}\right]\left[\begin{array}{c}x_W \\ y_W \\ 1\end{array}\right] uv1 =s fx00γfy0u0v01 [r1r2t] xWyW1

因此H矩阵(由内参和外参组成)可以这么表示:

H = s [ f x γ u 0 0 f y v 0 0 0 1 ] [ r 1 r 2 t ] = s M [ r 1 r 2 t ] H=s\left[\begin{array}{ccc}f_x & \gamma & u_0 \\ 0 & f_y & v_0 \\ 0 & 0 & 1\end{array}\right]\left[\begin{array}{lll}r_1 & r_2 & t\end{array}\right]=s M\left[\begin{array}{lll}r_1 & r_2 & t\end{array}\right] H=s fx00γfy0u0v01 [r1r2t]=sM[r1r2t]

以上内容有疑问或者讲解疏漏的地方欢迎大家补充完善!!!再次感谢!!!文章来源地址https://www.toymoban.com/news/detail-772412.html

到了这里,关于【必备知识】 三维空间/坐标转换/相机知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】用Ceres从三维点中拟合三维空间中的圆

    在三维空间中有N个点,需要得到过这N个点的最优圆,需要估计圆的圆心、半径和法向量,本文提供了一种方法和代码示例,利用Ceres进行非线性拟合,在cpp上开发。 圆心为三维,半径一维,法向量三维,总共是7维的拟合参数。三个点确定一个圆,所以需要大于等于3的点数。

    2024年02月12日
    浏览(38)
  • 三维空间离散点如何拟合平面?

      在点云建模过程中,有时需要对扫描建模的点云进行标定,在实际使用中往往以地面做为参照平面,需要将扫描的三维空间点云进行拟合平面,以便纠正扫描结果。本文对三维空间离散点拟合平面算法进行总结,并给出几种编程语言下的算法实现代码。    (1)最小二

    2024年02月11日
    浏览(46)
  • 二维空间和三维空间刚体变换中的雅克比矩阵的推导

    补充一些李群 SE ⁡ ( 2 ) operatorname{SE}(2) SE ( 2 ) 和李代数 se ⁡ ( 2 ) operatorname{se}(2) se ( 2 ) 的知识, 因为视觉 SLAM十四讲 1 中只给出了 S E ( 3 ) mathrm{SE}(3) SE ( 3 ) 和 s e ( 3 ) mathrm{se}(3) se ( 3 ) 的对应关系, 但是没有给出二维空间的对应关系。其中二维空间的李群李代数参考Lie Gro

    2024年02月03日
    浏览(49)
  • 04-附注 三维空间中的线性变换

    这是关于3Blue1Brown \\\"线性代数的本质\\\"的学习笔记。 图1 绕y轴旋转90° 绕y轴旋转90°后,各基向量所在的坐标如图1所示。用旋转后的各基向量作为矩阵的列,就得到变换矩阵。变换矩阵就是对原向量就是缩放、旋转。

    2024年02月05日
    浏览(40)
  • 三维空间刚体运动之旋转矩阵与变换矩阵

    点: 点是空间中的基本元素,没有长度,没有体积; 向量: 把两个点连接起来,就构成了向量,向量可以看成从某点指向另一点的一个箭头;只有当我们指定这个三维空间中的某个坐标系时,才可以谈论该向量在此坐标系下的坐标;默认向量就是列向量; 坐标系: 三根不

    2024年02月11日
    浏览(60)
  • PCL 判断两条线段的平行性(三维空间)

    这里使用一种比较有趣的方式来判断三维空间中两条线段的平行性,我们都知道两条线段所代表的矢量进行叉乘计算所得数值,代表了由这两条线段组成的平行四边形的面积值,如下图所示: ok,那么如果将此结论推广到三维空间呢?可以得到下面的形式: 其中, i ⃗

    2024年02月10日
    浏览(43)
  • 视觉SLAM14讲笔记-第3讲-三维空间刚体运动

    空间向量之间的运算包括: 数乘、加法、减法、内积、外积。 内积 :可以描述向量间的投影关系,结果是一个标量。 a ⃗ ⋅ b ⃗ = ∑ i = 1 3 a i b i = ∤ a ∤ ∤ b ∤ c o s ⟨ a , b ⟩ vec{a} cdot vec{b}=sum_{i=1}^3{{a _i}{b_i}} =nmid a nmid nmid b nmid cos langle a,b rangle a ⋅ b = i = 1 ∑ 3 ​

    2024年02月11日
    浏览(48)
  • 【线性代数-3Blue1Brown】- 5 三维空间的线性变换

    飞书原文档:Docs  

    2024年02月11日
    浏览(40)
  • ArcGIS Pro实践技术应用、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合

    GIS是利用电子计算机及其外部设备,采集、存储、分析和描述整个或部分地球表面与空间信息系统。简单地讲,它是在一定的地域内,将地理空间信息和 一些与该地域地理信息相关的属性信息结合起来,达到对地理和属性信息的综合管理。GIS的研究对象是整个地理空间,而地

    2024年02月09日
    浏览(49)
  • 三维重建_体素重建_空间雕刻法/体素着色法

    目录 1. 三角化和体素重建的区别 2. 空间雕刻法  空间雕刻法的一致性定义  空间雕刻法具体实现  基于八叉树的空间雕刻法具体实现​编辑  空间雕刻法效果展示  3. 体素着色法  体素着色法的缺点:不唯一性​编辑 体素着色法不唯一性解决措施​编辑  体素着色发实验

    2024年02月11日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包