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


    张正友标定法

    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[

    h11h12h13h21h22h23h31h32h33
    \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[
    xy1
    \right] \sim\left[
    h11h12h13h21h22h23h31h32h33
    \right]\left[
    xy1
    \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
    x=h11x+h12y+h13h31x+h32y+h33y=h21x+h22y+h23h31x+h32y+h33
    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[

    fxγu00fyv0001
    \right]\left[
    r1r2t
    \right]=s M\left[
    r1r2t
    \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[

    h1h2h3
    \right]=s M\left[
    r1r2t
    \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[

    1fx2γfx2fyv0γu0fyfx2fyγfx2fyγ2fx2fy2+1fy2γv0γu0fyfx2fyy2v0fy2v0γu0fyfx2fyγv0γu0fyfx2fy2v0fy2(v0γu0fy)2fx2fy2+v02fy2+1
    \right]=\left[
    B11B12B13B21B22B23B31B32B33
    \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\{
    h1TBh2=0h1TBh1=h2TBh2
    \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[

    hi1hj1hi1hj2+hi2hj1hi2hj2hi3hj1+hi1hj3hi3hj2+hi2hj3hi3hj3
    \right]^{T}\left[
    B11B12B22B13B23B33
    \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[
    hihj1hi1hj2+hi2hj1hi2hj2hi3hj1+hi1hj3hi3hj2+hi2hj3hi3hj3
    \right], \quad b=\left[
    B11B12B22B13B23B33
    \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
    v12Tb=0(v11Tv22T)b=0
    \rightarrow\left[
    v12Tv11Tv22T
    \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\{

    fx=λ/B11fy=λB11/(B11B22B122)u0=γv0/fyB13fx2/λv0=(B12B13B11B23)/(B11B22B122)γ=B12fx2fy/λλ=B33[B132+v0(B12B13B11B23)]/B11
    \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
    r1=λM1h1r2=λM1h2r3=r1×r2t=λM1h3
    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\{

    xbrown=x(1+k1r2+k2r4+k3r6)ybrown=y(1+k1r2+k2r4+k3r6)
    \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

  • 相关阅读:
    react native 毛玻璃效果
    ubutun上编译出现undefined reference to symbol ‘dladdr@@GLIBC_2.2.5‘的错误
    ubuntu 20及之后版本添加开机自启服务
    virtualbox报错
    【第十四届蓝桥杯单片机组】个人笔记汇总
    YOLOv5算法改进--通过yaml文件添加注意力机制【附代码】
    【校招VIP】测试技术考点之单元测试&集成测试
    恭喜元宇宙产业委秘书长何超、执行秘书长武艳芳成为南京河西CBD发展大使
    共同构建全球发展共同体,代谢组学义不容辞
    信息收集——ip信息(DNS解析、CDN)
  • 原文地址:https://blog.csdn.net/ha_lee/article/details/125624089