Geometric Camera Calibration

Geometric camera calibration using circular control points

链接http://www.ee.oulu.fi/~jth/calibr/

作者:竹石

相机标定可以归纳为 P − n − P P-n-P PnP​​​​(Perspective-n-Point)的问题,即已知三维物点坐标和对应的二维投影坐标,求解相机参数。由于镜头的畸变(径向和切向)带来非线性成像模型,一般求解方法分为两步:

  • 不考虑畸变,成像模型为线性模型,利用线性求解方法求出初始解
  • 考虑畸变,利用初始解和成像模型对三维物点投影得到的投影点观测点形成最优问题, 通过最小二乘进行估计。

这篇文章的精彩之处在于给出逆畸变模型,在上两步的基础上,利用逆畸变模型进一步优化畸变参数。

文章的主要框架内容:

在这里插入图片描述

1.相机模型

1.1正投影模型

[ u v 1 ] = λ P [ R t 0 T 1 ] [ X w Y w Z w 1 ] = λ F [ X w Y w Z w 1 ] (1) \left[\begin{array}{l} u \\ v \\ 1 \end{array}\right]=\lambda P\left[\begin{array}{cc} R& t \\ 0^{T} & 1 \end{array}\right]\left[\begin{array}{l} X_w \\ Y_w \\ Z_w \\ 1 \end{array}\right]=\lambda F\left[\begin{array}{l} X_w \\ Y_w \\ Z_w \\ 1 \end{array}\right] \tag{1} uv1 =λP[R0Tt1] XwYwZw1 =λF XwYwZw1 (1)

其中, A w = [ X w Y w Z w ] T A_w=[X_w \quad Y_w \quad Z_w]^T Aw=[XwYwZw]T​​ 表示世界坐标系某一物点,$a=[u \quad v]^T $ 表示图像坐标系中的投影点, λ \lambda λ​表示缩放因子。

相机的内参
P = [ s f 0 u 0 0 0 f v 0 0 0 0 1 0 ] {P}=\left[\begin{array}{llll} sf & 0 & u_{0} & 0 \\ 0 & f & v_{0} & 0 \\ 0 & 0 & 1 & 0 \end{array}\right] P= sf000f0u0v01000
其中 f f f表示焦距, ( u 0 , v 0 ) (u_0,v_0) (u0,v0)表示主点坐标, s s s​表示横纵比。

相机的外参

旋转矩阵 R R R​ 是一个 3 × 3 3\times 3 3×3​的正交旋转矩阵,可用三个欧拉角 w w w​、 φ \varphi φ​ 、 k k k​ 定义;平移矩阵 t = [ t x t y t z ] t=[t_x \quad t_y \quad t_z] t=[txtytz]​​。

相机的畸变模型
a c = a d + F D ( a d , δ ) (2) a_c=a_d+\mathcal{F}_{D}\left(\mathbf{a}_{d}, \delta\right)\tag{2} ac=ad+FD(ad,δ)(2)
其中 a c = [ u c v c ] T a_c=[u_c \quad v_c]^T ac=[ucvc]T表示矫正后的投影点, a d = [ u d v d ] T a_d=[u_d \quad v_d]^T ad=[udvd]T表示畸变点。 F D ( a d , δ ) \mathcal{F}_{D}\left(\mathbf{a}_{d}, \delta\right) FD(ad,δ)​为多项式,表示如下,
F D ( a d , δ ) = [ u ˉ d ( k 1 r d 2 + k 2 r d 4 + k 3 r d 6 + … ) + ( 2 p 1 u ˉ d v ˉ d + p 2 ( r d 2 + 2 u ˉ d 2 ) ) ( 1 + p 3 r d 2 + … ) v ˉ d ( k 1 r d 2 + k 2 r d 4 + k 3 r d 6 + … ) + ( p 1 ( r d 2 + 2 v ˉ d 2 ) + 2 p 2 u ˉ d v ˉ d ) ( 1 + p 3 r d 2 + … ) ] \mathcal{F}_{D}\left(\mathbf{a}_{d}, \delta\right)=\left[\begin{array}{l} \bar{u}_{d}\left(k_{1} r_{d}^{2}+k_{2} r_{d}^{4}+k_{3} r_{d}^{6}+\ldots\right)+\left(2 p_{1} \bar{u}_{d} \bar{v}_{d}+p_{2}\left(r_{d}^{2}+2 \bar{u}_{d}^{2}\right)\right)\left(1+p_{3} r_{d}^{2}+\ldots\right) \\ \bar{v}_{d}\left(k_{1} r_{d}^{2}+k_{2} r_{d}^{4}+k_{3} r_{d}^{6}+\ldots\right)+\left(p_{1}\left(r_{d}^{2}+2 \bar{v}_{d}^{2}\right)+2 p_{2} \bar{u}_{d} \bar{v}_{d}\right)\left(1+p_{3} r_{d}^{2}+\ldots\right) \end{array}\right] FD(ad,δ)=[uˉd(k1rd2+k2rd4+k3rd6+)+(2p1uˉdvˉd+p2(rd2+2uˉd2))(1+p3rd2+)vˉd(k1rd2+k2rd4+k3rd6+)+(p1(rd2+2vˉd2)+2p2uˉdvˉd)(1+p3rd2+)]
其中 δ = [ k 1 , k 2 , … , p 1 , p 2 , … ] T \delta=\left[k_{1}, k_{2}, \ldots, p_{1}, p_{2}, \ldots\right]^{\mathrm{T}} δ=[k1,k2,,p1,p2,]T为畸变系数,$k_1,k_2,…… 表示径向畸变系数, 表示径向畸变系数, 表示径向畸变系数,p_1,p_2,…… 表示切向畸变系数, 表示切向畸变系数, 表示切向畸变系数,r_{c}{2}=u_{c}{2}+v_{c}^{2}$。

1.2反投影模型

设平面 Π Π Π​ 以 h 0 = [ X 0 Y 0 Z 0 ] h_0=[X_0\quad Y_0\quad Z_0] h0=[X0Y0Z0]​为原点,以 h 1 = [ X 1 Y 1 Z 1 ] h_1=[X_1\quad Y_1\quad Z_1] h1=[X1Y1Z1]​和 h 2 = [ X 2 Y 2 Z 2 ] h_2=[X_2\quad Y_2\quad Z_2] h2=[X2Y2Z2]​为两个基。则平面 Π Π Π​上的任意一点 ( X H , Y H ) (X_H,Y_H) (XH,YH)​​对应的世界坐标系为: X H h 1 + Y H h 2 + h 0 X_H h_1+Y_Hh_2+h_0 XHh1+YHh2+h0​​。

即:
[ h 1 h 2 h 0 0 0 1 ] [ X H Y H 1 ] = H [ X H Y H 1 ] \left[\begin{array}{ccc} h_{1} & h_{2} & h_{0} \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{c} X_{H} \\ Y_{H} \\ 1 \end{array}\right]=H\left[\begin{array}{c} X_{H} \\ Y_{H} \\ 1 \end{array}\right] [h10h20h01] XHYH1 =H XHYH1
正投影模型为:
[ u H v H 1 ] = F P H = λ F H [ X H Y H 1 ] \left[\begin{array}{c} u_{H} \\ v_{H} \\ 1 \end{array}\right]=F P_{H}=\lambda F H\left[\begin{array}{c} X_{H} \\ Y_{H} \\ 1 \end{array}\right] uHvH1 =FPH=λFH XHYH1
即反投影模型:
λ [ X H Y H 1 ] = ( F H ) − 1 [ u H v H 1 ] (3) \lambda\left[\begin{array}{c} X_{H} \\ Y_{H} \\ 1 \end{array}\right]=(F H)^{-1}\left[\begin{array}{c} u_{H} \\ v_{H} \\ 1 \end{array}\right] \tag{3} λ XHYH1 =(FH)1 uHvH1 (3)

1.3需要标定的参数:

6个相机外参:
t x 、 t y 、 t z 、 w 、 φ 、 k t_x、t_y、t_z、w、\varphi、k txtytzwφk
8个相机内参(仅考虑了径向和切向起主导的前两个畸变系数):
s 、 f 、 u 0 、 v 0 、 k 1 、 k 2 、 p 1 、 p 2 s、f、u_0、v_0、k_1、k_2、p_1、p_2 sfu0v0k1k2p1p2

2.圆形标定点的偏差校正

透视投影不是保形变换,直线在透视投影模型下为直线,一般二维或三维形状与图像平面不共面时会发生变形。常用的标定板是棋盘格,棋盘格的角点是包型变换,但不易精准检测。圆形标定板也是校准中常用的标定板,圆形可以准确的找到中心点,但通过透视投影圆心会发生偏差。

在这里插入图片描述

平面二次曲线一般形式:
A X H 2 + 2 B X H Y H + C Y H 2 + 2 D X H + 2 E Y H + F = 0 A X_{H}^{2}+2 B X_{H} Y_{H}+C Y_{H}^{2}+2 D X_{H}+2 E Y_{H}+F=0 AXH2+2BXHYH+CYH2+2DXH+2EYH+F=0
矩阵形式:
[ X H Y H 1 ] [ A B D B C E D E F ] [ X H Y H 1 ] = 0 \left[\begin{array}{lll} X_{H} & Y_{H} & 1 \end{array}\right]\left[\begin{array}{ccc} A & B & D \\ B & C & E \\ D & E & F \end{array}\right]\left[\begin{array}{c} X_{H} \\ Y_{H} \\ 1 \end{array}\right]=0 [XHYH1] ABDBCEDEF XHYH1 =0
令:
Q = [ A B D B C E D E F ] Q=\left[\begin{array}{lll} A & B & D \\ B & C & E \\ D & E & F \end{array}\right] Q= ABDBCEDEF
则圆的表示形式:
Q = [ − 1 r 2 0 0 0 − 1 r 2 0 0 0 1 ] \begin{aligned} Q=\left[\begin{array}{ccc} -\frac{1}{r^{2}} & 0 & 0 \\ 0 & -\frac{1}{r^{2}} & 0 \\ 0 & 0 & 1 \end{array}\right] \end{aligned} Q= r21000r210001
得:
[ X H Y H 1 ] Q [ X H Y H 1 ] = 0 (4) \left[\begin{array}{lll} X_{H} & Y_{H} & 1 \end{array}\right] \mathrm{Q}\left[\begin{array}{c} X_{H} \\ Y_{H} \\ 1 \end{array}\right]=0 \tag{4} [XHYH1]Q XHYH1 =0(4)
因为反相机模型:
λ [ X H Y H 1 ] = ( F H ) − 1 [ u H v H 1 ] (5) \lambda\left[\begin{array}{c} X_{H} \\ Y_{H} \\ 1 \end{array}\right]=(F H)^{-1}\left[\begin{array}{c} u_{H} \\ v_{H} \\ 1 \end{array}\right] \tag{5} λ XHYH1 =(FH)1 uHvH1 (5)
(5)带入(4)得

( ( F H ) − 1 [ u H v H 1 ] ) T Q ( F H ) − 1 [ u H v H 1 ] = 0 \left(\begin{array}{l} (F H)^{-1}\left[\begin{array}{c} u_{H} \\ v_{H} \\ 1 \end{array}\right] \end{array}\right)^{T} Q(F H)^{-1}\left[\begin{array}{c} u_{H} \\ v_{H} \\ 1 \end{array}\right]=0 (FH)1 uHvH1 TQ(FH)1 uHvH1 =0
进一步整理:
( [ u H v H 1 ] ) T ( ( F H ) − 1 ) T Q ( F H ) − 1 [ u H v H 1 ] = 0 \left(\left[\begin{array}{c} u_{H} \\ v_{H} \\ 1 \end{array}\right]\right)^{T}\left((F H)^{-1}\right)^{T} Q(F H)^{-1}\left[\begin{array}{c} u_{H} \\ v_{H} \\ 1 \end{array}\right]=0 uHvH1 T((FH)1)TQ(FH)1 uHvH1 =0
S = ( ( F H ) − 1 ) T Q ( F H ) − 1 S=\left((F H)^{-1}\right)^{T} Q(F H)^{-1} S=((FH)1)TQ(FH)1,则 S − 1 = F H Q − 1 H T F T S^{-1}=F H Q^{-1} H^{T} F^{T} S1=FHQ1HTFT​。​

G = H Q − 1 H T G=H Q^{-1} H^{T} G=HQ1HT,由引文[1]得:
λ [ u e v e 1 ] = F G F T [ 0 0 1 ] = F G f 3 (6) \lambda\left[\begin{array}{l} u_{e} \\ v_{e} \\ 1 \end{array}\right]=F G F^{T}\left[\begin{array}{l} 0 \\ 0 \\ 1 \end{array}\right]=F G f_{3}\tag{6} λ ueve1 =FGFT 001 =FGf3(6)
其中 f 3 f_{3} f3 表示 F F F 的最后一行,利用(6)代替相机正投影模型(1)可以修正椭圆的中心,获得无偏估计

3.逆畸变模型

畸变矫正:
a c = a d + F D ( a d , δ ) (7) a_{c}=a_{d}+\mathcal{F}_{D}\left(a_{d}, \delta\right) \tag{7} ac=ad+FD(ad,δ)(7)
其中, 正确或矫正后的坐标 a c = [ u c , v c ] T ; a_{c}=\left[u_{c}, v_{c}\right]^{T} ; ac=[uc,vc]T; 畸变坐标: a d = [ u d , v d ] T a_{d}=\left[u_{d}, v_{d}\right]^{T} ad=[ud,vd]T​ 。

3.1递归逆畸变模型

由(4)可得:
a d = a c − F D ( a d , δ ) = a c − F D ( a c − F D ( a d , δ ) , δ ) = ⋯ a_{d}=a_{c}-\mathcal{F}_{D}\left(a_{d}, \delta\right)=a_{c}-\mathcal{F}_{D}\left(a_{c}-\mathcal{F}_{D}\left(a_{d}, \delta\right), \delta\right)=\cdots ad=acFD(ad,δ)=acFD(acFD(ad,δ),δ)=
在每次迭代中,等号右侧用(7)替换 a d a_d ad​​时会使误差减少。在实践中,至少需要三到四次迭代来补偿镜头畸变,需要在图像的不同位置多次评估失真函数,使得递归逆畸变模型不实用。

3.2非递归逆畸变模型:

采用一阶泰勒级数对 F D ( a d , δ ) \mathcal{F}_{D}\left(a_{d}, \delta\right) FD(ad,δ)​近似表示:
F D ( a d , δ ) ≈ F D ( a c , δ ) + D ( a c ) ( a d − a c ) \begin{aligned} &\mathcal{F}_{D}\left(a_{d}, \delta\right) \approx \mathcal{F}_{D}\left(a_{c}, \delta\right)+D\left(a_{c}\right)\left(a_{d}-a_{c}\right) \\ \end{aligned} FD(ad,δ)FD(ac,δ)+D(ac)(adac)
(7)可以表示为:
a c ≈ a d + F D ( a c , δ ) + D ( a c ) ( a d − a c ) a_{c} \approx a_{d}+\mathcal{F}_{D}\left(a_{c}, \delta\right)+D\left(a_{c}\right)\left(a_{d}-a_{c}\right) acad+FD(ac,δ)+D(ac)(adac)
则,
a d ≈ a c − 1 d 11 ( a c ) + d 22 ( a c ) + 1 F D ( a c , δ ) ≡ a c − F D ∗ ( a c , δ ) a_{d} \approx a_{c}-\frac{1}{d_{11}\left(a_{c}\right)+d_{22}\left(a_{c}\right)+1} \mathcal{F}_{D}\left(a_{c}, \delta\right) \equiv a_{c}-\mathcal{F}_{D}^{*}\left(a_{c}, \delta\right) adacd11(ac)+d22(ac)+11FD(ac,δ)acFD(ac,δ)
两个径向 k 1 k_{1} k1 k 2 k_{2} k2 及切向畸变系数 p 1 p_{1} p1 p 2 p_{2} p2, 则逆畸变模型的近似值表示:
F D ∗ ( a c , δ ) ≈ F D ( a c , δ ) 4 k 1 r c 2 + 6 k 2 r c 4 + 8 p 1 v c + 8 p 2 u c + 1 (8) \mathcal{F}_{D}^{*}\left(a_{c}, \delta\right) \approx \frac{\mathcal{F}_{D}\left(a_{c}, \delta\right)}{4 k_{1} r_{c}^{2}+6 k_{2} r_{c}^{4}+8 p_{1} v_{c}+8 p_{2} u_{c}+1} \tag{8} FD(ac,δ)4k1rc2+6k2rc4+8p1vc+8p2uc+1FD(ac,δ)(8)
其中, r c 2 = u c 2 + v c 2 r_{c}^{2}=u_{c}^{2}+v_{c}^{2} rc2=uc2+vc2
那么对像素点 a c a_{c} ac, 利用逆畸变模型进行畸变后的坐标表示为 a d a_{d} ad, 数学描述为:
a d ≈ a c − F D ∗ ( a c , δ ) (9) a_{d} \approx a_{c}-\mathcal{F}_{D}^{*}\left(a_{c}, \delta\right)\tag{9} adacFD(ac,δ)(9)

4.利用逆畸变模型优化畸变系数

通过step1和step2得到的相机参数,利用公式(7)进行矫正,得到矫正坐标 a c a_c ac​​。利用(9)对矫正坐标 a c a_c ac​进行扭曲得到扭曲坐标,则:

a c − a d = F D ( a d , δ ) = B δ (10) a_{c}-a_{d}=\mathcal{F}_{D}\left(a_{d}, \delta\right)=B \delta\tag{10} acad=FD(ad,δ)=Bδ(10)
畸变系数:
F D ( a d , δ ) = [ u ˉ d ( k 1 r d 2 + k 2 r d 4 + k 3 r d 6 + … ) + ( 2 p 1 u ˉ d v ˉ d + p 2 ( r d 2 + 2 u ˉ d 2 ) ) ( 1 + p 3 r d 2 + … ) v ˉ d ( k 1 r d 2 + k 2 r d 4 + k 3 r d 6 + … ) + ( p 1 ( r d 2 + 2 v ˉ d 2 ) + 2 p 2 u ˉ d v ˉ d ) ( 1 + p 3 r d 2 + … ) ] \mathcal{F}_{D}\left(\mathbf{a}_{d}, \delta\right)=\left[\begin{array}{l} \bar{u}_{d}\left(k_{1} r_{d}^{2}+k_{2} r_{d}^{4}+k_{3} r_{d}^{6}+\ldots\right)+\left(2 p_{1} \bar{u}_{d} \bar{v}_{d}+p_{2}\left(r_{d}^{2}+2 \bar{u}_{d}^{2}\right)\right)\left(1+p_{3} r_{d}^{2}+\ldots\right) \\ \bar{v}_{d}\left(k_{1} r_{d}^{2}+k_{2} r_{d}^{4}+k_{3} r_{d}^{6}+\ldots\right)+\left(p_{1}\left(r_{d}^{2}+2 \bar{v}_{d}^{2}\right)+2 p_{2} \bar{u}_{d} \bar{v}_{d}\right)\left(1+p_{3} r_{d}^{2}+\ldots\right) \end{array}\right] FD(ad,δ)=[uˉd(k1rd2+k2rd4+k3rd6+)+(2p1uˉdvˉd+p2(rd2+2uˉd2))(1+p3rd2+)vˉd(k1rd2+k2rd4+k3rd6+)+(p1(rd2+2vˉd2)+2p2uˉdvˉd)(1+p3rd2+)]
B B B 矩阵可以写为:
B ( i ) = [ u ˉ d ( i ) r d 2 ( i ) u ˉ d ( i ) r d 4 ( i ) … 2 u ˉ d ( i ) v ˉ d ( i ) r d 2 ( i ) + 2 u ˉ d 2 ( i ) … v ˉ d ( i ) r d 2 ( i ) v ˉ d ( i ) r d 4 ( i ) … r d 2 ( i ) + 2 v ˉ d 2 ( i ) 2 u ˉ d ( i ) v ˉ d ( i ) … ] \mathbf{B}(i)=\left[\begin{array}{lllll} \bar{u}_{d}(i) r_{d}^{2}(i) & \bar{u}_{d}(i) r_{d}^{4}(i) & \ldots & 2 \bar{u}_{d}(i) \bar{v}_{d}(i) & r_{d}^{2}(i)+2 \bar{u}_{d}^{2}(i) & \ldots \\ \bar{v}_{d}(i) r_{d}^{2}(i) & \bar{v}_{d}(i) r_{d}^{4}(i) & \ldots & r_{d}^{2}(i)+2 \bar{v}_{d}^{2}(i) & 2 \bar{u}_{d}(i) \bar{v}_{d}(i) & \ldots \end{array}\right] B(i)=[uˉd(i)rd2(i)vˉd(i)rd2(i)uˉd(i)rd4(i)vˉd(i)rd4(i)2uˉd(i)vˉd(i)rd2(i)+2vˉd2(i)rd2(i)+2uˉd2(i)2uˉd(i)vˉd(i)]
δ \delta δ 矩阵可以写为:
δ = [ k 1 k 2 … p 1 p 2 … k 1 k 2 … p 1 p 2 … ] \delta=\left[\begin{array}{llllll} k_{1} & k_{2} & \ldots & p_{1} & p_{2} & \ldots \\ k_{1} & k_{2} & \ldots & p_{1} & p_{2} & \ldots \end{array}\right] δ=[k1k1k2k2p1p1p2p2]
则畸变系数优化求解方法:
δ = [ B ] + [ a c − a d ] \delta=[B]^{+}\left[a_{c}-a_{d}\right] δ=[B]+[acad]
其中, [ . ] + [.]^+ [.]+表示矩阵的伪逆。

5.验证逆畸变模型的精度

在这里插入图片描述

求未矫正坐标和扭曲坐标的距离 ∣ a d − a 0 ∣ |a_d-a_0| ada0​​​​来验证逆畸变模型的正确性。

在这里插入图片描述

未矫正坐标和扭曲坐标之间的差异可用直方图表示,表明误差小于0.01像素。

在这里插入图片描述

引文:

[1]K. Kanatani,Geometric computation for Machine Vision, Oxford: Clarendon Press, 1993.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值