사영기하학

편집 역사 토론
컴퓨터 그래픽스 수치해석 마지막 수정: 2026-09-05 04:16:41

1. 개요[편집]

사영기하학
Projective Geometry
기본 대상사영평면 $\mathbb{P}^2$ — 방향이 같은 벡터를 한 점으로 본다
추가된 것무한원점 · 무한원선 (평행선이 만나는 곳)
대칭점 ↔ 직선 쌍대성 — 정리 하나가 공짜로 두 개
변환군사영변환(호모그래피) — 2D 8자유도, 3D 15자유도
불변량공선성 · 결합관계 · 교차비
버리는 것길이 · 각도 · 넓이 · 평행성 — 전부
비전에서의 쓸모절대원뿔 → 카메라 보정, 계층 복원

유클리드 기하는 “평행선은 만나지 않는다”로 시작한다. 사영기하는 “만난다, 무한히 먼 곳에서”로 시작한다. 그리고 그 한 줄의 개조로 예외 조항이 전부 사라진다.

사영기하학(projective geometry)은 점을 스케일이 무시되는 동차좌표로 표현하고, 그 위에서 「직선을 직선으로 보내는」 변환군이 보존하는 성질만을 다루는 기하학이다. 길이도 각도도 평행성도 지키지 않는 대신, 카메라가 세상을 필름에 눌러 담을 때 실제로 살아남는 구조가 정확히 이것이라서 컴퓨터 비전과 그래픽스의 공용어가 됐다.

동기는 지극히 실용적이다. 유클리드 좌표에서 원근투영은 나눗셈이 들어간 유리함수라 합성도 역변환도 지저분하다. 그런데 좌표를 하나 늘려 동차좌표로 쓰는 순간 투영은 행렬 곱 하나가 되고, 나눗셈은 마지막에 한 번만 하면 된다. 핀홀 카메라의 3×4 행렬, 호모그래피의 3×3 행렬, 그래픽스 파이프라인의 4×4 행렬이 전부 이 아이디어 하나에서 나온다.

역사적으로는 데자르그(1639)가 원근화법의 문제에서 시작했고, 퐁슬레가 1822년 러시아 포로 생활 중에 쓴 Traité des propriétés projectives des figures 로 독립 분야가 됐으며, 클라인의 에를랑겐 프로그램(1872)이 “기하학이란 변환군이 보존하는 성질의 연구”라고 정리하면서 지금의 위치를 얻었다.1 이 문서는 그 구조를 정리하고, 실제로 행렬을 푸는 이야기는 호모그래피·직접 선형 변환·카메라 보정으로 넘긴다.

2. 동차좌표 — 좌표를 하나 늘리면 생기는 일[편집]

평면의 점 (x,y)(x,y)(x,y,1)(x,y,1) 로 쓰고, 0이 아닌 배수를 전부 같은 점으로 본다. 즉

(x1,x2,x3)    (λx1,λx2,λx3),λ0(x_1,x_2,x_3) \;\sim\; (\lambda x_1,\lambda x_2,\lambda x_3), \qquad \lambda \neq 0

이고, x30x_3 \neq 0 이면 (x1/x3,  x2/x3)(x_1/x_3,\; x_2/x_3) 가 원래의 평면 좌표다. 여기서 즉시 이득이 셋 나온다.

  • 평행이동이 선형이 된다. 유클리드 좌표에서 평행이동은 행렬 곱으로 표현할 수 없지만, 동차좌표에서는 3×3 행렬의 마지막 열에 들어간다. 회전·스케일·평행이동·원근을 전부 한 종류의 객체로 다룰 수 있게 되는 것이 실무적으로 가장 큰 선물이다.
  • 나눗셈이 뒤로 밀린다. 변환을 여러 개 합성하는 동안에는 행렬만 곱하고, 화면에 찍기 직전 한 번만 x3x_3 로 나눈다.
  • x3=0x_3 = 0 이라는 새 주소가 생긴다. 이게 다음 절이다.

주의할 점 하나. (0,0,0)(0,0,0) 은 점이 아니다. 사영평면 P2\mathbb{P}^2R3{0}\mathbb{R}^3 \setminus \{\mathbf 0\} 을 스케일로 나눈 것이고, 원점은 방향을 정하지 못하므로 제외된다. 코드에서 동차 벡터의 노름이 0에 가까워지면 정규화하다 폭발하는 사고가 여기서 나온다.

3. 무한원점과 무한원선[편집]

x3=0x_3 = 0 인 점 (x1,x2,0)(x_1,x_2,0) 은 유한한 평면 좌표로 되돌릴 수 없다. 대신 방향을 가리킨다. 기울기가 같은 두 직선 ax+by+c=0ax+by+c=0, ax+by+c=0ax+by+c'=0 을 동차로 쓰면 둘 다 (a,b,0)(a,b,0) 을 지나는데, 이것이 「평행선이 만나는 점」인 무한원점(point at infinity)이다.

무한원점 전체는 x3=0x_3=0 이라는 하나의 직선을 이루고, 이를 무한원선(line at infinity) l=(0,0,1)T\mathbf l_\infty = (0,0,1)^{\mathsf T} 라 부른다. 사진에서 이것이 무엇으로 보이는가 하면 — 지면 위 모든 방향의 무한원점이 찍힌 자리, 즉 지평선이다. 소실점과 소실선의 기하는 핀홀 카메라 문서에 자세하다.

여기서 사영기하의 성격이 드러난다. 무한원점은 특별한 점이 아니다. 사영변환은 무한원점을 유한한 점으로, 유한한 점을 무한원점으로 자유롭게 옮긴다. “저 멀리”와 “여기”의 구별은 사영 구조에 없고, 아핀 구조를 얹어야 비로소 생긴다. 문서 스캐너가 비스듬한 사진을 정면 뷰로 펼 때 실제로 하는 일이 무한원선을 원래 자리로 되돌리는 것이다.

4. 쌍대성 — 정리 하나 사면 하나 더[편집]

P2\mathbb{P}^2 에서 직선도 3-벡터 l=(a,b,c)T\mathbf l = (a,b,c)^{\mathsf T} 로 쓴다. 점이 직선 위에 있다는 조건은 대칭적이다.

lTx=0\mathbf l^{\mathsf T}\mathbf x = 0

x\mathbf xl\mathbf l 의 역할을 바꿔도 식이 그대로다. 그래서 점에 관한 참인 명제에서 「점↔직선」, 「지난다↔만난다」를 맞바꾼 명제도 참이다. 이것이 사영기하의 쌍대 원리(principle of duality)이고, 여기서 나오는 계산 규칙이 놀랄 만큼 짧다.

하고 싶은 것계산
두 점을 지나는 직선l=x1×x2\mathbf l = \mathbf x_1 \times \mathbf x_2
두 직선의 교점x=l1×l2\mathbf x = \mathbf l_1 \times \mathbf l_2
점이 직선 위인가lTx=0\mathbf l^{\mathsf T}\mathbf x = 0

두 연산이 같은 외적이다. 유클리드 좌표라면 “두 직선의 교점”은 연립방정식을 풀고 평행일 때를 따로 처리해야 하지만, 동차좌표에서는 그냥 외적을 하면 되고 평행하면 결과의 세 번째 성분이 0으로 나올 뿐이다 — 예외 처리가 아니라 답이 무한원점인 것이다. 계산기하 코드에서 분기가 통째로 사라지는 이 체험이 사영기하를 처음 배울 때의 제일 큰 감동이다.2

쌍대성은 변환에도 붙는다. 점이 xHx\mathbf x \mapsto H\mathbf x 로 가면 직선은

l    HTl\mathbf l \;\mapsto\; H^{-\mathsf T}\,\mathbf l

로 간다. lTx\mathbf l^{\mathsf T}\mathbf x 가 보존되도록 하는 유일한 규칙이다. 법선벡터를 변환할 때 역전치를 곱하는 그래픽스의 국룰과 정확히 같은 이유다.

5. 사영변환과 자유도 8[편집]

P2\mathbb{P}^2 의 사영변환은 정칙 3×3 행렬 HHx~=Hx\tilde{\mathbf x}' = H\mathbf x 이며, HHλH\lambda H 가 같은 변환이므로 원소 9개에서 스케일 1을 뺀 자유도 8이다. 대응점 하나가 방정식 2개를 주므로 일반 위치의 점 4개HH 가 유일하게 결정되고, 이것이 사영기하학의 기본 정리(Pn\mathbb{P}^n 의 사영변환은 일반 위치의 n+2n+2 점으로 결정된다)의 n=2n=2 인 경우다. 실제 풀이는 직접 선형 변환특이값 분해의 일이다.

3차원으로 올라가면 P3\mathbb{P}^3 의 사영변환은 4×4 행렬이라 자유도가 161=1516-1=15 다. 이 숫자가 뒤의 계층 복원에서 다시 나온다.

6. 교차비 — 마지막 불변량[편집]

사영변환은 길이도 길이의 비도 지키지 않는다. 그런데 비의 비는 지킨다. 한 직선 위의 네 점 x1,,x4\mathbf x_1,\dots,\mathbf x_4 를 그 직선 위의 2-벡터 동차좌표로 쓰고 dij=det[xi    xj]d_{ij} = \det[\,\mathbf x_i\;\;\mathbf x_j\,] 로 두면

Cross(x1,x2;x3,x4)  =  d12d34d13d24\mathrm{Cross}(\mathbf x_1,\mathbf x_2;\mathbf x_3,\mathbf x_4) \;=\; \frac{d_{12}\,d_{34}}{d_{13}\,d_{24}}

모든 사영변환에 대해 불변이다. 비동차 좌표 xix_i 로 쓰면 (x1x2)(x3x4)(x1x3)(x2x4)\dfrac{(x_1-x_2)(x_3-x_4)}{(x_1-x_3)(x_2-x_4)} 이다.3 스케일도 dijd_{ij} 의 분자·분모에서 상쇄되므로 좌표계 선택과도 무관하다.

왜 이게 쓸모 있는가. 사진 한 장에서 잴 수 있는 것은 화소 좌표뿐인데, 화소 좌표는 사영변환만큼 자유롭다. 그런데 교차비는 그 자유도를 뚫고 살아남으므로, 미지의 카메라로 찍은 사진 한 장에서 실제 길이의 관계를 복원할 수 있다. 건물 벽면에서 층 높이를 알면 옥상 높이를 알아내는 고전적인 단일영상 계측, 도로 위 차선 간격으로 차량까지의 거리를 재는 트릭이 전부 이 한 줄 위에 서 있다. 직선 위 네 점이 필요하니 실무에서는 소실점을 네 번째 점으로 쓰는 것이 정석이다 — 소실점은 그 방향의 무한원점이라 좌표를 정확히 아는 공짜 표본이다.

7. 원뿔곡선 — 대칭행렬 한 장[편집]

원·타원·포물선·쌍곡선은 사영기하에서 구별되지 않는다. 전부 하나의 대상이고, 대칭 3×3 행렬 CC

xTCx=0\mathbf x^{\mathsf T} C\,\mathbf x = 0

로 쓴다. 무한원선과 몇 번 만나느냐(0·1·2번)가 타원·포물선·쌍곡선의 차이인데, 사영변환은 무한원선을 마음대로 옮기므로 그 구별도 함께 사라진다. 원기둥을 비스듬히 자르면 타원이 되고 더 기울이면 포물선이 되는 그 연속성이, 사영기하에서는 “같은 것을 다르게 본 것”이라는 한 문장으로 끝난다.

성질을 정리하면 이렇다.

  • CC 는 대칭이라 원소 6개, 스케일을 빼면 자유도 5. 그래서 일반 위치의 점 5개가 원뿔곡선 하나를 결정한다.
  • CC 위의 점 x\mathbf x 에서의 접선l=Cx\mathbf l = C\mathbf x. 미분 없이 행렬 곱 한 번이다.
  • 쌍대성에 따라 접선들의 집합도 원뿔곡선이며, 쌍대 원뿔곡선 C=C1C^{*} = C^{-1}(비정칙이면 수반행렬)에 대해 lTCl=0\mathbf l^{\mathsf T} C^{*}\mathbf l = 0 이다.
  • 사영변환에서 CHTCH1C \mapsto H^{-\mathsf T} C H^{-1}, CHCHTC^{*} \mapsto H\,C^{*}H^{\mathsf T}.

원뿔곡선을 굳이 이렇게 다루는 이유는 미학이 아니다. 다음 절의 절대원뿔이 행렬 하나로 표현되고, 카메라 보정이 그 행렬을 추정하는 문제로 번역되기 때문이다. 자세한 곡선론은 원뿔곡선이차형식의 몫이다.

8. 절대원뿔 — 각도가 숨어 있는 자리[편집]

사영 세계에는 각도가 없다. 그런데 우리는 사진에서 각도를 복원하고 싶다. 이 모순을 푸는 장치가 절대원뿔(absolute conic) Ω\Omega_\infty 다.

P3\mathbb{P}^3 의 무한원 평면 π\pi_\infty 위에서

x12+x22+x32=0,x4=0x_1^2 + x_2^2 + x_3^2 = 0, \qquad x_4 = 0

을 만족하는 점들의 집합이 Ω\Omega_\infty 다. 실수 점이 하나도 없는 허구의 곡선이지만, 그 정체는 명확하다 — 방향벡터의 직교성 정보 그 자체다. 유클리드 구조를 아는 것과 Ω\Omega_\infty 의 위치를 아는 것은 완전히 같은 말이고, 그래서 상사변환은 ”Ω\Omega_\infty 를 제자리에 두는 사영변환”으로 특징지어진다.

핵심은 이것이 카메라에 어떻게 찍히는가다. 내부행렬 KK 인 카메라에서 절대원뿔의 상(IAC, image of the absolute conic)은

ω  =  KTK1\omega \;=\; K^{-\mathsf T}K^{-1}

이고, 여기에 RRt\mathbf t 도 들어가지 않는다. 카메라가 어디서 어디를 보든 ω\omega 는 같다. 그리고 두 화소 x1,x2\mathbf x_1,\mathbf x_2 에 대응하는 시선 사이의 각은

cosθ  =  x1Tωx2x1Tωx1  x2Tωx2\cos\theta \;=\; \frac{\mathbf x_1^{\mathsf T}\omega\,\mathbf x_2}{\sqrt{\mathbf x_1^{\mathsf T}\omega\,\mathbf x_1}\;\sqrt{\mathbf x_2^{\mathsf T}\omega\,\mathbf x_2}}

로 나온다. 즉 ω\omega 를 알면 화소에서 각도를 잴 수 있고, ω\omega촐레스키 분해하면 KK 가 나온다. 카메라 보정이란 결국 ω\omega 를 추정하는 일이라는 재정의가 여기서 성립한다.

실제 기법들이 전부 이 한 줄의 변주다. 직교하는 두 방향의 소실점은 v1Tωv2=0\mathbf v_1^{\mathsf T}\omega\,\mathbf v_2 = 0 을 주고, Zhang의 평면 체스보드 보정에서 나오는 두 제약도 판의 두 축이 무한원에서 직교한다는 조건을 ω\omega 로 번역한 것이며, 자기보정의 절대이차곡면 QQ^{*}_\inftyΩ\Omega_\infty 의 쌍대를 P3\mathbb{P}^3 에서 통째로 추정하는 방식이다. 실무 절차와 함정은 카메라 보정에 정리돼 있다.

평면 하나만 다룰 때는 같은 역할을 원환점(circular points) I=(1,i,0)T\mathbf I = (1, i, 0)^{\mathsf T}, J=(1,i,0)T\mathbf J = (1,-i,0)^{\mathsf T} 가 한다. 모든 원이 이 두 점을 지나며, 영상에서 I,J\mathbf I,\mathbf J 의 상을 찾아내면 그 평면의 각도·길이비가 복원된다. Ω\Omega_\infty 가 각 평면과 만나는 자리가 그 평면의 원환점이므로, 둘은 같은 대상의 2D판과 3D판이다.

9. 계층 복원 — 사영에서 유클리드까지[편집]

보정 정보 없이 사진만으로 3차원 재구성을 하면, 결과는 참값과 미지의 사영변환만큼 어긋난 채로 나온다. 자유도 15가 통째로 미결정이라는 뜻이다. 여기서 정보를 조금씩 넣어 그 모호성을 단계적으로 좁히는 것이 계층 복원(stratification)이다.

남은 모호성자유도이 층으로 올라가려면복원되는 것
사영사영변환15(보정 없는 재구성의 출발점)결합관계, 공선성, 교차비
아핀아핀변환12무한원 평면 π\pi_\infty 를 찾는다평행성, 길이의 비, 중점, 넓이비
상사(계량)상사변환7절대원뿔 Ω\Omega_\infty 를 찾는다각도, 길이의 비, 형상
유클리드강체변환6실제 길이 하나를 넣는다절대 길이

계단의 폭이 15=3+5+715 = 3 + 5 + 7 로 딱 떨어지는 것이 예쁘다. 무한원 평면의 위치가 3자유도, 그 위에서 절대원뿔의 위치가 5자유도, 남은 상사변환이 7자유도다.4

각 단계에 필요한 정보의 성격이 서로 다르다는 점이 실용적으로 중요하다. 아핀 층으로 올라가려면 장면에 관한 정보(평행선 세 방향, 알려진 평면)가 필요하고, 상사 층으로 올라가려면 카메라에 관한 정보(비대칭 0, 정사각 화소, 초점거리 고정)가 필요하며, 마지막 스케일은 오직 외부에서 잰 길이 하나로만 채워진다. 사진을 아무리 많이 찍어도 “작은 방을 가까이서” 와 “큰 방을 멀리서”를 구별할 수 없다는 단안 시각의 근본 한계가 이 표의 마지막 줄이다. Structure from Motion이 스케일을 밖에서 받아야 하고, 포토그래메트리가 기준점과 기선 길이를 그토록 챙기는 이유가 여기 있다.

현대 파이프라인은 이 계단을 한 칸씩 오르는 대신, 내부파라미터에 제약을 걸고 번들 조정으로 한 번에 상사 층까지 올라가는 경우가 많다. 그래도 계층 관점을 알아 두면 왜 특정 촬영 배치에서 재구성이 축퇴하는지가 바로 보인다 — 순수 회전만 하면 π\pi_\infty 가 결정되지 않고, 광축이 전부 평행하면 Ω\Omega_\infty 의 조건수가 무너진다.

10. 함정 모음[편집]

  1. 동차 벡터를 정규화 없이 비교하지 않는다. x\mathbf x2x-2\mathbf x 는 같은 점이다. 두 점이 같은지 보려면 좌표를 나누거나 외적이 0인지 보라.
  2. 마지막 성분으로 나누는 것을 무조건 하지 않는다. x3=0x_3=0 인 정당한 점(무한원점)이 존재한다. 나누기 전에 크기를 확인하지 않으면 지평선 근처에서 반드시 폭발한다.
  3. h33=1h_{33}=1 로 고정하는 편법을 쓰지 않는다. 무한원점을 원점으로 보내는 정상적인 호모그래피를 표현하지 못한다. h=1\lVert\mathbf h\rVert = 1 제약이 안전하다.
  4. 직선을 HH 로 곱하지 않는다. 직선은 HTH^{-\mathsf T} 다. 이 하나를 틀리면 결과가 “대충 맞는데 미묘하게 틀린” 상태가 되어 발견이 늦다.
  5. 사영 세계에 각도를 요구하지 않는다. 직각을 세우고 싶으면 반드시 ω\omega 든 원환점이든 계량 정보를 먼저 넣어야 한다.
  6. 선형계를 세우기 전에 좌표를 정규화한다. 화소 좌표를 그대로 쓰면 ATAA^{\mathsf T}A조건수10810^{8} 대로 뛴다. 이유와 처방은 직접 선형 변환에 있다.

11. 관련 문서[편집]

12. Footnotes[편집]

  1. 퐁슬레는 나폴레옹의 러시아 원정에 공병 장교로 참전했다가 포로가 되어 사라토프 수용소에서 2년 가까이 지냈는데, 그 기간에 책도 없이 기억만으로 사영기하를 재구성했다고 전해진다. 수용소에서 쓴 노트가 1822년의 저작이 됐다. 대학원생들이 “환경이 나빠서 연구가 안 된다”고 할 때 지도교수가 꺼내기 좋은 일화이지만, 그렇다고 포로 생활을 권할 수는 없다.

  2. 계산기하 코드에서 “두 직선이 평행한 경우”를 따로 처리하다 부동소수점 임계값 때문에 버그를 낸 경험은 이 바닥의 통과의례다. 동차좌표는 그 분기를 없애 주지만 공짜는 아니다 — 대신 “결과의 세 번째 성분이 0에 가까울 때 무엇을 할 것인가”라는 질문이 그대로 남는다. 분기가 사라진 게 아니라 한 층 위로 올라간 것에 가깝다.

  3. 교차비는 네 점의 순서를 바꾸면 값이 바뀐다. 24가지 순열이 λ, 1/λ, 1λ, 1/(1λ), λ/(λ1), (λ1)/λ\lambda,\ 1/\lambda,\ 1-\lambda,\ 1/(1-\lambda),\ \lambda/(\lambda-1),\ (\lambda-1)/\lambda 의 여섯 값으로 갈리므로, 교과서마다 정의가 달라 보이는 것은 대개 순서 규약 차이다. 코드와 논문을 섞어 쓸 때는 자기 규약을 한 번 고정하고 시작하는 편이 정신 건강에 좋다. 참고로 λ=1\lambda = -1 이면 여섯 값이 두 개로 뭉치는데, 이 특별한 배치를 조화 공역이라 부르고 자와 컴퍼스 없이 중점을 작도하는 고전 트릭의 근거가 된다.

  4. “사영 재구성이면 뭘 할 수 있냐”는 질문의 정직한 답은 “생각보다 많다”이다. 어떤 점이 어떤 평면 위에 있는지, 어떤 세 점이 한 직선 위인지, 가려짐 순서가 어떤지는 전부 사영 층에서 이미 결정된다. 다만 그 재구성을 화면에 띄우면 사람 눈에는 참혹하게 일그러진 덩어리로 보이기 때문에, 데모를 해야 하는 입장에서는 최소한 상사 층까지는 올라가야 한다.