单目相机坐标系转换

此处省略vcs/world/camera/image坐标系的定义介绍了哈

世界坐标系到相机坐标系

3维到3维可逆

[ x c y c z c 1 ] = [ R 3 × 3 t 3 × 1 0 1 × 3 1 ] [ x w y w z w = 0 1 ] (1) \begin{bmatrix} x_{c}\\ y_{c}\\ z_{c}\\ 1 \end{bmatrix}= \begin{bmatrix} R_{3\times3}&t_{3\times1}\\ 0_{1\times3}&1 \end{bmatrix} \begin{bmatrix} x_{w}\\ y_{w}\\ z_{w}=0\\ 1 \end{bmatrix}\tag{1} xcyczc1 =[R3×301×3t3×11] xwywzw=01 (1)

其中 R 3 × 3 R_{3\times3} R3×3为旋转矩阵, t t t为平移向量,它们组成外参矩阵

Q:为什么右边世界坐标系下向量要多设一行1;
A:在齐次坐标系下使用4个分量来描述三维坐标变换,使得变换矩阵形式更加紧凑,不然就得将矩阵拆开写成加法形式
假设在笛卡尔坐标系下有点 P ( p x , p y , p z ) P(p_{x},p_{y},p_{z}) P(px,py,pz),平移向量为 t ( t x , t y , t z ) t(t_{x},t_{y},t_{z}) t(tx,ty,tz),无法找到一个矩阵 M M M使得

M × P = P + t = [ p x + t x p y + t y p z + t z ] M\times P=P+t= \begin{bmatrix} p_{x}+t_{x}\\ p_{y}+t_{y}\\ p_{z}+t_{z} \end{bmatrix} M×P=P+t= px+txpy+typz+tz
但是对于齐次坐标系中的点 P ( p x , p y , p z , 1 ) P(p_{x},p_{y},p_{z},1) P(px,py,pz,1),可以找到一个向量 M M M使得

M × P = P + t = [ p x + t x p y + t y p z + t z 1 ] M\times P=P+t= \begin{bmatrix} p_{x}+t_{x}\\ p_{y}+t_{y}\\ p_{z}+t_{z}\\ 1 \end{bmatrix} M×P=P+t= px+txpy+typz+tz1
其中
M = [ 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ] M= \begin{bmatrix} 1&0&0&t_{x}\\ 0&1&0&t_{y}\\ 0&0&1&t_{z}\\ 0&0&0&1 \end{bmatrix} M= 100001000010txtytz1

相机坐标系到理想图像坐标系(不考虑畸变)

3维到3维,可逆
图像平面(感光板)上某一点 P ( x p , y p , f ) P(x_{p},y_{p},f) P(xp,yp,f),相机坐标系下对应点 P ( x M , y M , z M ) P(x_{M},y_{M},z_{M}) P(xM,yM,zM)
由相似三角形原理得
x p = f x M z M , y p = f y M z M x_{p}=f\frac{x_{M}}{z_{M}},y_{p}=f\frac{y_{M}}{z_{M}} xp=fzMxM,yp=fzMyM
化为齐次坐标
z M [ x p y p 1 ] = [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ x M y M z M 1 ] (2) z_{M} \begin{bmatrix} x_{p}\\ y_{p}\\ 1 \end{bmatrix}=\begin{bmatrix} f&0&0&0\\ 0&f&0&0\\ 0&0&1&0 \end{bmatrix} \begin{bmatrix} x_{M}\\ y_{M}\\ z_{M}\\ 1 \end{bmatrix} \tag{2} zM xpyp1 = f000f0001000 xMyMzM1 (2)
其中, f f f是像距。
实际上像素点再x,y方向上是可能有尺度偏差的,像素块左边与竖直线形成一个夹角a,所以上面矩阵有时写为
z M [ x p y p 1 ] = [ f t a n ( a ) 0 0 0 f 0 0 0 0 1 0 ] [ x M y M z M 1 ] (2) z_{M} \begin{bmatrix} x_{p}\\ y_{p}\\ 1 \end{bmatrix} =\begin{bmatrix} f&tan(a)&0&0\\ 0&f&0&0\\ 0&0&1&0 \end{bmatrix} \begin{bmatrix} x_{M}\\ y_{M}\\ z_{M}\\ 1 \end{bmatrix} \tag{2} zM xpyp1 = f00tan(a)f0001000 xMyMzM1 (2)

从理想图像坐标系到实际图像坐标系(考虑畸变)

3维到3维,可逆
透镜的畸变主要分为径向畸变切向畸变(还有薄透镜畸变等等,但都没有径向和切向畸变影响显著,所以我们在这里只考虑径向和切向畸变)。
径向畸变–>透镜厚度工艺问题(光线在远离透镜中心的地方比靠近中心的地方更加弯曲,导致出现枕型畸变、桶形畸变),表现为极坐标下矢径变化
切向畸变–>组装工艺问题(透镜本身与图像平面不平行),表现为极坐标下角度变化
这部分本人也不了解,可以参考视频介绍:blibli

实际情况中我们常用r=0处的泰勒级数展开的前几项来近似描述径向畸变。矫正径向畸变前后的坐标关系为:
{ x c o r r = x p ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y c o r r = y p ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) (3) \begin{cases} x_{corr}=x_{p}(1+k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6})\\ y_{corr}=y_{p}(1+k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6})\tag{3} \end{cases} {xcorr=xp(1+k1r2+k2r4+k3r6)ycorr=yp(1+k1r2+k2r4+k3r6)(3)
切向畸变需要两个额外的畸变参数来描述,矫正前后的坐标关系为:
{ r 2 = x p 2 + y p 2 x c o r r = x p + [ 2 p 1 x p y p + p 2 ( r 2 + 2 x p 2 ) ] y c o r r = y p + [ p 1 ( r 2 + 2 y p 2 + 2 p 2 x p y p ) ] (4) \begin{cases} r^2=x_{p}^{2}+y_{p}^{2}\\ x_{corr}=x_{p}+[2p_{1}x_{p}y_{p}+p_{2}(r^{2}+2x_{p}^{2})]\\ y_{corr}=y_{p}+[p_{1}(r^2+2y_{p}^{2}+2p_{2}x_{p}y_{p})]\tag{4} \end{cases} r2=xp2+yp2xcorr=xp+[2p1xpyp+p2(r2+2xp2)]ycorr=yp+[p1(r2+2yp2+2p2xpyp)](4)

综上,我们一共需要5个畸变参数 k 1 , k 2 , k 3 , p 1 , p 2 k_{1},k_{2},k_{3},p_{1},p_{2} k1,k2,k3,p1,p2来描述透镜畸变。式(3)中,对于畸变很小的中心区域主要起作用的是 k 1 k_1 k1,对于畸变很大的边缘区域主要起作用的是 k 2 k_2 k2,对于畸变很大的鱼眼相机主要起作用的是 k 3 k_3 k3

从实际图像坐标系到像素坐标系

由于定义的像素坐标系原点与图像坐标系原点不重合,假设像素坐标系原点在图像坐标系下的坐标为 ( u 0 , v 0 ) (u_{0},v_{0}) (u0,v0),单个像素点宽高折算在感光板上得物理长度为 d x , d y d_{x},d_{y} dx,dy
假设像点在实际图像坐标系下的坐标为 x c , y c x_{c},y_{c} xc,yc,于是可得到像点在像素坐标系下的坐标为:
u = f x c d x + u 0 , v = f y c d y + v 0 u=\frac{fx_{c}}{d_{x}}+u_{0},v=\frac{fy_{c}}{d_{y}}+v_{0} u=dxfxc+u0,v=dyfyc+v0
其中, f f f是像距
化为其次坐标表示为
[ u v 1 ] = [ f d x 0 u 0 0 f d y v 0 0 0 1 ] [ x c y c 1 ] (5) \begin{bmatrix} u\\ v\\ 1 \end{bmatrix} =\begin{bmatrix} \frac{f}{d_{x}}&0&u_{0}\\ 0&\frac{f}{d_{y}}&v_{0}\\ 0&0&1 \end{bmatrix} \begin{bmatrix} x_{c}\\ y_{c}\\ 1 \end{bmatrix} \tag{5} uv1 = dxf000dyf0u0v01 xcyc1 (5)

注:有些公式额外提到了感光板横纵边角的系数(通常是90),这里暂不考虑

内外参具体求法

综上,外参公式为式(1),内参公式为式(2)(5),内参公式可以写到一起
假设提供 K K K个棋盘图像,每个棋盘有 N N N个焦点,于是能得到2KN个约束方程。忽略畸变的情况下,需要求解5个内参( u 0 , v 0 , f , d x , d y u_{0},v_{0},f,d_{x},d_{y} u0,v0,f,dx,dy)和6K个外参( θ x , θ y , θ z , t x , t y , t z \theta_{x},\theta_{y},\theta_{z},t_{x},t_{y},t_{z} θx,θy,θz,tx,ty,tz)。当 2 K N ≥ 5 + 6 K 2KN\geq5+6K 2KN5+6K时,就可以解出无畸变条件下的内参和外参

实际上我们往往会在一张棋盘上布置更多的角点,因为这样就可以通过最小二乘法求得最优解了,同样地,我们会需要至少10张以上的棋盘图像,目的是考虑数值稳定性和提高信噪比,得到更高质量的结果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值