相机成像投影过程

相机投影

1. 统一坐标系定义

图1

图1 相机投影坐标系

( x w − y w − z w ) (x_w-y_w-z_w) (xwywzw)表示世界坐标系WCS: World Coordinate System
( x o − y o − z o ) (x_o-y_o-z_o) (xoyozo)表示对象固有坐标系OCS: Object Intrinsic Coordinate System
( x c − y c − z c ) (x_c-y_c-z_c) (xcyczc)表示相机坐标系CCS: Camera Coordinate System
( x i − y i − z i ) (x_i-y_i-z_i) (xiyizi)表示图像坐标系ICS: Image Coordinate System
( u-v ) (\text {u-v}) (u-v)表示像素坐标系PCS: Pixel Coordinate System

定义一个相机对象固有坐标系,便于计算相机与世界坐标系之间的变换,即相机外参。

2. 统一点的形式

p w = [ x w y w z w 1 ] , p c = [ x c y c z c 1 ] , p i = [ x i y i 1 ] , p p = [ u v 1 ] ( 22 ) p_w = \begin{bmatrix}x_w \\ y_w \\ z_w \\1\end{bmatrix} , p_c = \begin{bmatrix}x_c \\ y_c \\ z_c \\1\end{bmatrix}, p_i = \begin{bmatrix}x_i \\ y_i \\ 1\end{bmatrix}, p_p = \begin{bmatrix}\text{u} \\ \text{v} \\ 1\end{bmatrix} \qquad(22) pw=xwywzw1,pc=xcyczc1,pi=xiyi1,pp=uv1(22)

p w , p c , p i , p p p_w, p_c, p_i, p_p pw,pc,pi,pp,分别表示点在世界坐标系WCS,相机坐标系CCS,图像中心坐标系ICS,和像素坐标系PCS下表达。

3. 统一参数和矩阵

T p i = k c a m = [ f x 0 c x 0 f y c y 0 0 1 ] ( 23 ) T i p = k c a m − 1 = [ 1 f x 0 − c x f x 0 1 f y − c y f y 0 0 1 ] ( 24 ) \begin{aligned} T_{pi} &= k_{cam} = \begin{bmatrix}f_x &0 &c_x \\ 0 &f_y &c_y \\ 0 &0 &1 \end{bmatrix} \qquad&(23) \\ T_{ip} &= k_{cam}^{-1}= \begin{bmatrix}\frac{1}{f_x} &0 &-\frac{c_x}{f_x} \\ 0 &\frac{1}{f_y} &-\frac{c_y}{f_y} \\ 0 &0 &1 \end{bmatrix} \qquad&(24) \end{aligned} TpiTip=kcam=fx000fy0cxcy1=kcam1=fx1000fy10fxcxfycy1(23)(24)

k c a m k_{cam} kcam为相机内参矩阵,即ICS坐标点到PCS坐标点的变换 T p i T_{pi} Tpi
k c a m − 1 k_{cam}^{-1} kcam1为相机内参矩阵的逆矩阵,即像PCS坐标点到ICS坐标点的变换 T i p T_{ip} Tip
f x , f y f_x,f_y fx,fy分别为相机横向焦距,竖向焦距,单位为像素
c x , c y c_x,c_y cx,cy表示图像中心点在PCS下的坐标,单位为像素

T w o i = [ cos ⁡ ( 90 ) − sin ⁡ ( 90 ) 0 0 sin ⁡ ( 90 ) cos ⁡ ( 90 ) 0 0 0 0 1 h 0 0 0 1 ] = [ 0 − 1 0 0 1 0 0 0 0 0 1 h 0 0 0 1 ] ( 25 ) T_{wo_i} = \begin{bmatrix}\cos(90) &-\sin(90) &0 &0 \\ \sin(90) &\cos(90) &0 &0 \\ 0 &0 &1 &h\\0 &0 &0 &1 \end{bmatrix} = \begin{bmatrix}0 &-1 &0 &0 \\ 1 &0 &0 &0 \\ 0 &0 &1 &h\\0 &0 &0 &1 \end{bmatrix} \qquad(25) Twoi=cos(90)sin(90)00sin(90)cos(90)00001000h1=01001000001000h1(25)

T w o i T_{wo_i} Twoi表示初始OCSWCS下的表达,是相机初始外参,从图1中可以看出,初始OCS可由WCS先绕自身Z轴旋转了90度,并沿自身Z轴正向平移h得到,最终得到上述变换矩阵 T w o i T_{wo_i} Twoi

T o i o x = [ 1 0 0 0 0 cos ⁡ ( α ) − sin ⁡ ( α ) 0 0 sin ⁡ ( α ) cos ⁡ ( α ) 0 0 0 0 1 ] ( 26 ) T o i o y = [ cos ⁡ ( β ) 0 sin ⁡ ( β ) 0 0 1 0 0 − sin ⁡ ( β ) 0 cos ⁡ ( β ) 0 0 0 0 1 ] ( 27 ) T o i o z = [ cos ⁡ ( γ ) − sin ⁡ ( γ ) 0 0 sin ⁡ ( γ ) cos ⁡ ( γ ) 0 0 0 0 1 0 0 0 0 1 ] ( 28 ) \begin{aligned} T_{o_io_x} &= \begin{bmatrix}1 &0 &0 &0 \\ 0 &\cos(\alpha) &-\sin(\alpha) &0 \\ 0 &\sin(\alpha) &\cos(\alpha) &0\\0 &0 &0 &1 \end{bmatrix} \qquad&(26) \\ T_{o_io_y} &= \begin{bmatrix}\cos(\beta) &0 &\sin(\beta) &0 \\ 0 &1 &0 &0 \\ -\sin(\beta) &0 &\cos(\beta) &0\\0 &0 &0 &1 \end{bmatrix} \qquad&(27) \\ T_{o_io_z} &= \begin{bmatrix}\cos(\gamma) &-\sin(\gamma) &0 &0 \\ \sin(\gamma) &\cos(\gamma) &0 &0 \\ 0 &0 &1 &0\\0 &0 &0 &1 \end{bmatrix} \qquad&(28) \end{aligned} ToioxToioyToioz=10000cos(α)sin(α)00sin(α)cos(α)00001=cos(β)0sin(β)00100sin(β)0cos(β)00001=cos(γ)sin(γ)00sin(γ)cos(γ)0000100001(26)(27)(28)

T o i o c = T o i o z ∗ T o i o y ∗ T o i o x T o i o c = [ cos ⁡ ( γ ) cos ⁡ ( β ) cos ⁡ ( γ ) sin ⁡ ( β ) sin ⁡ ( α ) − sin ⁡ ( γ ) cos ⁡ ( α ) cos ⁡ ( γ ) sin ⁡ ( β ) cos ⁡ ( α ) + sin ⁡ ( γ ) sin ⁡ ( α ) 0 sin ⁡ ( γ ) cos ⁡ ( β ) sin ⁡ ( γ ) sin ⁡ ( β ) sin ⁡ ( α ) + cos ⁡ ( γ ) cos ⁡ ( α ) sin ⁡ ( γ ) sin ⁡ ( β ) cos ⁡ ( α ) − cos ⁡ ( γ ) sin ⁡ ( α ) 0 − sin ⁡ ( β ) cos ⁡ ( β ) sin ⁡ ( α ) cos ⁡ ( β ) cos ⁡ ( α ) 0 0 0 0 1 ] ( 29 ) \begin{aligned} T_{o_io_c} &= T_{o_io_z} * T_{o_io_y} * T_{o_io_x} \\ T_{o_io_c} &= \begin{bmatrix} \cos \left(\gamma \right) \cos \left(\beta \right) &\cos \left(\gamma \right)\sin \left(\beta \right)\sin \left(\alpha \right)-\sin \left(\gamma \right)\cos \left(\alpha \right) &\cos \left(\gamma \right)\sin \left(\beta \right)\cos \left(\alpha \right)+\sin \left(\gamma \right)\sin \left(\alpha \right) &0\\ \sin \left(\gamma \right)\cos \left(\beta \right) &\sin \left(\gamma \right)\sin \left(\beta \right)\sin \left(\alpha \right)+\cos \left(\gamma \right)\cos \left(\alpha \right) &\sin \left(\gamma \right)\sin \left(\beta \right)\cos \left(\alpha \right)-\cos \left(\gamma \right)\sin \left(\alpha \right) &0\\ -\sin \left(\beta \right) &\cos \left(\beta \right)\sin \left(\alpha \right) &\cos \left(\beta \right)\cos \left(\alpha \right) &0\\ 0&0&0&1 \end{bmatrix} \qquad&(29) \end{aligned} ToiocToioc=ToiozToioyToiox=cos(γ)cos(β)sin(γ)cos(β)sin(β)0cos(γ)sin(β)sin(α)sin(γ)cos(α)sin(γ)sin(β)sin(α)+cos(γ)cos(α)cos(β)sin(α)0cos(γ)sin(β)cos(α)+sin(γ)sin(α)sin(γ)sin(β)cos(α)cos(γ)sin(α)cos(β)cos(α)00001(29)

T o i o x , T o i o y , T o i o z T_{o_io_x},T_{o_io_y},T_{o_io_z} Toiox,Toioy,Toioz表示OCS绕其自身三个坐标轴的旋转矩阵,由于是绕固定坐标系旋转,即为外在旋转,依次左乘,则当前OCS初始OCS下可表示为: T o i o c T_{o_io_c} Toioc


重要说明:
WCS定义为:右-前-上;
OCS定义为:前-左-上(固连在相机对象上);
CCS定义为:右-下-前。
且通常所说的横滚角roll、俯仰角pitch,航向角yaw均是基于OCS表示的;
右滚为正,左滚为负;下俯为正,上仰为负;左偏为正,右偏为负。


T o c c = [ 1 0 0 0 0 cos ⁡ ( − 90 ) − sin ⁡ ( − 90 ) 0 0 sin ⁡ ( − 90 ) cos ⁡ ( − 90 ) 0 0 0 0 1 ] [ cos ⁡ ( 90 ) 0 sin ⁡ ( 90 ) 0 0 1 0 0 − sin ⁡ ( 90 ) 0 cos ⁡ ( 90 ) 0 0 0 0 1 ] [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ] = [ 1 0 0 0 0 0 1 0 0 − 1 0 0 0 0 0 1 ] [ 0 0 1 0 0 1 0 0 − 1 0 0 0 0 0 0 1 ] [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ] = [ 0 0 1 0 − 1 0 0 0 0 − 1 0 0 0 0 0 1 ] ( 30 ) \begin{aligned} T_{o_cc} &= \begin{bmatrix}1 &0 &0 &0 \\ 0 &\cos(-90) &-\sin(-90) &0 \\ 0 &\sin(-90) &\cos(-90) &0\\ 0 &0 &0 &1 \end{bmatrix} \begin{bmatrix}\cos(90) &0 &\sin(90) &0 \\ 0 &1 &0 &0 \\ -\sin(90) &0 &\cos(90) &0\\ 0 &0 &0 &1 \end{bmatrix} \begin{bmatrix}1 &0 &0 &0 \\ 0 &1 &0 &0 \\ 0 &0 &1 &0\\ 0 &0 &0 &1 \end{bmatrix} \\ &= \begin{bmatrix}1 &0 &0 &0 \\ 0 &0 &1 &0 \\ 0 &-1 &0 &0\\ 0 &0 &0 &1 \end{bmatrix} \begin{bmatrix} 0 &0 &1 &0 \\ 0 &1 &0 &0 \\ -1 &0 &0 &0\\ 0 &0 &0 &1 \end{bmatrix} \begin{bmatrix}1 &0 &0 &0 \\ 0 &1 &0 &0 \\ 0 &0 &1 &0\\ 0 &0 &0 &1 \end{bmatrix} \\ &= \begin{bmatrix}0 &0 &1 &0 \\ -1 &0 &0 &0 \\ 0 &-1 &0 &0\\ 0 &0 &0 &1 \end{bmatrix} \qquad&(30) \end{aligned} Tocc=10000cos(90)sin(90)00sin(90)cos(90)00001cos(90)0sin(90)00100sin(90)0cos(90)000011000010000100001=100000100100000100100100100000011000010000100001=0100001010000001(30)

T o c c T_{o_cc} ToccCCS当前OCS下的表示,这是不变的相机固有外参,该变换矩阵可由式(15)求得。具体过程为:当前OCS先绕自身X轴旋转-90度,然后绕旋转后得到坐标系的Y轴旋转90度,即可得到CCS,这个过程为绕动坐标系旋转,属于内在旋转,依次右乘,最终得到 T o c c T_{o_cc} Tocc,如式(17)。

T w c = T w o i ∗ T o i o c ∗ T o c c ( 31 ) T c w = T w c − 1 = [ R 3 X 3 t 3 X 1 0 1 ] = [ r 11 r 12 r 13 t 14 r 21 r 22 r 23 t 24 r 31 r 32 r 33 t 34 0 0 0 1 ] ( 32 ) \begin{aligned} T_{wc} &= T_{wo_i} * T_{o_io_c} * T_{o_cc} \qquad&(31)\\ T_{cw} &= T_{wc}^{-1}= \begin{bmatrix}R_{3X3} &t_{3X1} \\ 0 &1 \end{bmatrix} = \begin{bmatrix}r_{11} &r_{12} &r_{13} &t_{14} \\ r_{21} &r_{22} &r_{23} &t_{24} \\ r_{31} &r_{32} &r_{33} &t_{34}\\ 0 &0 &0 &1 \end{bmatrix} \qquad&(32) \end{aligned} TwcTcw=TwoiToiocTocc=Twc1=[R3X30t3X11]=r11r21r310r12r22r320r13r23r330t14t24t341(31)(32)
T w c T_{wc} TwcCCSWCS下的表达,可将CCS下的点变换为WCS下的点
T c w T_{cw} TcwWCSCCS下的表达,即为通常所说的相机外参,可将WCS下的点变换为CCS下的点

注释:在具体计算相机外参 T w c T_{wc} Twc时实际上有很多种形式,这其中最让人看不懂的往往是坐标系的定义、绕那个坐标轴旋转、以及roll,yaw,pitch角度的定义,不论是网上的博客还是学术论文,每个人理解和定义的方式都不同,同时在把公式代码化的时候又常常简化过程以提高计算速度,最终造成的结果就是代码阅读性极差,在对照自己推导的公式时,发现总有地方不同,因此这里给处于混沌状态的同学一些提示:在进行任何推导前一定要先定义和梳理好坐标系以及角度的表示

T i c = [ 1 z c 0 0 0 0 1 z c 0 0 0 0 1 z c 0 ] ( 33 ) T_{ic} = \begin{bmatrix}\frac{1}{z_c} &0 &0 &0 \\ 0 &\frac{1}{z_c} &0 &0 \\0 &0 &\frac{1}{z_c} &0 \end{bmatrix} \qquad(33) Tic=zc1000zc1000zc1000(33)

T i c T_{ic} Tic用于变换CCS下的点到ICS下,其中 z c z_c zc为点在CCS下的Z轴坐标。

4. 相机投影成像一般过程

  • 逐步形式:

p c = T c w ∗ p w ( 34 ) p i = T i c ∗ p c ( 35 ) p p = k c a m ∗ p i ( 36 ) ⇓ [ x c y c z c 1 ] = [ r 11 r 12 r 13 t 14 r 21 r 22 r 23 t 24 r 31 r 32 r 33 t 34 0 0 0 1 ] [ x w y w z w 1 ] ( 37 ) [ x i y i 1 ] = [ 1 z c 0 0 0 0 1 z c 0 0 0 0 1 z c 0 ] [ x c y c z c 1 ] ( 38 ) [ u v 1 ] = [ f x 0 c x 0 f y c y 0 0 1 ] [ x i y i 1 ] ( 39 ) \begin{aligned} p_c &= T_{cw} * p_w \qquad&(34)\\ p_i &= T_{ic} * p_c \qquad&(35)\\ p_p &= k_{cam} * p_i \qquad&(36)\\ &\Downarrow \\ \begin{bmatrix}x_c \\ y_c \\ z_c \\1 \end{bmatrix} &= \begin{bmatrix}r_{11} &r_{12} &r_{13} &t_{14} \\ r_{21} &r_{22} &r_{23} &t_{24} \\ r_{31} &r_{32} &r_{33} &t_{34}\\ 0 &0 &0 &1 \end{bmatrix} \begin{bmatrix}x_w \\ y_w \\ z_w \\ 1 \end{bmatrix} \qquad&(37) \\ \begin{bmatrix}x_i \\ y_i \\1 \end{bmatrix} &= \begin{bmatrix}\frac{1}{z_c} &0 &0 &0 \\ 0 &\frac{1}{z_c} &0 &0 \\ 0 &0 &\frac{1}{z_c} &0 \end{bmatrix} \begin{bmatrix}x_c \\ y_c \\ z_c \\ 1 \end{bmatrix} \qquad&(38)\\ \begin{bmatrix}\text{u} \\ \text{v} \\1 \end{bmatrix} &= \begin{bmatrix}f_x &0 &c_x \\ 0 &f_y &c_y \\ 0 &0 &1 \end{bmatrix} \begin{bmatrix}x_i \\ y_i \\1 \end{bmatrix} \qquad&(39) \end{aligned} pcpippxcyczc1xiyi1uv1=Tcwpw=Ticpc=kcampi=r11r21r310r12r22r320r13r23r330t14t24t341xwywzw1=zc1000zc1000zc1000xcyczc1=fx000fy0cxcy1xiyi1(34)(35)(36)(37)(38)(39)

  • 整体形式:

p p = T p i ∗ T i c ∗ T c w ∗ p w ( 40 ) ⇓ [ u v 1 ] = [ f x 0 c x 0 f y c y 0 0 1 ] [ 1 z c 0 0 0 0 1 z c 0 0 0 0 1 z c 0 ] [ r 11 r 12 r 13 t 14 r 21 r 22 r 23 t 24 r 31 r 32 r 33 t 34 0 0 0 1 ] [ x w y w z w 1 ] ( 41 ) \begin{aligned} p_p &= T_{pi} * T_{ic}* T_{cw} * p_w \qquad&(40)\\ &\Downarrow \\ \begin{bmatrix}\text{u} \\ \text{v} \\1 \end{bmatrix} &= \begin{bmatrix}f_x &0 &c_x \\ 0 &f_y &c_y \\ 0 &0 &1 \end{bmatrix} \begin{bmatrix}\frac{1}{z_c} &0 &0 &0 \\ 0 &\frac{1}{z_c} &0 &0 \\ 0 &0 &\frac{1}{z_c} &0 \end{bmatrix} \begin{bmatrix}r_{11} &r_{12} &r_{13} &t_{14} \\ r_{21} &r_{22} &r_{23} &t_{24} \\ r_{31} &r_{32} &r_{33} &t_{34}\\ 0 &0 &0 &1 \end{bmatrix} \begin{bmatrix}x_w \\ y_w \\ z_w \\ 1 \end{bmatrix} \qquad&(41) \end{aligned} ppuv1=TpiTicTcwpw=fx000fy0cxcy1zc1000zc1000zc1000r11r21r310r12r22r320r13r23r330t14t24t341xwywzw1(40)(41)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值