영상 기하 · OpenCV 4.10.0

카메라 보정의 좌표와 오차

렌즈를 설명하는 값과 카메라의 자세를 설명하는 값은 다릅니다. 픽셀 오차가 작다고 해서 실제 거리까지 정확하다고 볼 수는 없습니다.

세계에서 픽셀까지

왜곡이 없는 핀홀 모델에서 Xc = R Xw + t는 세계 좌표의 점을 카메라 좌표로 옮깁니다. 이어 u = fx Xc/Zc + cx, v = fy Yc/Zc + cy로 픽셀을 구합니다. 나눗셈에는 Zc ≠ 0이 필요하고, 보통 카메라 앞의 점을 해석할 때는 Zc > 0을 사용합니다. OpenCV의 투영 모델

세계 좌표를 R과 t로 카메라 좌표로 바꾸고 깊이로 나눈 뒤 K로 픽셀을 구한다. 예시 Xc 0.2, Yc 0.1, Zc 2에서 정규화 좌표는 0.1과 0.05, 픽셀은 720과 400이다.
직접 계산한 왜곡 전 예시입니다. 실제 카메라 측정값이 아닙니다.

예를 들어 카메라 좌표가 (0.2, 0.1, 2)m이고 fx = fy = 800px, (cx, cy) = (640, 360)px이면 (u, v) = (720, 400)px입니다. 거리를 같은 단위로 두 배 늘린 (0.4, 0.2, 4)m도 같은 픽셀에 투영됩니다. 픽셀 한 점만으로 깊이가 정해지지는 않습니다.

R, t의 방향을 바꾸어 읽으면 안 됩니다. 위 정의에서 카메라 중심의 세계 좌표 Cw는 0 = R Cw + t를 만족하므로, 회전 행렬의 역행렬을 적용하면 Cw = −Rᵀt입니다. t를 곧바로 세계 좌표의 카메라 위치라고 부르면 변환 방향을 놓칩니다.

내부 행렬과 왜곡

K는 픽셀 단위의 fx, fy, cx, cy를 담습니다. 왜곡 계수는 별도입니다. OpenCV의 표준 모델에서 방사·접선 왜곡에 더해 rational, thin-prism, tilted-sensor 항을 사용할지는 선택한 플래그에 달려 있습니다. 모델이 다른 계수 배열을 숫자 개수만 맞춰 바꾸어 쓰지 않습니다. 왜곡 모델과 계수

하나의 결과 파일 안에서도 의미와 단위가 다릅니다
값뜻혼동하지 않기
K카메라 좌표에서 픽셀로 가는 내부 행렬fx와 fy는 렌즈 사양표의 mm 수치를 그대로 넣는 칸이 아님
R, t정해진 세계·패턴 좌표에서 카메라 좌표로의 변환좌표계의 정의와 변환 방향이 필요함
distCoeffs선택한 렌즈 모델의 왜곡 계수K를 안다고 왜곡이 자동으로 제거되는 것은 아님
RMS관측점과 재투영점 사이의 픽셀 오차현장 전체의 mm 단위 거리 정확도가 아님

재투영 오차의 의미

알려진 패턴의 3D 점과 여러 영상의 2D 관측점을 대응시켜 내부 파라미터와 뷰별 자세를 추정합니다. OpenCV 4.10.0의 calibrateCamera() 반환값은 전체 RMS 재투영 오차이며, perViewErrors는 확장 overload가 제공합니다. 모든 바인딩의 기본 반환값에 뷰별 오차가 들어 있다고 가정하지 않습니다. 출력과 최적화 계약

오차의 뜻을 직접 계산하면, 두 점의 오차 벡터가 각각 (3, 4)px와 (0, 0)px인 예시의 RMS는 √((3² + 4² + 0² + 0²)/2) ≈ 3.536px입니다. 이는 대응점의 적합도입니다. 촬영하지 않은 영역·거리, 바뀐 초점, 패턴 치수의 오차까지 검증했다는 뜻은 아닙니다. 특히 영상 중앙의 적합도만 좋아 보이는 왜곡 추정도 가능하므로 결과 숫자 하나와 시야 전체의 타당성을 구분합니다.

리사이즈와 크롭

같은 광학 조건에서 좌표를 균일하게 절반으로 줄이면 위 예시의 fx, fy는 400px, cx, cy는 320px와 180px이 되고 결과 픽셀도 (360, 200)이 됩니다. 왜곡 계수는 같은 모델을 유지합니다. 해상도 변경 조건

반면 원본의 (100, 50)에서 시작하는 크롭만 했다면 좌표 정의상 u′ = u − 100, v′ = v − 50입니다. 초점 값은 그대로이고 주점은 (540, 310), 예시 점은 (620, 350)이 됩니다. 크롭 뒤 절반 리사이즈를 하면 그 결과에 다시 1/2을 적용합니다. 이는 주어진 좌표 변환의 계산이며 특정 영상 라이브러리의 반 픽셀 샘플링 규약을 가정한 구현 코드가 아닙니다. 실제 영상 처리기의 좌표 원점·리샘플링 규약과 렌즈·초점 변경을 별도로 확인해야 합니다.

출처와 연결

기술 기준은 OpenCV 4.10.0 calib3d와 위 고정 버전 헤더입니다. 주제의 계기는 2013년 카메라 캘리브레이션 해설이며, 원문 그림·문구나 과거 설치 도구는 재배포하지 않았습니다. 수치와 도식은 자체 예시이고 실제 렌즈 보정을 수행한 결과가 아닙니다.

카메라 프레임과 버퍼의 경로는 전송·수명에 관한 별도 설명입니다. 프레임을 정상적으로 받았다고 해서 기하 보정까지 올바른 것은 아닙니다.

English summary

Extrinsics map world coordinates to camera coordinates; intrinsics then map normalized coordinates to pixels. Distortion belongs to the selected model, not K alone. Overall reprojection RMS measures fit to observations; per-view errors require the extended calibration API. Resize and crop have different coordinate transforms. All numbers and the diagram are illustrative calculations, not results from a calibrated camera.