Camera calibration
카메라 보정은 알려진 보정 타겟의 이미지에서 내부 파라미터 행렬 와 렌즈 왜곡 파라미터를 복원합니다. 정확한 보정 없이는, 삼각측량, 포즈 추정, 에피폴라 탐색을 포함한 모든 후속 기하 연산이 체계적으로 잘못됩니다.
Zhang 방법
Zhang 방법(1999)은 표준 보정 절차입니다. 여러 시점에서 촬영한 평면 체커보드 이미지를 사용합니다. 각 이미지는 알려진 3D 보드 코너와 검출된 2D 이미지 코너 사이의 대응을 제공하여, 호모그래피(이미지-보드 간)와 내부 파라미터 양쪽에 제약을 줍니다. 절차:
- 서로 다른 방향으로 촬영한 개의 이미지에서 체커보드 코너 검출.
- 보드 평면과 각 이미지 사이의 호모그래피 계산.
- 이고 , 라는 조건을 이용해 각 에서 에 대한 제약 추출.
- 내부 파라미터에 대한 선형 시스템 풀기.
- 비선형 최소제곱으로 모든 파라미터(내부 + 외부 + 왜곡) 세밀화.
제약이 어디서 오는가. 라 씁시다. 이고 이며 가 정규직교이므로, 각 시점은 대칭 행렬 의 원소에 대한 두 개의 선형 방정식을 제공합니다:
는 6개의 미지수를 가지므로(스큐가 0이라고 가정하면 5개) 3개의 시점으로 충분합니다. 는 이후 Cholesky 방식의 분해를 통해 로부터 복원됩니다. 이것이 보드를 서로 다른 방향으로 보여줘야 하는 이유입니다---평행한 시점들은 중복된 제약만 제공합니다.
렌즈 왜곡 모델
실제 렌즈는 이상적인 핀홀 모델에서 벗어납니다. 두 가지 표준 모델이 있습니다:
방사형 왜곡은 직선이 곡선으로 보이게 만듭니다:
여기서 는 주점(principal point)으로부터의 거리의 제곱입니다. 은 배럴 왜곡을, 은 핀쿠션 왜곡을 만듭니다. 광각 렌즈는 이 큽니다.
접선형 왜곡은 렌즈가 이미지 평면과 완벽히 평행하지 않을 때 발생합니다:
실무에서는 (그리고 때로는 )를 와 함께 동시에 추정합니다. OpenCV는 이를 cv::calibrateCamera()에서 직접 구현합니다.
보정 품질 판단
표준 품질 지표는 보정에서 반환되는 RMS 재투영 오차입니다: 추정된 파라미터로 보드 코너를 재투영하고 픽셀 잔차를 측정합니다. 단일 수치를 넘어서, 다음을 확인해야 합니다:
- 잔차가 이미지 전체에 균등하게 분포되어 있는지---코너 부분의 편향은 부적절한 왜곡 모델을 나타냅니다(예: 어안 렌즈를 방사-접선 모델에 강제로 맞춘 경우).
- 보드가 코너와 가장자리를 포함한 이미지의 모든 영역에 나타났는지---왜곡이 가장 심하고 그렇지 않으면 제약이 없는 영역입니다.
- 시점에 초점 거리와 주점이 상관관계를 벗어날 수 있도록 정면 촬영뿐만 아니라 충분한 기울임이 포함되어 있는지.
흔한 함정
- 캡처 중 모션 블러와 롤링 셔터는 코너 검출을 손상시킵니다. 각 촬영에서 보드(또는 카메라)를 고정해야 합니다.
- 평평하지 않은 보드: 종이를 판지에 붙이면 휘어지며, 왜곡 추정치가 그 휘어짐을 흡수합니다. 단단하고 평평한 타겟을 사용해야 합니다.
- 이미지 경계 근처의 포즈가 너무 적음---고차 방사형 항이 과적합되어 커버되지 않은 영역 밖으로 심하게 외삽됩니다.
- 하나의 초점/줌 설정으로 보정하고 다른 설정으로 운용: 내부 파라미터는 초점에 따라 변하므로, 렌즈를 고정하고 하드웨어 설정이 바뀔 때마다 재보정해야 합니다.
SLAM에서의 의미
SLAM 시스템은 왜곡이 제거되고 보정된 관측값이 기하 solver에 입력된다고 가정합니다. 이미지 경계에서 몇 픽셀의 보정되지 않은 왜곡만으로도 재투영 오차를 지배하여 지도를 오염시킬 수 있습니다. 보정은 이후 만나게 될 더 어려운 문제들의 템플릿이기도 합니다---카메라-IMU와 카메라-LiDAR 외부 파라미터 보정은 동일한 “알려진 타겟 + 비선형 세밀화” 패턴을 따릅니다. 실무적으로, 체커보드로 직접 카메라를 보정하는 것은 이 분야에서 가장 좋은 첫 번째 연습 중 하나입니다.