视觉SLAM十四讲学习3 相机模型,齐次坐标,畸变原理

视觉SLAM十四讲学习3 相机模型,畸变原理

前言

《十四讲》书中的顺序是李群、李代数,然后相机模型。

本篇调换一下顺序,首先讲相机模型和畸变原理。

针孔相机模型

针孔相机模型是最常用的相机模型。计算时,假设成像平面在相机前方。
在这里插入图片描述
对于相机坐标系下的一个点 P = ( X , Y , Z ) P=(X,Y,Z) P=(X,Y,Z),在物理成像平面上的坐标 P ′ P' P ( x , y , z ) (x,y,z) (x,y,z),根据相似三角形有:
x X = y Y = f Z x = f X Z y = f Y Z z = f \frac{x}{X}=\frac{y}{Y}=\frac{f}{Z} \\ \quad \\ x=f\frac{X}{Z} \\ \quad \\ y=f\frac{Y}{Z} \\ \quad \\ z = f Xx=Yy=Zfx=fZXy=fZYz=f
假设物理成像平面所在的位置为 z = 1 z=1 z=1,则 P ′ = ( X / Z , Y / Z , 1 ) P'=(X/Z,Y/Z,1) P=(X/Z,Y/Z,1)

除了物理成像外,相机还需要对物理成像平面进行采样和量化,转化为像素。像素平面上,将物理像坐标放大 a a a倍后,再将物理像原点平移到图像的左上角:
u = a x x + c x v = a y y + c y 即 u = f x X Z + c x v = f y Y Z + c y f x = a 1 f , f y = a 2 f u=a_x x+c_x \\ v=a_yy+c_y \\ \quad \\ 即\\ \quad \\ u= f_x\frac{X}{Z}+c_x \\ \quad \\ v=f_y\frac{Y}{Z}+c_y \\ \quad \\ f_x=a_1f,f_y=a_2f u=axx+cxv=ayy+cyu=fxZX+cxv=fyZY+cyfx=a1f,fy=a2f

使用矩阵表示相机坐标到像素坐标模型:
[ u v 1 ] = [ f x 0 c x 0 f y c y 0 0 1 ] [ X Z Y Z 1 ] = 1 Z [ f x 0 c x 0 f y c y 0 0 1 ] [ X Y Z ] s = 1 Z K P \begin{bmatrix} u \\ v \\ 1 \\ \end{bmatrix}= \begin{bmatrix} f_x & 0 &c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} \frac{X}{Z} \\ \frac{Y}{Z} \\ 1 \\ \end{bmatrix} =\frac{1}{Z} \begin{bmatrix} f_x & 0 &c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} X\\ Y \\ Z \\ \end{bmatrix} \\ \quad \\ s=\frac{1}{Z}KP uv1=fx000fy0cxcy1ZXZY1=Z1fx000fy0cxcy1XYZs=Z1KP
K K K是相机内参, P P P是相机坐标系上的点。可以将相机坐标转换到像素坐标的过程,看作是相机内参对相机坐标系平面 z = 1 z=1 z=1上坐标的线性变换。通过光心与点 P P P的光线 P O PO PO上的任意一点,都会投影到像素平面上的同一位置。这就是单目图像不能获取深度的原因。

现实场景中,首先要将世界坐标系下的点转换到相机坐标系下,然后再转换到像素平面上:
s = 1 Z K T c w P w s=\frac{1}{Z}KT_{cw}P_w s=Z1KTcwPw
这里要注意 T c w P w T_{cw}P_w TcwPw将齐次的世界坐标 ( X w , Y w , Z w , 1 ) (X_w,Y_w,Z_w,1) (Xw,Yw,Zw,1)转换到齐次的相机坐标 ( X c , Y c , Z c , 1 ) (X_c,Y_c,Z_c,1) (Xc,Yc,Zc,1);然后要把齐次的相机坐标变为非齐次坐标 ( X c , Y c , Z c ) (X_c,Y_c,Z_c) (Xc,Yc,Zc),并投影到 z = 1 z=1 z=1的相机平面上 ( X c / Z , Y c / Z , 1 ) (X_c/Z,Y_c/Z,1) (Xc/Z,Yc/Z,1),再变换为齐次的像素坐标 ( u , y , 1 ) (u,y,1) (u,y,1)

这里插一条齐次坐标的理解:对于三维世界的坐标 ( x , y , z ) (x,y,z) (x,y,z),为了使用矩阵简化平移计算,需要将坐标扩展到四维空间。而为了保证每个四维坐标都唯一对应三维空间的某个点,因此定义任意四维坐标 ( k x , k y , k z , k ) (kx,ky,kz,k) (kx,ky,kz,k)都表示三维空间中的 ( x , y , z ) (x,y,z) (x,y,z)。能够通过高维坐标表示低纬空间中的点,就是齐次坐标。

畸变原理

之前我写过一篇去畸变相关的博客,这里就直接复制了。

相机的镜头前有一块透镜,由于透镜的形状,当光线穿过透镜时,靠近光轴的光线折射比远离光轴的折射要小,就会产生径向畸变,此时真实世界中的直线在图像中会被弯曲,往外弯曲是枕形畸变,如下图(b),往里弯曲是桶形畸变,如下图(c)在这里插入图片描述
由于透镜不可能完全与相机里的成像面平行,就会造成切向畸变

去畸变方法

假设归一化平面上的点P(x, y),可用极坐标(r, θ)表示,r就是P与归一化平面原点之间的距离,径向畸变就可以视为坐标点沿着距离方向发生改变,可以用畸变参数k1,k2,k3来修正;切向畸变可以看作坐标点的水平夹角发生改变。用多项式进行畸变拟合:
x d i s t o r t = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) ) y d i s t o r t = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 + p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y ) \\x_{distort} =x(1+k_1r^2+k_2r^4+k_3r^6+2p_1xy+p_2(r^2+2x^2))\\ \\y_{distort}=y(1+k_1r^2+k_2r^4+k_3r^6+p_1(r^2+2y^2)+2p_2xy)\\ xdistort=x(1+k1r2+k2r4+k3r6+2p1xy+p2(r2+2x2))ydistort=y(1+k1r2+k2r4+k3r6+p1(r2+2y2)+2p2xy)
将这些畸变后的点在像素平面上的坐标计算出来:
u = f x x d i s t o r t + c x v = f y y d i s t o r t + c y u=f_xx_{distort}+c_x\\ v=f_yy_{distort}+c_y\\ u=fxxdistort+cxv=fyydistort+cy
然后把畸变后的像素放回原本的位置,即去除了畸变。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值