Camera Models 2

김세연·2024년 9월 1일

CS231A

목록 보기
2/4

5. Camera Calibration

  • 앞 강의를 통해 우리는 3D world에서 digital image로 변환을 위해서는 카메라의 intrinsic, extrinsic parameter을 알아야 함을 배웠다.

  • 하지만 파라미터를 알 수 없는 임의의 카메라로 찍은 이미지에서 이러한 파라미터를 유추할 수 있는 방법이 있을까?

    • camera calibration이 바로 파라미터를 추정하는 방법임.
  • Camera Calibration을 위해 체커보드와 같은 calibration rig를 사용하며 원점 OwO_w와 축 iw,jw,kw_w, j_w, k_w를 가짐.

    • 실제 세계의 rig에 점 P1,.PnP_1, …. P_n의 정보를 알고 있으므로 image에서 이에 해당하는 점 p1,pnp_1, …p_n을 얻을 수 있음.
  • 이러한 n개의 PiP_i, pip_i의 대응 관계가 있을 때, 각 행 m1,m2,m3m_1, m_2, m_3를 가지는 Camera Matrix MM와의 선형 방정식을 만들 수 있음.

    pi=[uivi]=MPi=[m1Pim3Pim2Pim3Pi]p_i = \begin{bmatrix} u_i\\ v_i \end{bmatrix} = MP_i = \begin{bmatrix} \frac{m_1P_i}{m_3P_i}\\ \frac{m_2P_i}{m_3P_i} \end{bmatrix}
    • 식 풀이
      M=[m1m2m3]일 때,MPi=[m1Pim2Pim3Pi]M = \begin{bmatrix} m_1\\ m_2\\ m_3 \end{bmatrix}일 \space 때, MP_i = \begin{bmatrix} m_1 P_i\\ m_2 P_i\\ m_3 P_i \end{bmatrix}
      이고, 벡터와 homogeneous coordinate 간의 equality(동일성)은 마지막 좌표가 1일 때만 성립하므로 m3Pim_3P_i를 각 벡터에 나누면
      MPi=[m1Pim3Pim2Pim3Pi]MP_i = \begin{bmatrix} \frac{m_1P_i}{m_3P_i}\\\\ \frac{m_2P_i}{m_3P_i} \end{bmatrix}
    • PiP_i, pip_i는 두 개의 방정식을 제공하며, 이를 통해 m을 풀기 위한 두 가지 constraints(제약 조건)을 제공함.
  • 따라서 앞에서 배웠던 것처럼 Camera Matrix에 11가지의 파라미터가 필요하므로 최소한 6개의 대응 관계를 알아야 함.

    • 하지만, 노이즈 등으로 인해 실제로는 더 많은 대응 관계가 필요하며, n개의 대응 관계가 주어지면 전체 선형 방정식은 다음과 같음.

      u1(m3P1)m1Pi=0v1(m3P1)m2Pi=0...un(m3P1)m1Pi=0vn(m3P1)m2Pi=0u_1(m_3P_1) - m_1P_i = 0 \\ v_1(m_3P_1) - m_2P_i = 0 \\ .\\ .\\ .\\ u_n(m_3P_1) - m_1P_i = 0 \\ v_n(m_3P_1) - m_2P_i = 0 \\
  • 이를 행렬-벡터 곱으로 표현하면

    [PT0Tu1P1T0TP1Tv1P1T...PnT0TunP1T0TPnTunP1T][m1Tm2Tm3T]=Pm=0\begin{bmatrix} P^T & 0^T & -u_1P_1^T \\ 0^T & P_1^T & -v_1P_1^T \\ & . \\ & . \\ & . \\ P_n^T & 0^T & -u_nP_1^T \\ 0^T & P_n^T & -u_nP_1^T \\ \end{bmatrix} \begin{bmatrix} m_1^T \\ m_2^T \\ m_3^T \end{bmatrix} = \bold{P}m = 0
  • 하지만, 2n>112n > 11일 때, trivial solution(자명한 해)는 m1=m2=m3=0m_1 = m_2 = m_3 = 0 임. (homongeneous linear system이므로)

  • 비자명한 해(nonzero solution = nontrivial solution)가 있다고 가정하면, 행렬 PP의 열들이 선형종속일 때이므로 비자명한 해 mmkR∀k \in \R 즉, 모든 실수 kk를 곱해도 비자명한 해에 속함.

    • 따라서 해를 제한하기 위해 다음과 같은 최소화를 수행함.
      minimizem Pm2subject to m2=1\underset{m}{\text{minimize}} \space ||\bold Pm||^2 subject \space to \space ||m||^2 = 1
    • 위 식을 풀기 위해 SVD (특이값 분해)를 사용함. P=UDVTP = UDV^T일 때, |Pm2|\bold Pm||^2을 최소화하기 위한 m은 m = V의 마지막 열(벡터)임.
      • 증명 (Section 5.3 of Hartley & Zisserman on pages 592-593)
  • 이 벡터 m을 행렬 M으로 재구성하면, 이 M은 실제 카메라 행렬의 스칼라 배수임.

    ρM=[αr1Tαcot(θ)r2T+cxr3Tαtxαcot(θ)ty+cxtzβsinθr2T+cyr3Tβsinθty+cytzr3Ttz]ρM = \begin{bmatrix} \alpha r_1^T - \alpha cot(\theta) r_2^T+c_xr_3^T & \alpha t_x - \alpha cot(\theta) t_y+c_xt_z \\\\ \frac{\beta}{sin\theta}r_2^T+c_yr_3^T & \frac{\beta}{sin\theta}t_y+c_yt_z \\\\ r_3^T & t_z \end{bmatrix}
    • 식 유도
      • 우리는 이전 시간에 Full projection matrix M이 K[R  T]K[R\space\space T]라는 것을 배웠다.
      • 여기서
        K=[ααcot(θ)cx0βsinθcy001],R=[r11r12r13r21r22r23r31r32r33]=[r1r2r3],T=[txtytz]K =\begin{bmatrix} \alpha & -\alpha cot(\theta) & c_x \\ 0 & \frac{\beta}{sin\theta} & c_y\\ 0 & 0 & 1 \end{bmatrix}, R = \begin{bmatrix} r_{11} & r_{12} & r_{13} \\ r_{21} & r_{22} & r_{23} \\ r_{31} & r_{32} & r_{33} \end{bmatrix} = \begin{bmatrix} r_1 \\ r_2 \\ r_3 \end{bmatrix}, T = \begin{bmatrix} t_x \\ t_y \\ t_z \end{bmatrix}
        라고 할 때, [R  T][R \space \space T]는 다음과 같으므로
        [R  T]=[r11r12r13r21r22r23r31r32r33]=[r1txr2tyr3tz][R \space \space T] = \begin{bmatrix} r_{11} & r_{12} & r_{13} \\ r_{21} & r_{22} & r_{23} \\ r_{31} & r_{32} & r_{33} \end{bmatrix} = \begin{bmatrix} --r_1-- & t_x\\ --r_2-- & t_y\\ --r_3-- & t_z\\ \end{bmatrix}
        M=K[R  T]M = K[R\space\space T]은 다음과 같음.
        M=K[R  T]=[ααcot(θ)cx0βsinθcy001][r1txr2tyr3tz]=[αr1Tαcot(θ)r2T+cxr3Tαtxαcot(θ)ty+cxtzβsinθr2T+cyr3Tβsinθty+cytzr3TtZ]M = K[R\space\space T]= \begin{bmatrix} \alpha & -\alpha cot(\theta) & c_x \\ 0 & \frac{\beta}{sin\theta} & c_y\\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} --r_1-- & t_x\\ --r_2-- & t_y\\ --r_3-- & t_z\\ \end{bmatrix} = \begin{bmatrix} \alpha r_1^T - \alpha cot(\theta) r_2^T+c_xr_3^T & \alpha t_x - \alpha cot(\theta) t_y+c_xt_z \\\\ \frac{\beta}{sin\theta}r_2^T+c_yr_3^T & \frac{\beta}{sin\theta}t_y+c_yt_z \\\\ r_3^T & t_Z \end{bmatrix}
  • 여기서 scaling parameter ρ로 나누면

    M=1ρ[αr1Tαcot(θ)r2T+cxr3Tαtxαcot(θ)ty+cxtzβsinθr2T+cyr3Tβsinθty+cytzr3TtZ]=[Ab]=[a1Ta2Ta3T][b1b2b3]M = \frac{1}{ρ}\begin{bmatrix} \alpha r_1^T - \alpha cot(\theta) r_2^T+c_xr_3^T & \alpha t_x - \alpha cot(\theta) t_y+c_xt_z \\\\ \frac{\beta}{sin\theta}r_2^T+c_yr_3^T & \frac{\beta}{sin\theta}t_y+c_yt_z \\\\ r_3^T & t_Z \end{bmatrix} = \begin{bmatrix} A & b \end{bmatrix} = \begin{bmatrix} a_1^T \\ a_2^T \\ a_3^T \\ \end{bmatrix}\begin{bmatrix} b_1 \\ b_2\\ b_3 \\ \end{bmatrix}

    • 이를 통해 intrinsic parameter는

      ρ=±1a3cx=ρ2(a1a3)cy=ρ2(a2a3)θ=cos1((a1×a3)(a2×a3)a1×a3a2×a3)α=ρ2a1×a3sinθβ=ρ2a2×a3sinθρ = \pm \frac{1}{\|a_3\|} \\ c_x=\rho^2(a_1 \cdot a_3) \\ c_y= \rho^2(a_2 \cdot a_3) \\ θ=cos^{−1}(-\frac{(a_1×a_3) ⋅(a_2×a_3)}{∥a_1×a_3∥⋅ ||a_2×a_3||}) \\ α=ρ2∥a_1×a_3∥sinθ \\ β=ρ2∥a_2×a_3∥sinθ

      이고, extrinsic parameter는

      r1=a2×a3a2×a3r2=r3×r1r3=ρa3T=ρK1br_1= \frac{a_2 \times a_3}{\|a_2 \times a_3\|} \\ r_2=r_3×r_1 \\ r_3=ρa_3 \\ T=ρK^{−1}b

      이다. (Forsyth & Ponce textbook 138p)

  • 여기서 주의해아 할 점은 degenerate 경우 즉, PiP_i들이 같은 plane에 있는 경우, 이 시스템을 풀 수 없음. 이러한 점들을 degenerate configurations라고 함.

6. Handling Distortion in Camera Calibration

  • 지금까지 Distortion이 없는 이상적인 렌즈를 다뤄왔지만, 실제 렌즈는 rectilinear
    projection (직선 투영)을 할 수 없는 경우가 있음
  • 렌즈는 symmetric하므로 Distortion 역시, symmetric함.
  • 따라서 isotropic transformation을 통해 distortion을 모델링 해보면, (즉, 각 점이 동일한 비율로 스케일링된다고 가정하여 모델링 해보면)
    QPi=[1λ0001λ0000]MPi=[uivi]=piQP_i = \begin{bmatrix} \frac{1}{λ} & 0 & 0 \\ 0 & \frac{1}{λ} & 0 \\ 0 & 0 & 0 \\ \end{bmatrix} MP_i = \begin{bmatrix} u_i \\ v_i \end{bmatrix} = p_i
    이고, [1λ0001λ0000]M=Q=[q1q2q3]\begin{bmatrix} \frac{1}{λ} & 0 & 0 \\ 0 & \frac{1}{λ} & 0 \\ 0 & 0 & 0 \\ \end{bmatrix} M = Q = \begin{bmatrix} q_1 \\ q_2 \\ q_3 \end{bmatrix}이므로 QPi=[q1Piq3Piq2Piq3PI]QP_i = \begin{bmatrix} \frac{q_1P_i}{q_3P_i} \\\\ \frac{q_2P_i}{q_3P_I} \end{bmatrix} 이고,
    uiq3Pi=q1Piviq3Pi=q2Piu_iq_3P_i = q_1P_i \\ v_iq_3P_i = q_2P_i
    이다.
  • 하지만, 이 시스템은 선형적이지 않으므로 non-linear optimization이 필요함.
  • 우리가 다루는 Radial Distortion은 두 좌표 uiu_iviv_i 사이의 비율은 영향을 받지 않으므로 uivi\frac{u_i}{v_i}를 이용하자 . (Radial Distortion가 렌즈 중심에서 얼마나 멀리 떨어지냐에 따라 Distortion이 달라지니까 xy\frac{x}{y}비율만 같으면 zz축 distortion은 어떤 방향이든 같다는 뜻인 듯..?)
    uivi=m1Pim3Pim2Pim3Pi=m1Pim2Pi\frac{u_i}{v_i} = \frac{\frac{m_1P_i}{m_3P_i}}{\frac{m_2P_i}{m_3P_i}} = \frac{m_1P_i}{m_2P_i}
  • 따라서 n개의 대응관계가 주어졌다고 가정하면,
    v1(m1P1)u1(m2P1)=0,...,vn(m1Pn)un(m2Pn)=0v_1(m_1P_1)−u_1(m_2P_1)=0, ...,v_n(m_1P_n)−u_n(m_2P_n)=0
    의 시스템을 설정할 수 있음.
  • 이를 행렬-벡터 곱으로 나타내면
    Ln=[v1P1Tu1P1T......vnPnTunPnT][m1Tm2T]L_n = \begin{bmatrix} v_1P_1^T && -u_1P_1^T\\ . && .\\ . && .\\ . && .\\ v_nP_n^T && -u_nP_n^T \end{bmatrix}\begin{bmatrix} m_1^T \\\\ m_2^T \end{bmatrix}
    이고, 이를 SVD를 통해 m1m_1, m2m_2를 추정하면, m3m_3
    pi=[uivi]=1λ[m1Pim3Pim2Pim3Pi]p_i =\begin{bmatrix} u_i\\\\ v_i \end{bmatrix} = \frac{1}{λ}\begin{bmatrix} \frac{m_1P_i}{m_3P_i}\\\\ \frac{m_2P_i}{m_3P_i} \end{bmatrix}
    로 추정 가능함. (image의 점 pip_i에서 m3m_3를 추정 )
profile
AI/ML, Computer Vision

0개의 댓글