针孔相机模型公式推导

  针孔相机模型是使用的较多的模型,下面总结三维模型重建中的针孔相机成像过程。

  首先,空间中的一个点要在针孔相机的像平面重建,需要4步。

1.从世界坐标系变化到相机坐标系

  世界坐标系可以定义在任意位置,作为参考坐标系,相机坐标系以相机的光心看为远点,相机朝向为Z轴,朝上为Y轴,再根据右手定则确定X轴,如图(Ocam表示相机坐标系原点,Owor表示世界坐标系所选的点的原点):
在这里插入图片描述
  空间中的一个点表示为
X w = [ x w y w z w ] X_w=\left[\begin{matrix}x_w\\y_w\\z_w \end{matrix}\right] Xw=xwywzw
  这个空间中的点对应的相机中的点表达为:
X c = [ x c y c z c ] X_c=\left[\begin{matrix}x_c\\y_c\\z_c \end{matrix}\right] Xc=xcyczc

   X c X_c Xc X w X_w Xw之间可以通过刚体变换来进行转换(刚体变换即变换前后两点的的距离依旧保持不变的变换,可分为平移变换、旋转变换和镜像(或叫翻转)变换):

1- 平移变换

  假设存在点(x,y,z),将x移动a,y移动b,z移动c,到新的点 ( x ′ , y ′ , z ′ ) (x^{'},y^{'},z^{'}) (x,y,z),则:
x ′ = x + a x^{'}=x+a x=x+a
y ′ = y + b y^{'}=y+b y=y+b
z ′ = y + c z^{'}=y+c z=y+c

  平移向量为:
t = [ a b c ] t=\left[\begin{matrix}a\\b\\c \end{matrix}\right] t=abc

  写成矩阵形式:
[ x ′ y ′ z ′ 1 ] = [ 1 0 0 a 0 1 0 b 0 0 1 c 0 0 0 1 ] [ x y z 1 ] \left[\begin{matrix}x^{'}\\y^{'}\\z^{'}\\1 \end{matrix}\right]= \left[\begin{matrix}1&0&0&a\\0&1&0&b\\0&0&1&c\\0&0&0&1 \end{matrix}\right] \left[\begin{matrix}x\\y\\z\\1 \end{matrix}\right] xyz1=100001000010abc1xyz1

  中间4x4的矩阵叫变换矩阵。可见,如果要平移坐标,要将坐标维度增加1,变成齐次坐标(齐次坐标(homogeneous coordinates)就是将一个原本是n维的向量用一个n+1维向量来表示,常用于投影几何)。

  在计算机图形学中,为了实现平移、旋转、缩放等图像操作,需要用到齐次坐标。

例1:世界坐标系wor相对相机坐标系cam的x、y、z分别平移了10,20,30,求次变换齐次矩阵。

[ x ′ y ′ z ′ 1 ] = [ 1 0 0 10 0 1 0 0 0 0 1 0 0 0 0 1 ] × [ 1 0 0 0 0 1 0 20 0 0 1 0 0 0 0 1 ] × [ 1 0 0 0 0 1 0 0 0 0 1 30 0 0 0 1 ] × [ x y z 1 ] = [ 1 0 0 10 0 1 0 20 0 0 1 30 0 0 0 1 ] × [ x y z 1 ] \left[\begin{matrix}x^{'}\\y^{'}\\z^{'}\\1 \end{matrix}\right]=\left[\begin{matrix}1&0&0&10\\0&1&0&0\\0&0&1&0\\0&0&0&1 \end{matrix}\right] \times \left[\begin{matrix}1&0&0&0\\0&1&0&20\\0&0&1&0\\0&0&0&1 \end{matrix}\right]\times \left[\begin{matrix}1&0&0&0\\0&1&0&0\\0&0&1&30\\0&0&0&1 \end{matrix}\right]\times \left[\begin{matrix}x\\y\\z\\1 \end{matrix}\right]= \left[\begin{matrix}1&0&0&10\\0&1&0&20\\0&0&1&30\\0&0&0&1 \end{matrix}\right]\times \left[\begin{matrix}x\\y\\z\\1 \end{matrix}\right] xyz1=10000100001010001×10000100001002001×10000100001000301×xyz1=1000010000101020301×xyz1

三个分量矩阵位置可以交换,因为是独立变量,互不影响。
所以,平移齐次矩阵为: [ 1 0 0 10 0 1 0 20 0 0 1 30 0 0 0 1 ] \left[\begin{matrix}1&0&0&10\\0&1&0&20\\0&0&1&30\\0&0&0&1 \end{matrix}\right] 1000010000101020301

2- 旋转变换

例2:世界坐标系wor相对相机坐标系cam绕x轴顺时针旋转了 α \alpha α(逆时针旋转为正,所以以下变换均为逆时针旋转):
变换矩阵: [ x ′ y ′ z ′ 1 ] = [ 1 0 0 0 0 c o s α − s i n α 0 0 s i n α c o s α 0 0 0 0 1 ] × [ x y z 1 ] \left[\begin{matrix}x^{'}\\y^{'}\\z^{'}\\1 \end{matrix}\right]= \left[\begin{matrix}1&0&0&0\\0&cos{\alpha}&-sin{\alpha}&0\\0&sin{\alpha}&cos{\alpha}&0\\0&0&0&1 \end{matrix}\right] \times \left[\begin{matrix}x\\y\\z\\1 \end{matrix}\right] xyz1=10000cosαsinα00sinαcosα00001×xyz1

再绕y轴顺时针旋转 β \beta β(应该再左乘一个变换矩阵):

[ x ′ ′ y ′ ′ z ′ ′ 1 ] = [ 1 0 0 0 0 c o s α − s i n α 0 0 s i n α c o s α 0 0 0 0 1 ] × [ x ′ y ′ z ′ 1 ] \left[\begin{matrix}x^{''}\\y^{''}\\z^{''}\\1 \end{matrix}\right]= \left[\begin{matrix}1&0&0&0\\0&cos{\alpha}&-sin{\alpha}&0\\0&sin{\alpha}&cos{\alpha}&0\\0&0&0&1 \end{matrix}\right] \times \left[\begin{matrix}x^{'}\\y^{'}\\z^{'}\\1 \end{matrix}\right] xyz1=10000cosαsinα00sinαcosα00001×xyz1

  旋转变换有两种,一种是向量在当前坐标系内的旋转,一种是坐标系的旋转。这里推导坐标系旋转矩阵

(1) 绕X轴旋转(逆时针) α \alpha α

在这里插入图片描述
方程为:
{ x ′ = x , y ′ = y c o s α + z s i n α , z ′ = − y s i n α + z c o s α \begin{cases} x'=x,\\ y'=ycos{\alpha}+zsin{\alpha},\\ z'=-ysin{\alpha}+zcos{\alpha} \end{cases} x=x,y=ycosα+zsinα,z=ysinα+zcosα

写成矩阵形式:
[ x ′ y ′ z ′ 1 ] = [ 1 0 0 0 0 c o s α s i n α 0 0 − s i n α c o s α 0 0 0 0 1 ] × [ x y z 1 ] \left[\begin{matrix}x^{'}\\y^{'}\\z^{'}\\1 \end{matrix}\right]= \left[\begin{matrix}1&0&0&0\\0&cos{\alpha}&sin{\alpha}&0\\0&-sin{\alpha}&cos{\alpha}&0\\0&0&0&1 \end{matrix}\right] \times \left[\begin{matrix}x\\y\\z\\1 \end{matrix}\right] xyz1=10000cosαsinα00sinαcosα00001×xyz1

(2) 绕Y轴旋转(逆时针) β \beta β

在这里插入图片描述
方程为:
{ x ′ ′ = x ′ c o s β + z ′ s i n β , y ′ ′ = y ′ , z ′ ′ = − x ′ s i n β + z ′ c o s β \begin{cases} x''=x'cos{\beta}+z'sin{\beta},\\ y''=y',\\ z''=-x'sin{\beta}+z'cos{\beta} \end{cases} x=xcosβ+zsinβ,y=y,z=xsinβ+zcosβ

写成矩阵形式:
[ x ′ ′ y ′ ′ z ′ ′ 1 ] = [ c o s β 0 s i n β 0 0 1 0 0 − s i n α 0 c o s β 0 0 0 0 1 ] × [ x ′ y ′ z ′ 1 ] \left[\begin{matrix}x^{''}\\y^{''}\\z^{''}\\1 \end{matrix}\right]= \left[\begin{matrix}cos{\beta}&0&sin{\beta}&0\\0&1&0&0\\-sin{\alpha}&0&cos{\beta}&0\\0&0&0&1 \end{matrix}\right] \times \left[\begin{matrix}x'\\y'\\z'\\1 \end{matrix}\right] xyz1=cosβ0sinα00100sinβ0cosβ00001×xyz1

(3)绕Z轴旋转(逆时针) γ \gamma γ

在这里插入图片描述
方程为:
{ x ′ ′ ′ = x ′ ′ c o s γ + y ′ ′ s i n γ , y ′ ′ ′ = − x ′ ′ s i n γ + y ′ ′ c o s β , z ′ ′ ′ = z ′ ′ \begin{cases} x'''=x''cos{\gamma}+y''sin{\gamma},\\ y'''=-x''sin{\gamma}+y''cos{\beta},\\ z'''=z'' \end{cases} x=xcosγ+ysinγ,y=xsinγ+ycosβ,z=z

写成矩阵形式:
[ x ′ ′ ′ y ′ ′ ′ z ′ ′ ′ 1 ] = [ c o s γ s i n γ 0 0 − s i n γ c o s γ 0 0 0 0 1 0 0 0 0 1 ] × [ x ′ ′ y ′ ′ z ′ ′ 1 ] \left[\begin{matrix}x^{'''}\\y^{'''}\\z^{'''}\\1 \end{matrix}\right]= \left[\begin{matrix}cos{\gamma}&sin{\gamma}&0&0\\-sin{\gamma}&cos{\gamma}&0&0\\0&0&1&0\\0&0&0&1 \end{matrix}\right] \times \left[\begin{matrix}x''\\y''\\z''\\1 \end{matrix}\right] xyz1=cosγsinγ00sinγcosγ0000100001×xyz1

所以,坐标轴分别依次绕x,y,z轴旋转 α \alpha α, β \beta β, γ \gamma γ的变换矩阵(前后用左乘来连接):

R = R z ( γ ) R y ( β ) R x ( α ) = [ c o s γ s i n γ 0 0 − s i n γ c o s γ 0 0 0 0 1 0 0 0 0 1 ] × [ c o s β 0 s i n β 0 0 1 0 0 − s i n α 0 c o s β 0 0 0 0 1 ] × [ 1 0 0 0 0 c o s α s i n α 0 0 − s i n α c o s α 0 0 0 0 1 ] R=R_z(\gamma)R_y(\beta)R_x(\alpha)=\left[\begin{matrix}cos{\gamma}&sin{\gamma}&0&0\\-sin{\gamma}&cos{\gamma}&0&0\\0&0&1&0\\0&0&0&1 \end{matrix}\right]\times \left[\begin{matrix}cos{\beta}&0&sin{\beta}&0\\0&1&0&0\\-sin{\alpha}&0&cos{\beta}&0\\0&0&0&1 \end{matrix}\right] \times \left[\begin{matrix}1&0&0&0\\0&cos{\alpha}&sin{\alpha}&0\\0&-sin{\alpha}&cos{\alpha}&0\\0&0&0&1 \end{matrix}\right] R=Rz(γ)Ry(β)Rx(α)=cosγsinγ00sinγcosγ0000100001×cosβ0sinα00100sinβ0cosβ00001×10000cosαsinα00sinαcosα00001

齐次矩阵 R R R 4 × 4 4\times 4 4×4的矩阵。

3- 综合变换矩阵

  空间中的一个点表示为
X w = [ x w y w z w ] X_w=\left[\begin{matrix}x_w\\y_w\\z_w \end{matrix}\right] Xw=xwywzw
  这个空间中的点对应的相机中的点表达为:
X c = [ x c y c z c ] X_c=\left[\begin{matrix}x_c\\y_c\\z_c \end{matrix}\right] Xc=xcyczc

综合的(平移+旋转)变换矩阵可表示为:

X c = R X w + t X_c=RX_w+t Xc=RXw+t (此处及以下R为非齐次矩阵, 3 × 4 3\times 4 3×4

写成齐次矩阵形式( X c X_c Xc下面的1是因为要考虑平移,所以要变成齐次矩阵才加进来的):
[ X c 1 ] = [ R t 0 T 1 ] × [ X w 1 ] \left[\begin{matrix}X_c\\1 \end{matrix}\right]= \left[\begin{matrix}R&t\\0^T&1 \end{matrix}\right] \times \left[\begin{matrix}X_w\\1 \end{matrix}\right] [Xc1]=[R0Tt1]×[Xw1]

( t t t为平移向量:
t = [ a b c ] t=\left[\begin{matrix}a\\b\\c \end{matrix}\right] t=abc)

逆变换
X w = R T X c − R T t X_w=R^TX_c-R^Tt Xw=RTXcRTt

齐次矩阵形式:
[ X w 1 ] = [ R T − R T t 0 T 1 ] × [ X c 1 ] \left[\begin{matrix}X_w\\1 \end{matrix}\right]= \left[\begin{matrix}R^T&-R^Tt\\0^T&1 \end{matrix}\right] \times \left[\begin{matrix}X_c\\1 \end{matrix}\right] [Xw1]=[RT0TRTt1]×[Xc1]

4.相机中心在世界坐标系中的位置

相机中心在相机坐标系中的位置 O c a m c O_{cam}^c Ocamc

相机中心在世界坐标系中的位置 O c a m w O_{cam}^w Ocamw

把相机原点转化到世界坐标系中:

O c a m c = 0 O_{cam}^c=0 Ocamc=0

使用逆变换公式

X w = R T X c − R T t X_w=R^TX_c-R^Tt Xw=RTXcRTt

O c a m w = R T O c a m c − R T t = − R T t O_{cam}^w=R^TO_{cam}^c-R^Tt=-R^Tt Ocamw=RTOcamcRTt=RTt

把世界坐标系原点转化到相机坐标系中:

世界坐标系原点在世界坐标系中的位置 O w o r w O_{wor}^w Oworw

世界坐标系原点在相机坐标系中的位置 O w o r c O_{wor}^c Oworc

O w o r w = 0 O_{wor}^w=0 Oworw=0

使用变换公式:

X c = R X w + t X_c=RX_w+t Xc=RXw+t

X O w o r c = R O w o r w + t = t XO_{wor}^c=RO_{wor}^w+t=t XOworc=ROworw+t=t

可见:世界坐标系原点在相机坐标系中的表达就是平移向量 t t t

4- 相机朝向(Z轴)在世界坐标系中的方向

2. 相机坐标系到归一化像平面坐标系

  归一化像平面坐标系:是一个与物理像平面(通常是感光器件CCD所在的平面)平行,并且距离相机光心距离为1个单位的一个虚拟的坐标平面。见下图:
在这里插入图片描述
在这里插入图片描述

  归一化平面坐标 p ^ ( x , y ) \hat{p}(x,y) p^(x,y),由三角形(从三维来看是三棱锥相似)相似有:

x c x = y c y = z c z \frac{x_c}{x}=\frac{y_c}{y}=\frac{z_c}{z} xxc=yyc=zzc (由归一化平面定义知:归一化平面的 z = 1 z=1 z=1)

即:
x = x c z c x=\frac{x_c}{z_c} x=zcxc
y = y c z c y=\frac{y_c}{z_c} y=zcyc

  写成矩阵形式:

[ x y ] = [ x c z c y c z c ] \left[\begin{matrix}x\\y \end{matrix}\right]= \left[\begin{matrix}\frac{x_c}{z_c}\\ \frac{y_c}{z_c} \end{matrix}\right] [xy]=[zcxczcyc]

写成其次矩阵形式:
[ x y 1 ] = 1 z c [ x c y c z c ] \left[\begin{matrix}x\\y\\1 \end{matrix}\right]=\frac{1}{z_c} \left[\begin{matrix}x_c\\ y_c\\z_c \end{matrix}\right] xy1=zc1xcyczc

  经过归一化后,原来的在相机坐标下的三维信息 P c ( x c , y c , z c ) P_c(x_c,y_c,z_c) Pc(xc,yc,zc)变成了二维信息 p ^ ( x , y ) \hat{p}(x,y) p^(x,y),损失了z坐标的信息,由三维点变成了二维的点,这个过程即深度信息损失

3. 归一化像平面坐标系到物理像平面坐标系

  得到归一化坐标 p ^ ( x , y ) \hat{p}(x,y) p^(x,y)后,要将其转化到理像平面坐标系中(即成像原件所在平面),变成 p i m g ( x i m g , y i m g ) p_{img}(x_{img},y_{img}) pimg(ximg,yimg)。注意:此处单位与归一化平面不一样,归一化平面与光心的距离可以是1米或毫米(此例子中取毫米),但是物理像平面的单位通常为像素。见下图:在这里插入图片描述
  由于物理平面采用的单位是像素,需要把归一化平面的毫米单位转化为像素。

  相似三角形关系:

X i m g x = Y i m g y = f z \frac{X_{img}}{x}=\frac{Y_{img}}{y}=\frac{f}{z} xXimg=yYimg=zf (由归一化平面定义知:归一化平面的 z = 1 z=1 z=1 X i m g X_{img} Ximg Y i m g Y_{img} Yimg单位为mm)

X i m g = f x X_{img}=fx Ximg=fx
Y i m g = f y Y_{img}=fy Yimg=fy (单位mm)

x i m g = α U = f α x x_{img}=\alpha U=f\alpha x ximg=αU=fαx
y i m g = β U = f β y y_{img}=\beta U=f\beta y yimg=βU=fβy (在物理平面内,mm坐标转化为像素单位的坐标)

  写成矩阵形式:

[ x i m g y i m g ] = [ f α x f β y ] = [ f α x f β y ] \left[\begin{matrix}x_{img}\\y_{img} \end{matrix}\right]= \left[\begin{matrix}f\alpha x\\ f\beta y \end{matrix}\right]=\left[\begin{matrix}f_{\alpha}x\\ f_{\beta}y \end{matrix}\right] [ximgyimg]=[fαxfβy]=[fαxfβy]

f α = f α f_{\alpha}=f\alpha fα=fα
f β = f β f_{\beta}=f\beta fβ=fβ

  写成其次矩阵:

[ x i m g y i m g 1 ] = [ f α 0 0 0 f β 0 0 0 1 ] [ x y 1 ] = 1 z c [ f α 0 0 0 f β 0 0 0 1 ] [ x c y c z c ] \left[\begin{matrix}x_{img}\\y_{img}\\1 \end{matrix}\right]= \left[\begin{matrix}f_{\alpha}&0&0\\ 0&f_{\beta}&0\\0&0&1 \end{matrix}\right]\left[\begin{matrix}x\\y\\1 \end{matrix}\right]=\frac{1}{z_c}\left[\begin{matrix}f_{\alpha}&0&0\\ 0&f_{\beta}&0\\0&0&1 \end{matrix}\right] \left[\begin{matrix}x_c\\ y_c\\z_c \end{matrix}\right] ximgyimg1=fα000fβ0001xy1=zc1fα000fβ0001xcyczc

  这就是相机中的点 P c ( x c , y c , z c ) P_c(x_c,y_c,z_c) Pc(xc,yc,zc)到物理像平面中对应点 p i m g ( x i m g , y i m g ) p_{img}(x_{img},y_{img}) pimg(ximg,yimg)的变换矩阵。

  其中 f f f为焦距,即物理平面到光心的距离,单位毫米。 α \alpha α β \beta β分别表示归一化平面上每单位(mm)对应包含物理平面上 x x x y y y方向像素的个数。所以, f α f_{\alpha} fα f β f_{\beta} fβ分别为以 x x x y y y方向上以像素为单位的焦距; x i m g x_{img} ximg y i m g y_{img} yimg单位为像素。

4.把物理平面像坐标转到图像坐标系

  常用的图像坐标系为以图像左上角为原点,x方向朝右,y朝下的坐标系;但是物理坐标系原点在图像中央:
在这里插入图片描述
  设图像中央的坐标为 ( u 0 , v 0 ) (u_0,v_0) (u0,v0),则图像坐标( ( u , v ) (u,v) (u,v),左上角为原点)为:
[ u v ] = [ x i m g + u 0 y i m g + v 0 ] = [ f α x + u 0 f β y + v 0 ] = [ f α x + u 0 f β y + v 0 ] \left[\begin{matrix}u\\v \end{matrix}\right]=\left[\begin{matrix}x_{img}+u_0\\y_{img}+v_0 \end{matrix}\right]= \left[\begin{matrix}f\alpha x+u_0\\ f\beta y+v_0 \end{matrix}\right]=\left[\begin{matrix}f_{\alpha}x+u_0\\ f_{\beta}y+v_0 \end{matrix}\right] [uv]=[ximg+u0yimg+v0]=[fαx+u0fβy+v0]=[fαx+u0fβy+v0]

  写成其次矩阵:

[ u v 1 ] = 1 z c [ f α 0 u 0 0 f β v 0 0 0 1 ] [ x c y c z c ] \left[\begin{matrix}u\\v\\1 \end{matrix}\right]= \frac{1}{z_c}\left[\begin{matrix}f_{\alpha}&0&u_0\\ 0&f_{\beta}&v_0\\0&0&1 \end{matrix}\right] \left[\begin{matrix}x_c\\ y_c\\z_c \end{matrix}\right] uv1=zc1fα000fβ0u0v01xcyczc

  一般情况下,像素为正方形,则有 f = f α = f β f=f_{\alpha}=f_{\beta} f=fα=fβ

5.把上述步骤都串起来

  把上面四部串起来就是针孔相机的成像过程:

[ u v 1 ] = 1 z c [ f α 0 u 0 0 f β v 0 0 0 1 ] [ x c y c z c ] = 1 z c [ f α 0 u 0 0 f β v 0 0 0 1 ] [ R t ] [ X w 1 ] = 1 z c K [ R t ] [ x w y w z w 1 ] \left[\begin{matrix}u\\v\\1 \end{matrix}\right]= \frac{1}{z_c}\left[\begin{matrix}f_{\alpha}&0&u_0\\ 0&f_{\beta}&v_0\\0&0&1 \end{matrix}\right] \left[\begin{matrix}x_c\\ y_c\\z_c \end{matrix}\right]=\frac{1}{z_c}\left[\begin{matrix}f_{\alpha}&0&u_0\\ 0&f_{\beta}&v_0\\0&0&1 \end{matrix}\right] \left[\begin{matrix}R&t \end{matrix}\right] \left[\begin{matrix}X_w\\1 \end{matrix}\right]=\frac{1}{z_c}K \left[\begin{matrix}R&t \end{matrix}\right] \left[\begin{matrix}x_w\\y_w\\z_w\\1 \end{matrix}\right] uv1=zc1fα000fβ0u0v01xcyczc=zc1fα000fβ0u0v01[Rt][Xw1]=zc1K[Rt]xwywzw1

整个投影过程可变为 3 × 4 3\times 4 3×4的矩阵: P 3 × 4 = K [ R t ] P_{3\times 4}=K \left[\begin{matrix}R&t \end{matrix}\right] P3×4=K[Rt]

其中, K = [ f α 0 u 0 0 f β v 0 0 0 1 ] K=\left[\begin{matrix}f_{\alpha}&0&u_0\\ 0&f_{\beta}&v_0\\0&0&1 \end{matrix}\right] K=fα000fβ0u0v01中包含的 f α f_{\alpha} fα, f β f_{\beta} fβ, u 0 u_0 u0, v 0 v_0 v0为相机的内参(还有径向畸变系数 k 1 k_1 k1, k 2 k_2 k2).

R = R z ( γ ) R y ( β ) R x ( α ) = [ c o s γ s i n γ 0 − s i n γ c o s γ 0 0 0 1 ] × [ c o s β s i n β 0 0 1 0 − s i n α 0 c o s β ] × [ 1 0 0 0 c o s α s i n α 0 − s i n α c o s α ] R=R_z(\gamma)R_y(\beta)R_x(\alpha)=\left[\begin{matrix}cos{\gamma}&sin{\gamma}&0&\\-sin{\gamma}&cos{\gamma}&0&\\0&0&1& \end{matrix}\right]\times \left[\begin{matrix}cos{\beta}&sin{\beta}&0\\0&1&0&\\-sin{\alpha}&0&cos{\beta}& \end{matrix}\right] \times \left[\begin{matrix}1&0&0&\\0&cos{\alpha}&sin{\alpha}&\\0&-sin{\alpha}&cos{\alpha}& \end{matrix}\right] R=Rz(γ)Ry(β)Rx(α)=cosγsinγ0sinγcosγ0001×cosβ0sinαsinβ1000cosβ×1000cosαsinα0sinαcosα

和平移向量 t = [ a b c ] t=\left[\begin{matrix}a\\b\\c \end{matrix}\right] t=abc为外参。

外参确定的过程对应计算机视觉中的姿态估计任务,内参确定过程对应相机标定任务。

关于径向畸变系数

径向畸变成因:相机的透镜不是理想的透镜,因此会产生直线变弯曲现象。

公式:
[ x ~ y ~ ] = ( 1 + k 1 r 2 + k 2 r 4 ) [ x y ] \left[\begin{matrix}\tilde{x}\\\tilde{y} \end{matrix}\right]=(1+k_1r^2+k_2r^4)\left[\begin{matrix}x\\y \end{matrix}\right] [x~y~]=(1+k1r2+k2r4)[xy] (可见径向畸变发生在归一化像平面上)

r 2 = x 2 + y 2 r^2=x^2+y^2 r2=x2+y2

( x x x, y y y为归一化平面上的点, x ~ \tilde{x} x~ y ~ \tilde{y} y~表示畸变后的在物理像平面上的点(单位为像素))

[ u ~ v ~ ] = f [ x ~ y ~ ] + [ u 0 v 0 ] \left[\begin{matrix}\tilde{u}\\\tilde{v} \end{matrix}\right]=f\left[\begin{matrix}\tilde{x}\\\tilde{y} \end{matrix}\right]+\left[\begin{matrix}u_0\\v_0 \end{matrix}\right] [u~v~]=f[x~y~]+[u0v0]

k 1 k_1 k1, k 2 k_2 k2为径向畸变系数; r 2 r^2 r2表示图像距离中心点的距离的平方,由此可见,距离图像中心越远的点,畸变程度越大,见下图:
在这里插入图片描述

径向畸变系数估计方法—最小二乘法

理想情况投影点的坐标:
[ u v ] = f [ x y ] + [ u 0 v 0 ] \left[\begin{matrix}u\\v \end{matrix}\right]=f\left[\begin{matrix}x\\y \end{matrix}\right]+\left[\begin{matrix}u_0\\v_0 \end{matrix}\right] [uv]=f[xy]+[u0v0]

即:
f [ x y ] = [ u − u 0 v − v 0 ] f\left[\begin{matrix}x\\y \end{matrix}\right]=\left[\begin{matrix}u-u_0\\v-v_0 \end{matrix}\right] f[xy]=[uu0vv0]

畸变情况下的投影点的坐标:

[ u ~ v ~ ] = f [ x ~ y ~ ] + [ u 0 v 0 ] \left[\begin{matrix}\tilde{u}\\\tilde{v} \end{matrix}\right]=f\left[\begin{matrix}\tilde{x}\\\tilde{y} \end{matrix}\right]+\left[\begin{matrix}u_0\\v_0 \end{matrix}\right] [u~v~]=f[x~y~]+[u0v0]

即:

f [ x ~ y ~ ] = [ u ~ − u 0 v ~ − v 0 ] f\left[\begin{matrix}\tilde{x}\\\tilde{y} \end{matrix}\right]=\left[\begin{matrix}\tilde{u}-u_0\\\tilde{v}-v_0 \end{matrix}\right] f[x~y~]=[u~u0v~v0]

因为畸变是发生在归一化像平面上,对应的也就等价于发生在物理像平面上,所以由公式:
[ x ~ y ~ ] = ( 1 + k 1 r 2 + k 2 r 4 ) [ x y ] \left[\begin{matrix}\tilde{x}\\\tilde{y} \end{matrix}\right]=(1+k_1r^2+k_2r^4)\left[\begin{matrix}x\\y \end{matrix}\right] [x~y~]=(1+k1r2+k2r4)[xy]
得:
公式:
f [ x ~ y ~ ] = ( 1 + k 1 r 2 + k 2 r 4 ) f [ x y ] f\left[\begin{matrix}\tilde{x}\\\tilde{y} \end{matrix}\right]=(1+k_1r^2+k_2r^4)f\left[\begin{matrix}x\\y \end{matrix}\right] f[x~y~]=(1+k1r2+k2r4)f[xy]

即:
[ u ~ − u 0 v ~ − v 0 ] = ( 1 + k 1 r 2 + k 2 r 4 ) [ u − u 0 v − v 0 ] \left[\begin{matrix}\tilde{u}-u_0\\\tilde{v}-v_0 \end{matrix}\right]=(1+k_1r^2+k_2r^4)\left[\begin{matrix}u-u_0\\v-v_0 \end{matrix}\right] [u~u0v~v0]=(1+k1r2+k2r4)[uu0vv0]

即:
u ~ − u 0 = ( 1 + k 1 r 2 + k 2 r 4 ) ( u − u 0 ) \tilde{u}-u_0=(1+k_1r^2+k_2r^4)(u-u_0) u~u0=(1+k1r2+k2r4)(uu0)

u ~ = ( 1 + k 1 r 2 + k 2 r 4 ) u − ( k 1 r 2 + k 2 r 4 ) u 0 \tilde{u}=(1+k_1r^2+k_2r^4)u-(k_1r^2+k_2r^4)u_0 u~=(1+k1r2+k2r4)u(k1r2+k2r4)u0

u ~ − u = ( k 1 r 2 + k 2 r 4 ) u − ( k 1 r 2 + k 2 r 4 ) u 0 \tilde{u}-u=(k_1r^2+k_2r^4)u-(k_1r^2+k_2r^4)u_0 u~u=(k1r2+k2r4)u(k1r2+k2r4)u0

u ~ − u = k 1 r 2 ( u − u 0 ) + k 2 r 4 ( u − u 0 ) \tilde{u}-u=k_1r^2(u-u_0)+k_2r^4(u-u_0) u~u=k1r2(uu0)+k2r4(uu0)

同理:
v ~ − v = k 1 r 2 ( v − v 0 ) + k 2 r 4 ( v − v 0 ) \tilde{v}-v=k_1r^2(v-v_0)+k_2r^4(v-v_0) v~v=k1r2(vv0)+k2r4(vv0)

写成矩阵:
[ ( u − u 0 ) r 2 ( u − u 0 ) r 4 ( v − v 0 ) r 2 ( v − v 0 ) r 4 ] [ k 1 k 2 ] = [ u ~ − u v ~ − v ] \left[\begin{matrix}(u-u_0)r^2&(u-u_0)r^4\\(v-v_0)r^2&(v-v_0)r^4 \end{matrix}\right]\left[\begin{matrix}k_1\\k_2 \end{matrix}\right]=\left[\begin{matrix}\tilde{u}-u\\\tilde{v}-v \end{matrix}\right] [(uu0)r2(vv0)r2(uu0)r4(vv0)r4][k1k2]=[u~uv~v]

左边表示无畸变的点,右边表示有畸变的点。所以,只需要知道 [ u ~ v ~ ] \left[\begin{matrix}\tilde{u}\\\tilde{v} \end{matrix}\right] [u~v~] [ u v ] \left[\begin{matrix}u\\v \end{matrix}\right] [uv]的对应关系,就可以用最小二乘法计算 k 1 k_1 k1 k 2 k_2 k2了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值