OpenCV 등에서 대표적으로 사용되는 Zhang’s 카메라 캘리브레이션 방법에 대한 정리

카메라 캘리브레이션 (Camera Calibration)

  • 카메라 내부 파라미터 값을 구하는 과정
  • 실세계 3D 점이 2D 영상에 투영되기까지의 필요한 파라미터들 중 내부 요인의 파라미터 값을 구하는 과정
  • 통상적으로 카메라 내부 파라미터왜곡를 구하는 것을 말한다
  • (Camera Model) 2. 카메라 캘리브레이션

카메라 내부 파라미터 (Intrinsic Parameter)

  • : 초점거리(focal length)
  • : 이미지 평면의 원점(principal point)
  • : 비대칭 계수

Zhang’s Method

개요

  • 컴퓨터 비전 분야에서 사용되는 대표적인 카메라 모델인 Z. Zhang 캘리브레이션 방법으로 1999년 소개됨.
  • 전통적으로 3D 큐브등을 이용한 월드 좌표를 통해 캘리브레이션 하였지만, 계산 비용이 많이들고 유연하지 못하다는 단점이 있다.
  • Zhang’s Method는 평면(2D) Checkerboard 의 패턴을 이용한 카메라 캘리브레이션.
  • paper : A Flexible New Technique for Camera Calibration

방법

  • Zhang’s 캘리브레이션 방법은 아래와 같은 주요 절차를 따른다.
  • 체커보드 패턴 촬영 - 패턴 좌표 추출 - 호모그래피 추정 - 내부 파라미터 추정 - 외부 파라미터 추정 - 렌즈 왜곡 보정 - 비선형 최적화

아이디어

  • 각 이미지의 checkerboard의 structure와 size(w, h)를 알고 있을 때 캘리브레이션을 위한 3D points 들을 미리 정의 할 수 있다.
  • checkerboard의 3D 월드 좌표()는 모든 점에 대해 z=0으로 둘 수 있으며, 아래 투영 식과 같이 표현할 수 있다.

Homography 추정

  • 이미지에서 찾은 corner points를 , 월드 좌표를 라 할때 아래와 같이 를 구하는 식으로 유도할 수 있다.
  • 행렬 는 체커보드 월드 좌표를 이미지 좌표로 변환하는 Homography 라 볼 수 있다.
  • 체커보드는 패턴의 길이와 갯수를 모두 알고 있기 때문에 체커보드 좌표 에 대응하는 이미지 좌표 을 구할 수 있다. 이때 이미지 좌표는 체커보드 Feature Extraction 알고리즘으로 쉽게 구할 수 있다.
  • 는 8개의 자유도를 가지므로 최소 4개의 points 쌍을 이용한 SVD로 를 추정할 수 있다.

내부 및 외부 파라미터 추정

  • 를 분해하여 내부 파라미터 와 외부파라미터 를 구해야 한다.
  • 위 식을 정리하면 아래와 같이 표현할 수 있다.
  • 이 때, 회전행렬 은 직교 행렬(Orhogonal Matrix)이고, 열벡터인 는 서로 직교하므로 이 성립한다. 해당 제약조건을 이용하면 이고, 를 직교조건에 의해 아래 식이 성립한다.
  • 또한 직교행렬 조건에 의해 스케일을 제외하고(up to scale) 이므로 아래 식이 성립한다.
  • 따라서, 한개의 장면(scene)에서 촬영된 체커보드로 부터 위와 같은 두 개의 방정식을 얻을 수 있다.
  • 카메라 내부 파라미터 를 보면 아래와 같다.
  • 추정해야할 변수 5개를 가지고 있으므로 또한 5개의 변수를 가지고 있는 행렬이 되며, 최소 세개 이상의 장면(scene, pose)에서의 Homography 가 주어졌을 때 를 결정할 수 있다.

  • 정리하면, 각 체커보드 장면에서 를 추정하기 위해 최소 4개의 points 쌍이 필요하고, 각 장면에서 얻은 두개의 방정식을 통해 카메라 파라미터 를 구하기 위해 최소 3개 이상의 장면이 필요하다.

  • 로 설정하여 행렬 에 Cholesky Decomposition 또는 특이값 분해(SVD)를 수행하여 을 구한다. 행렬  는 대칭이면서 Positivie Definite 행렬이므로  와 같이 분해되며 대각행렬 의 제곱근 행렬이 존재한다.

  • 식을 통해 를 구하면 결론적으로 을 통해 카메라의 회전 과 이동 그리고 내부 파라미터 행렬 를 구할 수 있다.

왜곡 및 비선형 최적화

  • 초기 추정값(내부 및 외부 파라미터, 왜곡 계수 등)을 기반으로, 비선형 최적화를 통해 오차를 최소화하며 이 과정은 일반적으로 Levenberg-Marquardt 알고리즘을 사용한다.
  • Zhang의 방법은 초기 추정을 위해 호모그래피를 이용하여 내부 및 외부 파라미터를 계산하지만, 호모그래피 기반 계산은 렌즈 왜곡을 무시하거나 단순화된 모델을 가정하기 때문에, 초기 추정치가 완전히 정확하지 않을 수 있다.
  • 비선형 최적화는 왜곡을 포함한 모든 변수의 상호작용을 고려해 파라미터를 조정하여 재투영 오차(Reprojection Error)를 최소화하며, 이 과정에서 왜곡 계수도 함께 추정됨.

OpenCV

Calibration Code

#python
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, imageSize, None, None)

참고