1. 개요[편집]
| 핀홀 카메라 Pinhole Camera | |
|---|---|
| 모형 | 중심투영 — 모든 광선이 한 점(광학중심)을 지난다 |
| 수식 | $\mathbf x \sim P\mathbf X$, $P = K[R \mid \mathbf t]$ (3×4) |
| 자유도 | 11 = 내부 5 + 외부 6 |
| 보존하는 것 | 직선, 공선성, 교차비 |
| 버리는 것 | 깊이, 길이, 각도, 평행성 |
| 실물 바늘구멍 | 최적 구멍 지름 $d\approx\sqrt{2.44\,\lambda f}$ — 대략 f/200 |
렌즈도 없고 초점도 없다. 구멍 하나면 세상이 뒤집혀 벽에 맺힌다. 컴퓨터 비전 전체가 이 유치한 장치의 수식 위에 서 있다.
핀홀 카메라(pinhole camera, 바늘구멍 사진기)는 크기가 없는 한 점을 통과하는 광선만 상면(image plane)에 도달한다고 가정하는 중심투영 모형이며, 컴퓨터 비전과 컴퓨터 그래픽스에서 「카메라」라고 하면 별말이 없는 한 이 모형을 뜻한다. 3차원 점 와 화소 의 관계가 동차좌표에서 행렬 하나의 곱으로 정확히 쓰인다는 것이 이 모형의 전부이자 위력이다.
실제 카메라에는 렌즈가 있고 렌즈에는 왜곡·수차·피사계심도가 있다. 그럼에도 모두가 핀홀에서 시작하는 이유는, 실렌즈의 비이상성을 「핀홀 + 보정항」으로 분리해 두는 편이 계산이 압도적으로 편하기 때문이다. 왜곡을 먼저 제거해 놓으면 그 뒤의 모든 기하 — 에피폴라 기하, 호모그래피, 삼각측량, 번들 조정 — 이 선형대수로 내려온다.
2. 실물 바늘구멍 — 구멍 크기의 딜레마[편집]
모형 이야기 전에 물건 이야기를 잠깐. 바늘구멍 사진기는 렌즈 없이 상을 맺으므로 어떤 거리에서도 초점이 맞고(정확히는 어디에서도 완벽히는 안 맞고), 왜곡이 원리적으로 0이며, 화각을 상면 크기로 마음대로 정할 수 있다. 대신 상의 선명도는 구멍 지름 가 지배한다.
- 구멍을 키우면 한 점에서 온 빛이 지름 의 원반으로 번진다 — 기하학적 흐림.
- 구멍을 줄이면 회절이 커져 에어리 원반의 지름이 로 번진다 — 물리광학적 흐림(물리광학 참조).
둘이 같아지는 지점이 최적이고, 정리하면
가 된다.1 , 을 넣으면 , 즉 조리개값으로 f/193이다. f/2.8 렌즈에 비해 노출이 5000배 필요하다는 뜻이라, 바늘구멍 사진이 죄다 몇 초에서 몇 분씩 걸리는 데에는 이런 사정이 있다.
중요한 것은 이 물리적 한계가 모형에는 하나도 안 들어온다는 점이다. 수학적 핀홀은 이면서 회절은 없는, 물리적으로 존재할 수 없는 이상화다. 그래서 이 문서의 나머지는 광학이 아니라 순수하게 사영기하다.
3. 원근투영의 기하[편집]
카메라 좌표계를 광학중심 가 원점, 광축(주축)이 , 상면이 인 평면이 되도록 잡는다. 점 에서 나온 광선이 원점을 지나 상면과 만나는 곳은 닮은 삼각형 한 번으로 나온다.
여기서 세 가지가 한꺼번에 결정된다.
- 깊이가 사라진다. 는 나눗셈으로만 나타나므로, 와 는 같은 화소에 찍힌다. 한 화소는 3차원 점이 아니라 광학중심에서 뻗어 나가는 반직선 하나에 대응한다. 사진 한 장으로 크기를 알 수 없다는 단안 시각의 근본 한계가 이 한 줄에서 나온다.
- 나눗셈이 원근을 만든다. 멀수록 작아지는 것도, 평행선이 한 점에서 만나는 것도 전부 이 때문이다. 반대로 의 변화폭이 물체 크기에 비해 작으면 가 거의 상수라 원근이 사라진다 — 망원렌즈로 멀리서 찍은 사진이 납작해 보이는 이유이고, 이 극한이 약원근(weak perspective)·정사투영 근사다.
- 상은 뒤집힌다. 물리적 상면은 광학중심 뒤()에 있어 상하좌우가 반전된다. 계산에서는 관례적으로 상면을 앞()에 있는 가상 상면으로 놓아 부호를 없앤다. 실제 센서와 부호가 다르다는 사실을 잊고 하드웨어와 좌표계를 맞추다 하루를 날리는 것은 통과의례에 가깝다.
를 초점거리라 부르지만, 핀홀 모형에서 이 값은 「광학중심에서 상면까지의 거리」다. 실렌즈에서는 무한대에 초점을 맞췄을 때만 렌즈 초점거리와 일치하고, 가까이 초점을 맞추면 상거리가 보다 커진다(). 보정으로 얻은 초점거리가 렌즈 몸통에 적힌 숫자와 몇 %씩 다른 것은 대개 버그가 아니라 이 사정이다.
4. 동차좌표와 3×4 투영행렬[편집]
위 식의 나눗셈이 거슬리는 이유는 비선형이기 때문이다. 동차좌표를 쓰면 나눗셈을 마지막으로 미룰 수 있고, 그러면 투영이 행렬 곱 하나가 된다.
여기에 센서의 화소 좌표계와 카메라의 세계 배치를 붙이면 일반형이 된다.
는 3×4 행렬이고 원소 12개지만 전체 배율이 무의미하므로 자유도는 11이다. 이 11이 곧 내부 5 + 외부 6이며, 대응점에서 를 직접 푸는 최소 대응 수(6점)가 여기서 계산된다 — 직접 선형 변환 참조.
4.1. 내부 파라미터 — 픽셀 단위 초점거리라는 것[편집]
는 「상면의 밀리미터 좌표」를 「센서의 화소 좌표」로 옮기는 상사·아핀 변환이다. 화소 폭 , 높이 라면 , 이고, 그래서 의 단위는 픽셀이다. 이 값이 실무에서 유용한 이유는 화각과 곧장 연결되기 때문이다. 폭 화소인 영상에서
이므로, 이면 수평 화각이 약 53°(표준 렌즈 감각), 이면 90°(광각)다. 보정 결과가 그럴듯한지 30초 만에 확인하는 방법이 이 한 줄이다.2
는 주점, 는 비대칭이다. 세 값의 물리적 의미와 실무적 취급(현대 센서에서 고정, 주점은 영상 중심에서 수 화소~수십 화소 벗어남)은 카메라 보정 문서에서 이미 다뤘으므로 여기서는 넘어간다.
4.2. 외부 파라미터 — 는 카메라 위치가 아니다[편집]
는 세계 좌표를 카메라 좌표로 옮긴다. 즉 다. 초심자가 가장 자주 밟는 지뢰가 여기 있다 — 는 카메라의 세계 좌표가 아니다. 카메라 중심 는 를 만족하는 점이므로
이다. 부호와 전치를 한 번 틀리면 재구성된 카메라들이 장면을 안쪽에서 바깥으로 바라보는 초현실적인 그림이 나오고, 재투영 오차는 정직하게 폭발한다.
4.3. 에서 다시 꺼내기[편집]
로 쪼개면 이고, 가 상삼각· 이 직교이므로 RQ 분해로 유일하게(대각 부호 규약을 정하면) 갈라낼 수 있다. 광축 방향은 의 세 번째 행 이고, 주점은 이다. 그리고 투영 후의 동차 성분 의 부호가 곧 점이 카메라 앞에 있는가(가시성, cheirality)를 말해 준다 — 에피폴라 기하에서 네 개의 자세 후보 중 정답을 고를 때 쓰는 그 부호다.
5. 정규화 이미지 좌표[편집]
를 나눠 버린 좌표
를 정규화 이미지 좌표라 한다. 이는 인 가상 카메라의 상면 좌표이고, 기하학적으로는 광선의 방향벡터를 평면에서 읽은 것이다. 이 좌표계에서 일하는 것이 표준인 이유는 셋이다.
- 카메라마다 다른 가 사라져 서로 다른 카메라의 관측을 같은 언어로 쓸 수 있다. 본질행렬 가 기초행렬 보다 자유도가 적은 것이 이 덕분이다.
- 좌표의 크기가 이라 조건수가 얌전하다. 화소 좌표에서 대 숫자를 곱해 쌓는 것과는 딴판이다.
- 렌즈 왜곡 모형이 정규화 좌표에서 정의된다. 왜곡 → 정규화 → 의 순서가 파이프라인의 국룰인 이유다.
6. 무한원 평면과 소실점[편집]
핀홀 모형의 진짜 재미는 무한히 먼 것도 유한한 화소에 찍힌다는 데 있다. 방향 를 무한원점 로 쓰면
이 나온다. 이 점 가 소실점(vanishing point)이다. 결과가 에 의존하지 않는다는 것이 핵심 — 소실점은 카메라가 어디 있느냐와 무관하고 오직 어디를 보느냐에만 달렸다. 철길을 어디서 찍든 소실점이 지평선 위 같은 자리에 오는 이유이며, 무한원 평면에서 영상으로 가는 사상 을 무한원 호모그래피라 부른다.
여기서 딸려 나오는 실용적 결과들:
- 평면의 소실선. 한 평면 위의 모든 방향의 소실점은 한 직선을 이룬다. 지면의 소실선이 곧 지평선이고, 카메라가 롤 없이 수평을 보고 있으면 지평선은 주점을 지나는 수평선이다. 사진에서 지평선의 높이를 보고 카메라 높이·자세를 되짚는 단일영상 계측이 여기 서 있다.
- 직교 소실점은 를 준다. 서로 직교하는 두 방향의 소실점 는 ()를 만족한다. 건물처럼 서로 직교하는 세 방향이 보이는 사진 한 장이면 초점거리를 뽑아낼 수 있고, 세 직교 소실점이 이루는 삼각형의 수심이 정확히 주점이라는 예쁜 성질까지 딸려 온다. 보정판 없는 자기보정의 가장 고전적인 형태다.
- 평행성은 보존되지 않는다. 핀홀 투영이 지키는 것은 직선·공선성·교차비이고, 평행성·길이·각도·면적비는 전부 버린다. 사영변환의 계층에서 무엇이 남고 무엇이 사라지는지는 호모그래피 문서의 표에 정리돼 있다.
7. CG의 투영행렬은 왜 4×4인가[편집]
같은 「원근투영」인데 그래픽스 교재의 투영행렬은 4×4이고 비전 교재의 것은 3×4다. 이유는 명확하다 — 두 분야가 를 대하는 태도가 정반대이기 때문이다.
비전은 관측된 화소로 3차원을 복원하는 쪽이라, 투영 단계에서 깊이는 이미 잃어버린 정보다. 는 4차원을 3차원으로 보내고, 동차 나눗셈이 끝나면 두 숫자만 남는다. 남은 는 가시성 판정용 부호로만 쓰인다.
그래픽스는 반대로 3차원을 화면에 그리는 쪽이고, 래스터라이저에는 말고 깊이 판정에 쓸 세 번째 숫자가 반드시 필요하다(깊이 버퍼). 그래서 출력 차원을 하나 늘려 4×4로 만들고, 셋째 행을 오직 그 목적으로 채운다. OpenGL의 대칭 절두체 투영행렬은
꼴이고, 여기서 읽어야 할 것은 다음 넷이다.
- 왼쪽 위 2×2 블록이 곧 다. — 화소 단위 초점거리를 반너비로 나눈 값일 뿐이다. 비전의 는 화소로, 그래픽스의 것은 정규화 장치 좌표(NDC)로 스케일했다는 차이뿐이며, 둘 사이는 뷰포트 변환(대각행렬 하나)으로 오간다.
- 넷째 행이 이다. 그래서 나눗셈에 쓰이는 가 다. 비전에서 인 것과 부호만 다르며, 이는 OpenGL 카메라가 를 바라보고 비전 카메라가 를 바라보는 관례 차이다. 영상 축도 비전은 아래로, NDC는 위로 향한다. 비전에서 얻은 를 GL 투영행렬로 옮길 때 두 번의 부호 뒤집기가 필요한 이유가 이것 전부다.3
- 셋째 행은 기하학적 필연이 아니라 설계 선택이다. 깊이가 동차좌표에서 선형이려면 는 꼴일 수밖에 없고, 그래서 깊이 정밀도가 근평면 쪽에 몰린다. z-파이팅과 역-Z 트릭은 전부 이 강제된 형태의 부작용이다.
- 근평면·원평면은 렌더링의 사정이다. 비전의 핀홀 카메라에는 near/far가 없다. 클리핑과 유한 정밀도 깊이 버퍼가 요구하는 값이지 광학이 요구하는 값이 아니다.
같은 이유로 그래픽스에서 텍스처 좌표를 보간할 때 화면공간에서 선형 보간하면 틀리고 로 보간해야 한다(원근 보정 보간). 원근 나눗셈이 화면공간에서 비선형이라는 사실을, 비전은 「깊이를 잃었다」로, 그래픽스는 「보간을 조심해라」로 각각 겪는 셈이다.
8. 실제 카메라와의 괴리[편집]
핀홀은 어디까지나 1차 근사다. 실물과 어긋나는 지점을 정리하면 이렇다.
| 현상 | 핀홀이 놓치는 것 | 처방 |
|---|---|---|
| 방사·접선 왜곡 | 직선이 직선으로 안 간다 | 브라운-콘래디·칸날라-브란트 모형 → 카메라 보정 |
| 유한 조리개 | 초점면 밖은 흐려진다(피사계심도) | 얇은 렌즈 모형, 렌더링에서는 조리개 샘플링 |
| 입사동 | 투영중심은 렌즈 중심이 아니라 입사동 | 회전 중심을 입사동에 맞춤 → 호모그래피 |
| 롤링 셔터 | 행마다 노출 시각이 다르다 | 시간에 따라 자세가 변하는 투영 모형 |
| 초점 브리딩 | 초점을 옮기면 화각·초점거리가 변한다 | 초점 고정, 또는 초점별 보정 |
| 초광각·어안 | 가 90°에서 발산 | 어안 투영 모형 |
이 중 첫 줄이 압도적으로 중요하다. 왜곡을 안 잡고 핀홀 기하를 돌리면 결과가 「틀린 채로 그럴듯하게」 나오기 때문이다. 자세한 모형은 카메라 보정에, 왜곡 자체의 광학적 기원은 렌즈 왜곡 쪽으로 넘긴다.
그리고 근본적인 한계 하나를 다시 강조해 둔다. 핀홀 카메라는 한 장으로 깊이를 모른다. 이것은 잡음이나 모형 오차의 문제가 아니라 사상의 성질이다. 깊이를 얻으려면 시점을 늘리거나(스테레오 비전, 삼각측량), 장면에 관한 사전지식을 넣거나, 광원을 직접 쏘아야 한다. 단안 딥러닝 깊이 추정이 「학습된 사전지식」이라는 세 번째 길에 해당하고, 그래서 학습 도메인 밖에서 조용히 무너지는 성질을 원리적으로 벗어날 수 없다.
9. 관련 문서[편집]
- 카메라 보정 · 직접 선형 변환 · 호모그래피
- 에피폴라 기하 · 삼각측량 · 스테레오 비전
- 번들 조정 · Structure from Motion · SLAM · 오도메트리
- 깊이 버퍼 · 레이 트레이싱 · 컴퓨터 그래픽스 · 그래픽스 파이프라인
- 회전행렬 · 조건수 · 물리광학 · 사영기하학
10. Footnotes[편집]
-
기하학적 흐림 와 에어리 원반 지름 를 같게 놓아 얻은 값이다. 「최적」의 정의를 무엇으로 잡느냐에 따라 앞의 상수가 1.5에서 2 사이에서 오가고, 레일리가 제시한 경험식 가 가장 널리 인용된다. 어차피 바늘구멍을 그 정밀도로 뚫을 수 있는 사람이라면 이미 계산 없이도 감으로 뚫는다. ↩
-
반대로 이 관계 때문에 「초점거리 몇 mm」라는 말은 센서 크기를 모르면 아무 정보가 아니다. 35mm 환산이라는 관습이 생긴 것도, 스마트폰의 4mm 렌즈가 광각으로 보이는 것도 전부 의 분모 쪽 이야기다. 비전 코드에서 초점거리를 mm로 주고받는 순간 사고가 예약된다 — 픽셀로 주고받자. ↩
-
「비전 를 GL 투영행렬로 바꾸기」는 검색하면 코드 조각이 수백 개 나오는데 절반은 부호가 틀려 있고, 나머지 절반은 특정 라이브러리 버전에서만 맞다. 직접 확인하는 유일한 방법은 알려진 3차원 점 몇 개를 두 경로로 각각 투영해 화소 좌표가 같은지 보는 것이다. 「화면에 뭔가 그려졌다」는 검증이 아니다 — 좌우가 뒤집힌 장면도 아주 그럴듯하게 그려진다. ↩