[COLMAP] SolvePnP와 Stereo Calibration의 차이
📸 여러 대의 카메라로 체커보드 촬영 후 Extrinsics 구하기
복수의 카메라를 사용해 외부 파라미터(extrinsics)를 추정할 때, 특히 체커보드를 동시에 촬영한 경우 어떻게 처리할 수 있을지 정리해보겠습니다.
🧩 문제 설정
4대의 카메라가 동시에 체커보드를 촬영했다고 가정합니다. 각 카메라는 미리 자체적으로 내부 파라미터(intrinsics)를 구한 상태입니다. 이때 extrinsics를 어떻게 구할 수 있을까요?
그림 1. 4대의 카메라로 동시에 체커보드를 촬영된 이미지
✅ 기본 아이디어
각 카메라에서 체커보드를 촬영한 이미지를 이용해, solvePnP를 통해 각 카메라 기준 체커보드의 pose를 구합니다. 즉, 체커보드가 각 카메라 좌표계에서 어디에 있는지를 계산합니다.
그림 2. SolvePnP로 각 카메라 프레임에서 체커보드의 위치가 계산됨
여기서 한 발 더 나아가면, 역변환을 통해 체커보드 기준에서의 카메라 pose를 얻을 수 있습니다. 예를 들어, 카메라 1 기준에서 체커보드의 pose가 있다면, 그 역행렬을 취하면 체커보드 기준에서 카메라 1의 pose가 됩니다.
이렇게 구한 각 카메라의 pose를 체커보드 좌표계 상에 위치시키면, 서로 다른 카메라들 간의 상대 pose 역시 계산할 수 있습니다. 예를 들어:
T_cam1_to_cam2 = T_board_to_cam2 * inv(T_board_to_cam1)
🔄 Stereocalibration과의 비교
그렇다면 OpenCV의 stereoCalibrate를 사용하는 방식과는 어떤 차이가 있을까요?
stereocalibration은 각 카메라에서 동시에 촬영된 여러 장의 체커보드 이미지 쌍을 사용합니다.
이 과정에서는 최적화가 수행되어, 두 카메라 간의 상대 pose를 보다 정밀하게 추정합니다.
즉, 반복적으로 촬영하고 최적화를 수행함으로써 오차를 줄이는 방식입니다.
반면, solvePnP를 사용한 방식은 한 번의 촬영만으로도 각 카메라의 pose를 얻을 수 있습니다. 따라서 간편하고 빠르지만, 정확도 면에서는 최적화 과정을 거치는 stereocalibration에 비해 상대적으로 떨어질 수 있습니다.
Leave a comment