张正友标定法过程推导笔记

张正友标定法

1.相机标定的含义

相机标定是世界坐标系与图像坐标系关系建立过程中,确定相机的内部固定参数的过程。比如工业相机在设计时有一个具体的焦距,光心等参数,但是实际做出来可能会和设计时有所偏差,相机标定就是确定相机在实际拍摄使用时的参数。(可以类比电器的额定功率和实际功率)

2.相机标定的输出参数(内参)

相机标定的参数称为内参。主要有光心位置( δ x \delta x δx, δ y \delta y δy),焦距( f x f_x fx, f y f_y fy)。这些参数构成了一个内参矩阵。此外如果考虑畸变的影响,根据不同的畸变模型,输出畸变的参数。

3.外参

外参是拍摄的图像与相机坐标系之间的关系。每张照片不同位置不同角度,外参都不一样。该参数并没有很重要。

4.世界坐标系和图像坐标系转换

这个推导过程因为不是很难也不是重点,此处省略,可以看看这篇文章。https://blog.csdn.net/byyastal/article/details/108474083
它们的转换关系为:
在这里插入图片描述
解释一个里面的重要参数含义:
f x f_x fx:x方向的焦距,注意此处 f = f x ∗ d x f=f_x * dx f=fxdx f f f才是真正光学意义上的焦距(mm), d x dx dx是像元单位,一般是μm级别
f y f_y fy:y方向的焦距,注意此处 f = f x ∗ d x f=f_x * dx f=fxdx
u 0 u_0 u0:图像坐标系x轴起始坐标,一般都是0
v 0 v_0 v0:图像坐标系y轴起始坐标,一般都是0
R R R:旋转矩阵,具体参考旋转矩阵的特点
T T T:平移向量
X w , Y w , Z w X_w,Y_w,Z_w Xw,Yw,Zw:世界坐标系坐标,是一个三维坐标系
u , v u,v u,v:是图像上的坐标,是一个二维坐标
Z c Z_c Zc:是一个缩放因子,同一幅图像中不同点的缩放因子不同,后续公式中的 λ \lambda λ也指的是这个值。

5.求解单应矩阵

要求解内参,第一步是要求解单应矩阵,求解了单应矩阵,后面再进一步通过某些方法(如张正友标定法)求解内参矩阵。一般定标的方法第一步都是如此。
单应矩阵为内参矩阵和外参矩阵的乘积。
即:
在这里插入图片描述
其中, M M M是内参矩阵, s s s为缩放因子的倒数, r 1 r_1 r1 r 2 r_2 r2是旋转矩阵的两个列向量, t t t为平移向量。

单应矩阵的求解过程:
设单应矩阵为H:
H = [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] H=\left[\begin{array}{lll} h_{11} & h_{12} & h_{13} \\ h_{21} & h_{22} & h_{23} \\ h_{31} & h_{32} & h_{33} \end{array}\right] H=h11h21h31h12h22h32h13h23h33
则有:
[ x ′ y ′ 1 ] ∼ [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] [ x y 1 ] \left[\begin{array}{c} x^{\prime} \\ y^{\prime} \\ 1 \end{array}\right] \sim\left[\begin{array}{lll} h_{11} & h_{12} & h_{13} \\ h_{21} & h_{22} & h_{23} \\ h_{31} & h_{32} & h_{33} \end{array}\right]\left[\begin{array}{l} x \\ y \\ 1 \end{array}\right] xy1h11h21h31h12h22h32h13h23h33xy1
矩阵展开后有3个等式,将第3个等式代入前两个等式中可得:
x ′ = h 11 x + h 12 y + h 13 h 31 x + h 32 y + h 33 y ′ = h 21 x + h 22 y + h 23 h 31 x + h 32 y + h 33 \begin{aligned} x^{\prime} &=\frac{h_{11} x+h_{12} y+h_{13}}{h_{31} x+h_{32} y+h_{33}} \\ y^{\prime} &=\frac{h_{21} x+h_{22} y+h_{23}}{h_{31} x+h_{32} y+h_{33}} \end{aligned} xy=h31x+h32y+h33h11x+h12y+h13=h31x+h32y+h33h21x+h22y+h23

也就是说,一个点对对应两个等式。H矩阵我们令 h 3 3 h_33 h33为1,则一共有8个未知数,所以需要至少四个点求解。
在这里插入图片描述
一般都用大于4个的点求解,然后利用LM等优化方法得到最合适的单应矩阵H。具体的话,可以使用matlab和OpenCV中的函数来求解单应矩阵。分别是estimateGeometricTransformfindHomography函数。

5.张正友标定算法

上述步骤中求得了单应矩阵H,则:
H = s [ f x γ u 0 0 f y v 0 0 0 1 ] [ r 1 r 2 t ] = s M [ r 1 r 2 t ] H=s\left[\begin{array}{ccc} f_{x} & \gamma & u_{0} \\ 0 & f_{y} & v_{0} \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{lll} r_{1} & r_{2} & t \end{array}\right]=s M\left[\begin{array}{lll} r_{1} & r_{2} & t \end{array}\right] H=sfx00γfy0u0v01[r1r2t]=sM[r1r2t]

我们知道H是内参矩阵和外参矩阵的混合体,而我们想要最终分别获得内参和外参。所以需要想个办法,先把内参求出来(先求内参是因为更容易,因为每张图片的内参都是固定的,而外参是变化的),得到内参后,那张标定图片的外参也就随之解出了。

为了利用旋转向量之间的约束关系,我们先将单应性矩阵H化为3个列向量,即H=[ h 1 h_1 h1 h 2 h_2 h2 h 3 h_3 h3],则有
H = [ h 1 h 2 h 3 ] = s M [ r 1 r 2 t ] H=\left[\begin{array}{lll} \mathbf{h}_{1} & \mathbf{h}_{2} & \mathbf{h}_{3} \end{array}\right]=s M\left[\begin{array}{lll} r_{1} & r_{2} & t \end{array}\right] H=[h1h2h3]=sM[r1r2t]按元素对应关系可得:
在这里插入图片描述
因为旋转向量在构造中是相互正交的,即r1和r2相互正交,由此我们就可以利用“正交”的两个含义,得出每个单应矩阵提供的两个约束条件:
约束条件1: 旋转向量点积为0(两垂直平面上的旋转向量互相垂直),这个可以参考上面对旋转矩阵的性质介绍 – 旋转矩阵的每一列都是彼此正交,且模为1,即:
在这里插入图片描述
约束条件2: 旋转向量长度相等(旋转不改变尺度),(我认为还是上面的那个性质–旋转矩阵的每一列都是彼此正交,且模为1)即:

( M − 1 ) T M − 1 \left(M^{-1}\right)^{T} M^{-1} (M1)TM1为B展开:

B = ( M − 1 ) T M − 1 = [ 1 f x 2 − γ f x 2 f y v 0 γ − u 0 f y f x 2 f y − γ f x 2 f y γ 2 f x 2 f y 2 + 1 f y 2 − γ v 0 γ − u 0 f y f x 2 f y y 2 − v 0 f y 2 v 0 γ − u 0 f y f x 2 f y − γ v 0 γ − u 0 f y f x 2 f y 2 − v 0 f y 2 ( v 0 γ − u 0 f y ) 2 f x 2 f y 2 + v 0 2 f y 2 + 1 ] = [ B 11 B 12 B 13 B 21 B 22 B 23 B 31 B 32 B 33 ] B=\left(M^{-1}\right)^{T} M^{-1}=\left[\begin{array}{ccc} \frac{1}{f_{x}^{2}} & -\frac{\gamma}{f_{x}^{2} f_{y}} & \frac{v_{0} \gamma-u_{0} f_{y}}{f_{x}^{2} f_{y}} \\ -\frac{\gamma}{f_{x}^{2} f_{y}} & \frac{\gamma^{2}}{f_{x}^{2} f_{y}^{2}}+\frac{1}{f_{y}^{2}} & -\gamma \frac{v_{0} \gamma-u_{0} f_{y}}{f_{x}^{2} f_{y y}^{2}}-\frac{v_{0}}{f_{y}^{2}} \\ \frac{v_{0} \gamma-u_{0} f_{y}}{f_{x}^{2} f_{y}} & -\gamma \frac{v_{0} \gamma-u_{0} f_{y}}{f_{x}^{2} f_{y}^{2}}-\frac{v_{0}}{f_{y}^{2}} & \frac{\left(v_{0} \gamma-u_{0} f_{y}\right)^{2}}{f_{x}^{2} f_{y}^{2}}+\frac{v_{0}^{2}}{f_{y}^{2}}+1 \end{array}\right]=\left[\begin{array}{lll} B_{11} & B_{12} & B_{13} \\ B_{21} & B_{22} & B_{23} \\ B_{31} & B_{32} & B_{33} \end{array}\right] B=(M1)TM1=fx21fx2fyγfx2fyv0γu0fyfx2fyγfx2fy2γ2+fy21γfx2fy2v0γu0fyfy2v0fx2fyv0γu0fyγfx2fyy2v0γu0fyfy2v0fx2fy2(v0γu0fy)2+fy2v02+1=B11B21B31B12B22B32B13B23B33
这里其实B中包含了一个尺度因子 λ \lambda λ,因为求模运算两边相等时,有一个 λ \lambda λ被消去。B为对称矩阵,真正有用的元素只有6个(主对角线任意一侧的6个元素)。把B带入前面两个约束条件后可转化为:
{ h 1 T B h 2 = 0 h 1 T B h 1 = h 2 T B h 2 \left\{\begin{array}{l} h_{1}^{T} B h_{2}=0 \\ h_{1}^{T} B h_{1}=h_{2}^{T} B h_{2} \end{array}\right. {h1TBh2=0h1TBh1=h2TBh2
上面两约束中的式子均可写为通式: h i T B h j h_{i}^{T} B h_{j} hiTBhj,定义3X3的单应矩阵H=[h1 h2 h3]的第i列列向量:
h i = [ h i 1 , h i 2 , h i 3 ] h_{i}=\left[h_{i 1}, h_{i 2}, h_{i 3}\right] hi=[hi1,hi2,hi3]将如下表达式代入上述的约束单项式:

h i T B h j = [ h i 1 h j 1 h i 1 h j 2 + h i 2 h j 1 h i 2 h j 2 h i 3 h j 1 + h i 1 h j 3 h i 3 h j 2 + h i 2 h j 3 h i 3 h j 3 ] T [ B 11 B 12 B 22 B 13 B 23 B 33 ] h_{i}^{T} B h_{j}=\left[\begin{array}{c} h_{\mathrm{i1}} h_{j 1} \\ h_{i 1} h_{j 2}+h_{i 2} h_{j 1} \\ h_{i 2} h_{j 2} \\ h_{i 3} h_{j 1}+h_{i 1} h_{j 3} \\ h_{i 3} h_{j 2}+h_{i 2} h_{j 3} \\ h_{i 3} h_{j 3} \end{array}\right]^{T}\left[\begin{array}{c} B_{11} \\ B_{12} \\ B_{22} \\ B_{13} \\ B_{23} \\ B_{33} \end{array}\right] hiTBhj=hi1hj1hi1hj2+hi2hj1hi2hj2hi3hj1+hi1hj3hi3hj2+hi2hj3hi3hj3TB11B12B22B13B23B33为了简化表达形式,令:
v i j = [ h i h j 1 h i 1 h j 2 + h i 2 h j 1 h i 2 h j 2 h i 3 h j 1 + h i 1 h j 3 h i 3 h j 2 + h i 2 h j 3 h i 3 h j 3 ] , b = [ B 11 B 12 B 22 B 13 B 23 B 33 ] v_{i j}=\left[\begin{array}{c} h_{\mathrm{i}} h_{j 1} \\ h_{i 1} h_{j 2}+h_{i 2} h_{j 1} \\ h_{i 2} h_{j 2} \\ h_{i 3} h_{j 1}+h_{i 1} h_{j 3} \\ h_{i 3} h_{j 2}+h_{i 2} h_{j 3} \\ h_{i 3} h_{j 3} \end{array}\right], \quad b=\left[\begin{array}{c} B_{11} \\ B_{12} \\ B_{22} \\ B_{13} \\ B_{23} \\ B_{33} \end{array}\right] vij=hihj1hi1hj2+hi2hj1hi2hj2hi3hj1+hi1hj3hi3hj2+hi2hj3hi3hj3,b=B11B12B22B13B23B33则有:
h i T B h j = ν i j T b h_{i}^{T} B h_{j}=\nu_{i j}^{T} b hiTBhj=νijTb由此,两约束条件最终可以转化为如下形式:
v 12 T b = 0 ( v 11 T − v 22 T ) b = 0 → [ v 12 T v 11 T − v 22 T ] b = 0 \begin{array}{l} v_{12}{ }^{T} b=0 \\ \left(v_{11}{ }^{T}-v_{22}{ }^{T}\right) b=0 \end{array} \rightarrow\left[\begin{array}{c} v_{12}{ }^{T} \\ v_{11}{ }^{T}-v_{22}{ }^{T} \end{array}\right] b=0 v12Tb=0(v11Tv22T)b=0[v12Tv11Tv22T]b=0如果我们拍摄了n张不同角度的标定图片,因为每张图片我们都可以得到一组(2个)上述的等式。其中, v 12 v_{12} v12, v 11 v_{11} v11, v 22 v_{22} v22可以通过前面已经计算好的单应矩阵得到,因此是已知的,而b中6个元素是待求的未知数。因此,至少需要保证图片数 n>=3,我们才能解出b

b向量求解出来以后:
B = λ M − T M B=\lambda M^{-T} M B=λMTM根据B展开的内容:
{ f x = λ / B 11 f y = λ B 11 / ( B 11 B 22 − B 12 2 ) u 0 = γ v 0 / f y − B 13 f x 2 / λ v 0 = ( B 12 B 13 − B 11 B 23 ) / ( B 11 B 22 − B 12 2 ) γ = − B 12 f x 2 f y / λ λ = B 33 − [ B 13 2 + v 0 ( B 12 B 13 − B 11 B 23 ) ] / B 11 \left\{\begin{aligned} f_{x} &=\sqrt{\lambda / B_{11}} \\ f_{y} &=\sqrt{\lambda B_{11} /\left(B_{11} B_{22}-B_{12}^{2}\right)} \\ u 0 &=\gamma v 0 / f_{y}-B_{13} f_{x}^{2} / \lambda \\ v 0 &=\left(B_{12} B_{13}-B_{11} B_{23}\right) /\left(B_{11} B_{22}-B_{12}^{2}\right) \\ \gamma &=-B_{12} f_{x}^{2} f_{y} / \lambda \\ \lambda &=B_{33}-\left[B_{13}^{2}+v 0\left(B_{12} B_{13}-B_{11} B_{23}\right)\right] / B_{11} \end{aligned}\right. fxfyu0v0γλ=λ/B11 =λB11/(B11B22B122) =γv0/fyB13fx2/λ=(B12B13B11B23)/(B11B22B122)=B12fx2fy/λ=B33[B132+v0(B12B13B11B23)]/B11内参M已知后,也可以计算得外参:
r 1 = λ M − 1 h 1 r 2 = λ M − 1 h 2 r 3 = r 1 × r 2 t = λ M − 1 h 3 \begin{array}{ll} r_{1}=\lambda M^{-1} h_{1} & r_{2}=\lambda M^{-1} h_{2} \\ r_{3}=r_{1} \times r_{2} & t=\lambda M^{-1} h_{3} \end{array} r1=λM1h1r3=r1×r2r2=λM1h2t=λM1h3

最大似然估计
上述的推导结果是基于理想情况下的解,从理论上证明了张氏标定算法的可行性。但在实际标定过程中,一般使用最大似然估计进行优化。假设我们拍摄了n张标定图片,每张图片里有m个棋盘格角点。三维空间点 P P P在图片上对应的二维像素为 p p p,三维空间点经过相机内参 M M M,外参 R R R t t t变换后得到的二维像素为 p ′ p^{\prime} p(假设噪声是独立同分布的,我们通过最小化 p p p, p ’ p’ p的位置来求解上述最大似然估计问题:
∑ i = 1 n ∑ j = 1 m ∥ p i j − p ′ ( M , R i , t i , P i j ) ∥ 2 \sum_{i=1}^{n} \sum_{j=1}^{m}\left\|p_{i j}-p^{\prime}\left(M, R_{i}, t_{i}, P_{ij}\right)\right\|^{2} i=1nj=1mpijp(M,Ri,ti,Pij)2

考虑畸变的影响:
畸变模型为:
{ x brown = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y brown = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) \left\{ \begin{array}{l} x_{\text{brown}}=x\left( 1+k_1r^2+k_2r^4+k_3r^6 \right)\\ y_{\text{brown}}=y\left( 1+k_1r^2+k_2r^4+k_3r^6 \right)\\ \end{array} \right. {xbrown=x(1+k1r2+k2r4+k3r6)ybrown=y(1+k1r2+k2r4+k3r6)此时最大似然估计目标函数变为:
∑ i = 1 n ∑ j = 1 m ∥ p i j − p ′ ( M , k 1 , k 2 , R i , t i , P i j ) ∥ 2 \sum_{i=1}^{n} \sum_{j=1}^{m}\left\|p_{i j}-p^{\prime}\left(M, k_1,k_2,R_{i}, t_{i}, P_{ij}\right)\right\|^{2} i=1nj=1mpijp(M,k1,k2,Ri,ti,Pij)2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值