기술 필드 노트 #20 · 2026년 11월
안정적이라고 맞는 것은 아니다: 녹화마다 저장되는 캘리브레이션 파일은 800×600용, 영상은 1600×1200
기술노트 #20 · 녹화별 캘리브레이션 파일과 영상의 해상도 불일치, 그리고 잡아내는 방법 (ODL-EGO S1)
실제 작업 4일에 대해 스테레오 캘리브레이션 일관성 검사를 돌렸을 때 결과는 좋은 소식처럼 보였습니다. 정렬 후 세로 오차가 매일 중앙값 4.3~5.1px로 변화가 없었습니다. 그런데 틀린 결과였습니다. 분석이 리그가 녹화 폴더마다 저장하는 캘리브레이션 파일을 불러왔는데, 이 파일은 800×600 영상용이고 실제 녹화는 1600×1200입니다. 원본 해상도 프레임에 적용하면 곧은 선이 휘고, 크고 완벽하게 반복되는 오차가 남습니다. 바로 그 반복성 때문에 안정성처럼 보였습니다. 모드가 맞는 1600×1200 캘리브레이션으로는 같은 리그가 한 작업 시간 내내 0.41~0.72px입니다(기술노트 #16). 녹화 모드와 맞지 않는 캘리브레이션 파일이 우리 파이프라인에 들어온 것은 두 번째라(기술노트 #13), 이번에는 구조적으로 고쳤습니다. 모든 기하 계산은 먼저 캘리브레이션의 영상 크기와 디코딩한 프레임 크기가 같은지 확인하고, 다르면 멈춥니다.
왜 중요한가
반복되는 오차는 안정성처럼 보인다
며칠에 걸친 캘리브레이션 일관성 검사는 보통 하나를 묻습니다. 숫자가 움직였나? 틀린 캘리브레이션도 움직이지 않습니다. 매일 같은 큰 오차를 내고, 그 오차를 그린 그래프는 평평합니다. 평평하면 '안정적'으로 읽기 쉽습니다.
이 노트는 우리 분석에서 그 일이 어떻게 일어났는지, 숫자가 왜 그럴듯했는지, 이제 무엇으로 막는지 기록합니다. 같은 파일이 이 리그의 모든 녹화 폴더에 있으니, 이 녹화를 처리하는 누구나 같은 실수를 할 수 있어 공개합니다.
무슨 일이 있었나
영상 옆에 있는 파일이 그 영상의 파일은 아니다
자동 분석(2026-11-01~11-04, 세션 20개, 클라우드 일괄 처리)은 각 녹화 폴더의 calibration/<시리얼>/calibration.yaml을 불러와 10초마다 좌우 한 쌍을 정렬하고 ORB 특징점 매칭의 세로 차이를 쟀습니다. 결과는 일별 중앙값 4.3~5.1px로 4일 모두 비슷했습니다.

| 날짜 | 표본 | 중앙값(px) | 10분위(px) | 90분위(px) | 표본당 매칭 수 중앙값 |
|---|---|---|---|---|---|
| 2026-11-01 | 756 | 4.32 | 2.88 | 9.58 | 287 |
| 2026-11-02 | 598 | 5.06 | 2.99 | 9.95 | 199 |
| 2026-11-03 | 768 | 4.32 | 2.99 | 8.36 | 300 |
| 2026-11-04 | 712 | 4.98 | 2.99 | 9.0 | 237 |
평평한 결과가 처음에 놓친 경고 신호였습니다. 영상에 정말 맞는 캘리브레이션이었다면 기술노트 #16처럼 1px보다 훨씬 작았을 것입니다.
눈으로 보는 증거
곧은 선이 휘어 나온다
올바른 캘리브레이션으로 정렬하면 곧은 모서리는 곧은 선이 되고, 같은 점이 두 눈에서 같은 행에 놓입니다. 800×600 파일을 1600×1200 프레임에 적용하면 곧은 문틀이 크게 휘고 특징점이 행 사이를 오갑니다.


파일 수준 점검
영상 없이 하는 네 가지 확인
불일치는 파일 자체에서 보입니다. 각 확인은 몇 초면 되고 YAML 파일과 디코딩한 프레임 하나만 있으면 됩니다.
| 확인 항목 | 캘리브레이션 파일 | 영상 | 해석 |
|---|---|---|---|
| 파일 안의 영상 크기 | 800×600 | 1600×1200(디코딩한 프레임) | 불일치: 2배 |
| 주점 cx, cy (cam0) | 403.4, 306.3px | 이 렌즈라면 약 800, 600px 예상 | 800×600 영상의 중심 |
| 초점거리 fx, fy (cam0) | 241.2, 241.2px | — | 800×600에만 맞는 값 |
| 모든 녹화 폴더에 같은 파일 | 예, 4일 모두 동일 | — | 녹화 모드와 연결되지 않음 |
검증하지 않은 작업 가설: 이 파일이 같은 캘리브레이션의 절반 해상도 버전일 수 있고, 그렇다면 fx, fy, cx, cy를 2배 하면 1600×1200 내부값에 가까울 것입니다. 쓰기 전에 모드가 맞는 파일과 비교해 확인할 예정이며, 그때까지는 모드가 맞는 파일만 씁니다.
바뀐 점
크기 확인이 먼저, 기하 계산은 그다음
검증 결과: 녹화별 캘리브레이션 파일은 800×600 영상을 기술하고, 녹화는 1600×1200이며, 그 파일을 쓰면 안정적이지만 틀린 4~5px 오차가 나옵니다.
절차: 파이프라인의 모든 기하 단계(정렬, 에피폴라 검사, 깊이)는 이제 캘리브레이션 영상 크기와 디코딩 프레임 크기가 같은지 확인하고, 다르면 오류로 멈춥니다. 납품에는 모드가 맞는 캘리브레이션 파일, 그 녹화 모드 이름, 납품 프레임으로 한 검증 결과가 들어갑니다(기술노트 #13 이후 도입).
범위와 한계
연구의 한계
이 노트가 보여주지 않는 것을 먼저 밝힙니다.
- 여기서 오차는 10초마다 한 쌍의 ORB 매칭으로 잰 것으로, 일관성 지표이지 완전한 캘리브레이션 평가가 아닙니다.
- 절반 해상도 가설은 확인하지 않았습니다.
- 리그 1대, 펌웨어 1개 버전의 결과입니다. 다른 장치나 펌웨어는 다른 파일을 저장할 수 있습니다.
- 모든 검사는 자동 처리입니다. 알고리즘 기반 예비 분석(AI-only preliminary analysis)이며 사람이 다시 검증하지 않았습니다.
FAQ
데이터 구매자가 묻는 질문
Q01이 리그의 1600×1200 녹화에는 어떤 캘리브레이션 파일을 써야 하나요?
Q02캘리브레이션 파일이 내 영상에 맞는지 어떻게 아나요?
Q03틀린 파일이 왜 안정적으로 보였나요?
Q04이전 Origin Data Lab 노트에도 영향이 있나요?
Q05800×600 파일을 2배 하면 되나요?
공개 데이터와 코드
근거 자료를 직접 확인하세요
이 노트의 모든 수치는 검증할 수 있습니다. 가공 데이터, 분석 코드, 그림, 실행 가능한 노트북을 공개합니다.
origin-data-lab/recording-folder-calibration-file-resolution-mismatch저장소 보기 origin-data-lab/recording-folder-calibration-file-resolution-mismatch데이터셋 열기 origindatalab/odl-calibration-file-resolution-checkKaggle에서 보기 라이선스: CC BY 4.0 (데이터·그림) · MIT (코드)
Origin Data Lab (2026). 기술노트 #20: 안정적이라고 맞는 것은 아니다. https://origindatalab.io/ko/technical-field-notes/recording-folder-calibration-file-resolution-mismatch.html