1. 개요[편집]
| 카메라 보정 Camera Calibration | |
|---|---|
| 구하는 것 | 내부행렬 $K$ (5 자유도) + 왜곡계수 + 각 영상의 외부 자세 |
| 표준 기법 | Zhang의 평면 체스보드 기법 (1999) |
| 왜곡 모형 | 브라운-콘래디(방사+접선) · 칸날라-브란트(어안) |
| 품질 지표 | 재투영 RMS — 보통 0.1~0.3 px가 정상 범위 |
| 1등 실패 원인 | 보정판 자세가 다양하지 않음 · 오토포커스를 안 끔 |
| 보정판 없이 | 자기보정 — 크루파 방정식 · 절대이차곡면 |
사진은 세상을 있는 그대로 찍지 않는다. 카메라 보정은 “이 카메라가 세상을 얼마나 어떻게 비틀어 놓는지”를 숫자로 적어 두는 작업이다.
카메라 보정(camera calibration)은 영상 좌표와 3차원 광선 사이의 대응 관계를 결정하는 카메라 모형의 파라미터를 추정하는 절차다. 결과물은 초점거리·주점 같은 내부파라미터(intrinsic), 렌즈 왜곡계수, 그리고 필요하면 카메라와 세계 좌표계 사이의 외부파라미터(extrinsic)다. 스테레오 비전·Structure from Motion·SLAM·로봇 시각이 전부 이 숫자들을 전제로 시작하고, 이 숫자가 틀리면 그 뒤 모든 기하가 조용히 함께 틀린다.
「조용히」가 핵심이다. 초점거리를 3% 틀리게 잡아도 영상은 여전히 멀쩡해 보이고, 번들 조정의 재투영 잔차도 크게 늘지 않는다. 대신 복원된 3차원 모형이 완만하게 휘거나 거리가 3% 어긋난다. 보정 오차는 영상에서 보이지 않고 3차원에서만 보인다 — 그래서 보정은 파이프라인에서 가장 지루하면서 가장 자주 사고를 내는 단계다.1
2. 무엇을 보정하는가[편집]
세 층으로 나눠 생각하면 정리된다.
| 층 | 파라미터 | 시간에 따라 변하나 |
|---|---|---|
| 사영(핀홀) | 줌·오토포커스가 있으면 변한다 | |
| 왜곡 | , | 렌즈를 고정하면 상수 |
| 외부 | 카메라가 움직이면 매 프레임 변한다 |
「보정」이라 하면 보통 위 두 층을 말한다. 세 번째는 자세 추정 문제이고, 스테레오 리그에서 두 카메라 사이의 상대 자세를 구하는 것을 따로 스테레오 보정이라 부른다.
3. 핀홀 모형과 내부행렬[편집]
3차원 점 가 카메라 좌표계에 있을 때, 핀홀 카메라 모형은 원근분할과 선형변환의 합성이다. 정규화 좌표 , 를 거쳐
- — 픽셀 단위 초점거리. 물리 초점거리 (mm)를 화소 크기로 나눈 값이다. 화소가 정사각형이면 이고, 비율 가 곧 화소 종횡비다.
- — 주점(principal point). 광축이 센서와 만나는 화소. 영상 중심과 같을 것 같지만 조립 공차 때문에 보통 수 화소~수십 화소 벗어나 있다.
- — 비대칭(skew). 화소 격자의 두 축이 직교하지 않는 정도. 현대 CMOS 센서에서는 사실상 0이고, 그래서 실무에서는 거의 언제나 으로 고정한다. 이 하나를 풀어 놓으면 다른 파라미터와 엉켜 조건수만 나빠진다.
즉 자유도는 최대 5, 현실적으로는 4다. 이 다섯 개가 보정으로 얻는 「사영 부분」의 전부다.
4. 렌즈 왜곡 — 브라운-콘래디[편집]
실제 렌즈는 직선을 직선으로 보내지 않는다. 표준 모형은 정규화 좌표에 다항식을 얹는 브라운-콘래디(Brown-Conrady) 형태다. 로 두면
앞의 짝수차 다항식이 방사 왜곡, 뒤의 두 항이 접선 왜곡이다.
- 방사 왜곡은 광축에서의 거리에만 의존한다. 이면 상이 안쪽으로 당겨지는 배럴(barrel) 왜곡, 이면 핀쿠션(pincushion)이다. 광각 렌즈는 배럴, 망원 렌즈는 약한 핀쿠션이 보통이다. 홀수차 항이 없는 이유는 회전 대칭 렌즈계에서 왜곡이 의 짝수 함수여야 하기 때문이다.
- 접선 왜곡은 렌즈 요소와 센서가 완벽히 평행하지 않을 때(decentering) 생긴다. 요즘 조립 정밀도에서는 매우 작아서, 데이터가 충분하지 않으면 으로 두는 편이 낫다.
어안·초광각(화각 150° 이상)은 이 다항식으로 표현이 안 된다. 에서 가 발산하기 때문이다. 그래서 입사각 를 직접 다항식으로 사상하는 칸날라-브란트(Kannala-Brandt) 모형을 쓴다.
여기서 이다. 이 형태는 등거리·등입체각 같은 고전 어안 사상들을 하나의 다항식 족으로 포괄한다. 그 밖에 통일 구면 모형(MEI), 이중 구면 모형처럼 어안을 더 적은 파라미터로 다루는 모형들도 널리 쓰인다.
모형 선택은 화각이 정한다. 90° 이하면 두 개로 충분하고, 120°대면 를 넣고, 그 이상이면 어안 모형으로 갈아타야 한다. 화각이 좁은데 계수를 여섯 개 풀어 놓는 것은 과적합을 부르는 짓이다.
5. Zhang의 평면 기법[편집]
1990년대 초까지 보정은 3차원 좌표를 정밀하게 아는 입체 보정 치구(calibration rig)를 요구했다. Zhengyou Zhang이 1999년에 제시한 방법은 평면 하나를 여러 자세로 찍기만 하면 된다는 것이었고, 이 접근이 표준이 된 이유는 정확도가 아니라 접근성이다. 프린터로 체스보드를 뽑아 판에 붙이면 준비가 끝난다.
원리는 깔끔하다. 보정판을 평면으로 두면 투영식이
가 되어, 판 좌표와 화소 좌표 사이가 호모그래피 하나로 이어진다. 는 대응점 4개 이상이면 직접 선형 변환으로 얻을 수 있다. 그리고 가 회전행렬의 열이라는 사실이 두 개의 방정식을 준다 — 서로 직교하고, 길이가 같다. 로 놓고 의 열을 라 하면
는 대칭 3×3이라 스케일을 빼면 미지수가 5개, 그리고 영상 한 장이 방정식 두 개를 준다. 따라서 판의 자세가 최소 3가지면 가 결정되고, 를 촐레스키 분해하면 가 닫힌 형태로 나온다. 각 영상의 는 에서 열별로 정규화해 복원한다.2
여기까지가 선형 초기해이고, 왜곡은 아직 무시된 상태다. 마지막은 언제나 비선형 정련이다. 모든 영상, 모든 코너에 대해
를 레벤버그-마쿼트 방법으로 푼다. 구조를 보면 눈치챘을 것이다 — 이건 **3차원 점이 이미 알려진 번들 조정**이다. 그래서 보정 코드와 BA 코드는 대개 같은 solver를 공유한다.
코너 검출도 정확도에 직결된다. 체스보드 코너는 밝기 함수의 안장점이므로 국소 이차 적합이나 기울기 직교성으로 부화소 정련이 가능하고, 이 한 단계가 재투영 RMS를 절반 이하로 떨어뜨린다. 원형 격자판은 원의 중심이 원근투영에서 타원 중심과 일치하지 않는 편향이 있어 보정이 필요하고, ChArUco처럼 코너에 식별자를 심은 판은 판이 일부만 보여도 대응을 잃지 않아 실무에서 인기가 높다.
6. 재투영 RMS — 믿을 것과 믿지 말 것[편집]
보정 결과와 함께 나오는 숫자가 재투영 오차의 제곱평균제곱근(RMS)이다.
| RMS | 해석 |
|---|---|
| 0.05 px 미달 | 의심하라. 자세가 거의 같은 영상만 넣었거나 왜곡계수를 과하게 풀었을 가능성 |
| 0.1~0.3 px | 정상. 대부분의 산업용 렌즈와 부화소 코너 검출에서 나오는 범위 |
| 0.5~1 px | 모형이 부족하거나 코너 검출이 흐릿함. 화각에 맞는 왜곡 모형인지 확인 |
| 1 px 초과 | 뭔가 근본적으로 틀렸다. 판 치수 오입력·초점 변화·판이 평면이 아님 |
여기서 반드시 짚어야 할 것. RMS는 적합도이지 정확도가 아니다. 파라미터를 늘리면 RMS는 언제나 내려가지만 데이터가 없는 영역(영상 주변부, 다른 거리)에서의 예측은 오히려 나빠진다. 그래서 보정 품질은 RMS 하나로 판단하지 않는다.
- 잔차의 공간 분포를 그려 본다. 화면 전체에 무작위 잡음처럼 흩어져 있어야 정상이다. 소용돌이·방사 패턴이 남아 있으면 왜곡 모형이 부족한 것이고, 이건 RMS 숫자만 보면 절대 안 보인다.
- 검증 영상을 남긴다. 보정에 쓰지 않은 영상 몇 장으로 재투영 오차를 재는 것이 과적합 검사의 정석이다.
- 길이를 아는 물체로 3차원 검증을 한다. 결국 우리가 원하는 것은 화소 잔차가 아니라 미터 단위 정확도다.
- 파라미터의 불확실성을 본다. 보정 코드가 파라미터 표준편차를 뱉으면 반드시 본다. 의 상대 표준편차가 1%를 넘으면 그 보정은 자세 다양성이 부족한 것이다. 불확실성 정량화의 문제의식이 그대로 적용된다.
7. 흔한 실패 모드[편집]
| 증상 | 원인 | 처방 |
|---|---|---|
| RMS는 좋은데 3차원 거리가 몇 %씩 틀림 | 판이 모두 정면(fronto-parallel) — 와 판 거리 가 서로를 상쇄해 구별 안 됨 | 판을 좌우·상하로 30~45° 기울인 자세를 반드시 섞는다 |
| 실행마다 결과가 크게 달라짐 | 오토포커스·손떨림보정·전자식 왜곡보정이 켜져 있음 | 초점·조리개·줌 전부 수동 고정. 카메라 내장 왜곡보정도 끈다 |
| 영상 중앙은 잘 펴지는데 주변부가 휘어짐 | 코너가 화면 중앙에만 분포 — 큰 영역의 데이터가 없음 | 판을 화면 네 귀퉁이까지 밀어 넣어 촬영 |
| 왜곡보정 영상 가장자리가 폭발 | 고차 계수 과적합 | ·접선항을 끄고 다시 |
| 주점이 영상 밖으로 나감 | 자세 다양성 부족 + 주점과 접선왜곡의 결합 | 자세 늘리기, 접선항 고정 |
| 스테레오 정류 후 에피폴라 선이 안 맞음 | 좌우 개별 보정만 하고 상대 자세를 정련하지 않음 | 스테레오 보정으로 두 카메라를 함께 최적화 |
| 빠르게 움직이며 찍은 판에서만 오차가 큼 | 롤링 셔터 — 행마다 노출 시각이 다름 | 판을 정지시키고 찍기, 또는 롤링 셔터 모형 |
가장 자주 반복되는 실수를 하나만 꼽으면 자세 다양성 부족이다. 판을 정면으로만 놓고 스무 장을 찍으면 사실상 정보가 한 장짜리다. 초점거리를 두 배로 하고 판을 두 배 멀리 놓아도 영상이 거의 같기 때문에, 최적화가 그 두 값을 구별할 근거가 없다. 이 결합은 조건수로 즉시 드러나며, 기울인 자세를 넣는 순간 풀린다. 판을 카메라 앞에서 이리저리 돌리는 그 우스꽝스러운 동작에는 확실한 수치적 근거가 있는 것이다.
판 자체도 의외의 오차원이다. A4 종이에 인쇄해 벽에 테이프로 붙인 판은 평면이 아니고, 프린터의 배율 오차 때문에 격자 간격도 명목값과 다르다. 격자 간격을 자로 재서 넣는 것이 무료로 얻는 정확도이고, 정밀 작업에서 유리·알루미늄 기판 보정판을 쓰는 이유가 이것이다.
8. 자기보정 — 보정판 없이[편집]
이미 찍힌 영상만으로 내부파라미터를 얻고 싶을 때가 있다. 인터넷에서 긁어온 사진, 이미 촬영이 끝난 항공 영상, 렌즈를 만질 수 없는 상황 등이다. 이것을 자기보정(self-calibration, autocalibration)이라 한다.
논리는 이렇다. 보정 없이 얻은 재구성은 사영변환만큼 불확정하다(15자유도). 그런데 「모든 영상이 같은 카메라로 찍혔다」거나 「비대칭이 0이고 화소가 정사각형이다」 같은 제약을 걸면, 그 불확정성을 유사변환(7자유도)까지 좁힐 수 있다. 즉 장면에 관한 정보 없이 카메라에 관한 가정만으로 보정이 된다.
고전적 형태가 크루파 방정식(Kruppa equations)이다. 두 시점 사이의 기초행렬 는 무한원 평면 위의 절대이차곡선의 상 에 관한 두 개의 독립 방정식을 준다. 내부파라미터가 5개이므로 원리적으로 영상 세 장(쌍 세 개 → 방정식 여섯 개)이면 결정된다. 문제는 수치적 성질이다 — 방정식이 이차이고 해가 여러 개이며, 쌍마다 독립으로 세우기 때문에 무한원 평면의 위치가 쌍 사이에 일관되게 강제되지 않는다. 그래서 실제로는 매우 불안정하다.3
현대적 대안은 절대이차곡면(absolute dual quadric) 를 모든 영상에 대해 한꺼번에 추정하는 방식이다. 사영 재구성의 모든 카메라 행렬 에 대해 라는 관계를 세우고, 비대칭 0·종횡비 1 같은 제약을 선형화해 함께 푼다. 모든 영상을 동시에 쓰므로 크루파보다 훨씬 안정적이고, 여기서 얻은 값을 초기값으로 번들 조정에 내부파라미터를 미지수로 넣어 정련하는 것이 오늘날의 표준 흐름이다.
그럼에도 자기보정에는 축퇴 운동이 존재한다. 카메라가 순수 회전만 하거나 한 직선 위를 평행 이동만 하면 내부파라미터가 결정되지 않고, 광축이 모두 평행한 경우도 조건이 나쁘다. 즉 “사진만 있으면 된다”가 “아무 사진이나 된다”는 뜻은 아니다. 정확도가 필요하면 결국 보정판이 이긴다 — 자기보정은 보정판을 쓸 수 없을 때의 차선이지 상위 기술이 아니다.
9. 현업에서의 현실[편집]
- 보정은 한 번 하고 잊는 작업이 아니다. 렌즈를 다시 조이거나 카메라를 떨어뜨리거나 온도가 20°C 변하면 다시 해야 한다. 정밀 계측 현장에서 매일 아침 보정판을 찍는 것은 미신이 아니다.
- 스테레오 리그의 기선 길이는 자로 재는 것보다 보정으로 얻는 값이 정확하다. 반대로 그 값이 실측과 mm 단위로 다르면 보정을 의심할 신호다.
- 보정 결과를 파일로 저장할 때 어떤 왜곡 모형인지 반드시 함께 적는다. 계수 다섯 개만 적힌 파일을 다른 라이브러리에서 읽으면 순서와 부호 규약이 달라 조용히 틀린다. 보정 사고의 절반은 수학이 아니라 파일 포맷에서 나온다.
- 왜곡보정 영상을 만들어 저장하는 것과 왜곡을 모형으로 들고 다니는 것은 다르다. 전자는 보간 때문에 정보를 잃고 화각도 잘린다. 기하 계산은 원본 화소 + 왜곡 모형으로 하는 것이 원칙이다.
- 카메라-IMU, 카메라-라이다처럼 서로 다른 센서 사이의 외부 보정은 별도 문제이고, 여기서 시간 오프셋까지 함께 추정해야 한다는 점이 초심자를 가장 많이 잡는다. 이 이야기는 오도메트리와 센서 융합 문서로 넘긴다.
10. 관련 문서[편집]
- 스테레오 비전 · 에피폴라 기하 · 호모그래피 · 핀홀 카메라
- 번들 조정 · Structure from Motion · 오도메트리 · SLAM
- 레벤버그-마쿼트 방법 · 최소자승법 · 촐레스키 분해 · 특이값 분해
- 조건수 · 불확실성 정량화 · 안장점 · RANSAC
- 특징점 검출 · 센서 융합 · 직접 선형 변환
11. Footnotes[편집]
-
그래서 현장에서 “해석 결과가 이상한데요”의 원인 추적이 늘 상류로 거슬러 올라간다. 알고리즘을 세 번 갈아엎고 며칠 헤맨 끝에 범인이 초점거리 한 줄이었던 경험은 이 분야 사람 대부분에게 한 번쯤 있다. 보정 파일의 숫자는 코드 리뷰를 통과하지 않는다는 점이 이 문제의 본질이다. ↩
-
는 무한원 평면 위 절대이차곡선의 영상, 즉 IAC(image of the absolute conic)라는 사영기하 대상이다. Zhang의 두 방정식은 결국 “판의 두 방향이 무한원에서 직교한다”는 조건을 IAC로 번역한 것이며, 이 관점에서 보면 평면 보정과 자기보정이 같은 대상의 다른 관측이라는 것이 보인다. 실무자는 이걸 몰라도 보정을 돌릴 수 있지만, 알면 왜 자세를 기울여야 하는지가 한 줄로 이해된다. ↩
-
1990년대 자기보정 논문의 절반이 크루파 방정식을 붙들고 있었고, 결론은 대체로 “이론적으로는 되는데 실제 데이터에서는 안 된다”였다. 무한원 평면을 쌍마다 따로 놓아 버리는 구조적 결함이 원인이고, 이걸 전역적으로 하나로 묶은 절대이차곡면 방식이 나온 뒤 크루파는 사실상 교과서 유물이 됐다. 다만 「두 시점만으로 뭔가 해 보려 했던」 그 시대의 문제의식은 지금도 유효하다. ↩