[Perception Application] 3. Distortion

happy_quokka·2024년 1월 10일
0

자율주행 Perception

목록 보기
14/19

Distortion

  • 실제 카메라는 pinhole camera model에서의 작은 구멍이 아닌 렌즈로 빛을 모은다
  • 완벽한 pinhole 카메라는 빛이 하나의 점을 통과하지만 렌즈는 크기를 가지는 물체이기 때문에 빛이 굴절된다
  • 빛의 굴절은 이미지 센서에 보이는 이미지를 왜곡한다
    • 이유 1. 렌즈의 특성
    • 이유 2. 렌즈와 이미지 센서의 관계

카메라 렌즈

  • 렌즈의 형상이 곡률을 가지는 구면 형태이기 때문에 왜곡이 발생한다
  • 따라서 이미지 중심부(주점)에서 멀어질수록 표현의 비율이 달라지기 때문에 발생한다
  • PD
    • Predicted Distance
    • 피사체를 찍었을 때 예상되는 위치
  • AD
    • Actual Distance
    • 실제로 이미지 상이 맺힌 위치
  • D
    • 왜곡 정도
    • D(%)=ADPDPD×100%D(\%) = \frac{AD-PD}{PD} \times 100\%


Distortion의 종류

  • 방사 왜곡, 접선 왜곡
    • 수학적 모델에 의해 보정이 가능하고 왜곡의 영향을 제거할 수 있다
    • 광학의 원리와 카메라에서 발생하는 왜곡
  • 원근 왜곡
    • 3차원 공간이 2차원 공간으로 투영되면서 발생하는 왜곡

방사 왜곡

  • radial distortion
  • 방사 왜곡은 이미지의 중심으로부터 멀어질수록 왜곡의 정도가 심해진다

  • 방사 왜곡은 대표적으로 2가지 형태로 표현된다
  • Barrel distortion
    • 중심부가 외각부보다 형태로 발생
    • 가운데가 볼록한 형태
  • Pincushion distortion
    • 중심부가 외각부보다 작은 형태로 발생
    • 안쪽으로 모이는 형태
no distortionpositive radial distortion(Barrel distortion)negative radial distortion(Pincushion distortion)

접선 왜곡

  • tangential distortion
  • 접선 왜곡은 카메라 제조 공정에서 발생하는 왜곡이다
  • 렌즈와 이미지 센서와의 수평이 맞지 않은 경우 발생한다
  • 요즘에는 접선 왜곡이 거의 발생하지 않는다

  • 타원 형태로 발생한다

원근 왜곡

  • perspective distortion
  • 왜곡으로 인해 원근감이 손실되고 이는 복구할 방법이 없다
  • 이미지를 촬영하는 환경에 따라 다양한 왜곡이 있다

카메라 투영의 기하학적 정의

  • 3차원 공간에 존재하는 PWP_W는 projection line(파란색 점선)에 따라 2차원 이미지에 점(빨간색 점)으로 투영되기 때문에 같은 line에 존재하는 무수히 많은 점들(주황색 점)이 모두 동일한 위치에 표현된다
  • 따라서 부가적인 정보, 조건 없이 이미지에서 출력된 정보만으로 3차원 공간 정보로 복원하는 것은 불가능하다
  • 여기서 부가적인 정보는 아래의 3가지를 의미한다
    • 사물의 실제 크기
    • 사물과 주변의 관계
    • 추정이 가능한 기하학적 구조

손실된 원근감 복구 방법

  • 다수의 카메라를 사용하는 방법
    • 2개 이상의 카메라로 동일한 시점에 촬영한 각 1장의 이미지듣ㄹ로 3차원 위치 정보를 추정할 수 있다
    • 각 카메라의 extrinsic parameter를 알아야 정확한 정보를 추정할 수 있다
  • 2장 이상의 이미지를 사용하는 방법
    • 같은 카메라로 카메라가 움직이는 환경에서 연속된 이미지 정보를 활용하여 3차원 위치 정보를 추정할 수 있다
    • 카메라의 움직임 정보를 정밀하게 측정, 추정해야 정확한 정보를 얻을 수 있다


Distortion 보정

  • 이미지의 기하학적 정보를 해석하는데 방해하는 요소이기 때문에 이미지에서 왜곡을 보정하여 사용한다

1. undistort 좌표 계산

  • 카메라 좌표계를 기준으로 3차원 공간상에 존재하는 객체를 투영하는 모델 계산
s[xy1]=[fxskew_cfxcx0fycy001][r11r12r13t1r21r22r23t2r31r32r33t3][XWYWZW1]s \begin{bmatrix}x\\y\\1\\ \end{bmatrix} =\begin{bmatrix}f_x & skew\_cf_x & c_x\\0 & f_y & c_y\\0&0&1\\\end{bmatrix}\begin{bmatrix}r_{11}&r_{12}&r_{13}&t_{1}\\r_{21}&r_{22}&r_{23}&t_{2}\\r_{31}&r_{32}&r_{33}&t_{3}\\\end{bmatrix} \begin{bmatrix}X_W\\Y_W\\Z_W\\1\\\end{bmatrix}
  • extrinsic calibration은 왜곡 모델에 불필요하다
    -> extrinsic 영향이 없다고 가정하면 행렬은 identity matrix가 된다
  • normalized image plane에 투영된다고 하면 intrinsic matrix를 연산할 필요가 없다
  • 그러면 아래와 같은 결과가 나온다
s[uv1]=[XCYCZC1]s \begin{bmatrix}u\\v\\1\\ \end{bmatrix} = \begin{bmatrix}X_C\\Y_C\\Z_C\\1\\\end{bmatrix}
  • 이를 정리하면
[unuvnu]=[XC/ZCYC/ZC]\begin{bmatrix}u_{n_u}\\v_{n_u}\\\end{bmatrix} = \begin{bmatrix}X_C/Z_C\\Y_C/Z_C\\\end{bmatrix}
  • 여기서 u는 undistort의 약자이다

2. distortion 모델 적용 (왜곡x -> 왜곡o)

[undvnd]=(1+k1ru2+k2ru4+k3ru6)[unuvnu]+[2p1unuvnu+p2(ru2+2unu2)p1(ru2+2vnu2)+2p2unuvnu]\begin{bmatrix} u_{n_d}\\ v_{n_d}\\\end{bmatrix} = (1 + k_1r^2_u + k_2r^4_u + k_3r^6_u) \begin{bmatrix} u_{n_u}\\v_{n_u}\\\end{bmatrix} + \begin{bmatrix} 2p_1u_{n_u}v_{n_u} + p_2(r^2_u + 2u^2_{n_u})\\ p_1(r^2_u + 2v^2_{n_u}) + 2p_2u_{n_u}v_{n_u}\\\end{bmatrix}
  • (1+k1ru2+k2ru4+k3ru6)(1 + k_1r^2_u + k_2r^4_u + k_3r^6_u)은 radial distortion(방사 왜곡)을 의미한다
  • [2p1unuvnu+p2(ru2+2unu2)p1(ru2+2vnu2)+2p2unuvnu]\begin{bmatrix} 2p_1u_{n_u}v_{n_u} + p_2(r^2_u + 2u^2_{n_u})\\ p_1(r^2_u + 2v^2_{n_u}) + 2p_2u_{n_u}v_{n_u}\\\end{bmatrix}은 tangential distortion(접선 왜곡)을 의미한다
  • ru2=unu2+vnu2r^2_u = u^2_{n_u} + v^2_{n_u}이다
  • normalized image plane을 image plane으로 변환하면

    [xpdypd1]=[fxskew_cfxcx0fycy001][undvnd1]\begin{bmatrix}x_{p_d}\\y_{p_d}\\1 \end{bmatrix} = \begin{bmatrix}f_x & skew\_cf_x & c_x\\0 & f_y & c_y\\0&0&1\\\end{bmatrix} \begin{bmatrix}u_{n_d}\\v_{n_d}\\1 \end{bmatrix}
  • 그 결과

    xpd=fx(und+skew_cfxvnd+cx)x_{p_d} = f_x(u_{n_d} + skew\_cf_xv_{n_d} + c_x)
    ypd=fyvnd+cyy_{p_d} = f_yv_{n_d} + c_y

3. 왜곡 제거

  • 앞서 계산한 image plane에 투영한 normalized image plane의 계산식을 역으로 계산하면 된다
  • 왜곡 보정이라는 과정은 왜곡된 이미지로부터 왜곡이 제거된 이미지로의 mapping을 의미한다
  • OpenCV의 undistort 함수 또는 initUndistortRectifyMap & remap 함수를 이용하면된다

0개의 댓글