직접 선형 변환

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

1. 개요[편집]

직접 선형 변환
Direct Linear Transformation (DLT)
푸는 것동차 선형계 $A\mathbf h = \mathbf 0$ ($\lVert\mathbf h\rVert=1$ 제약)
도구특이값 분해의 최소 특이값 우특이벡터
선형화 트릭외적 $\mathbf x \times P\mathbf X = \mathbf 0$ — 동차 나눗셈 제거
대응당 방정식독립 2개 (외적 3성분 중 1개는 종속)
전제 조건하틀리 정규화. 생략하면 조용히 틀린다
최소화하는 것대수적 오차 — 기하학적 오차가 아니다
출신사진측량 (Abdel-Aziz & Karara, 1971)

이 바닥에서 「일단 SVD 때리고 마지막 열 가져와라」라는 조언이 나오면, 십중팔구 DLT 이야기다.

직접 선형 변환(Direct Linear Transformation, DLT)은 동차좌표 사이의 사영 관계를 미지 행렬의 원소에 대한 동차 선형연립방정식 Ah=0A\mathbf h = \mathbf 0 으로 바꾼 뒤, h=1\lVert \mathbf h\rVert = 1 제약 아래 Ah\lVert A\mathbf h\rVert 를 최소화하는 해를 특이값 분해로 구하는 표준 레시피다. 특정 알고리즘 하나의 이름이라기보다 에 가까워서, 호모그래피 추정·카메라 행렬 추정·기초행렬 8점 알고리즘·삼각측량·원뿔곡선 적합이 전부 이 틀의 사례다.

이름은 사진측량에서 왔다. 압델아지즈와 카라라가 1971년에 「보정판의 3차원 좌표와 사진 좌표를 직접(중간 단계 없이) 선형계로 이어 카메라 파라미터를 얻는다」는 뜻으로 붙였고, 번들 조정이 그렇듯 이 분야의 기초 도구 상당수가 컴퓨터 비전이 아니라 사진측량 유산이다.

DLT를 제대로 쓰는 데 필요한 것은 사실 세 문장이다. (1) 외적으로 선형화하고, (2) 반드시 정규화하고, (3) 나온 답을 초기값으로만 쓴다. 아래는 그 세 문장의 해설이다.

2. 왜 선형이 되는가 — 외적 한 번[편집]

투영은 xPX\mathbf x \sim P\mathbf X 인데, 이 \sim 이 문제다. 동치를 그대로 쓰려면 x=λPX\mathbf x = \lambda P\mathbf X 로 미지 스칼라 λ\lambda 를 끌고 다녀야 하고, 성분별로 나누면 분모에 미지수가 들어가 비선형이 된다.

탈출구는 동치를 등식이 아니라 「방향이 같다」로 읽는 것이다. 두 동차벡터가 평행이라는 조건은 외적이 0이라는 조건과 정확히 같고, 외적은 PP 의 원소에 대해 선형이다.

xi×(PXi)=0\mathbf x_i \times \bigl(P\,\mathbf X_i\bigr) = \mathbf 0

PP 의 세 행을 p1,p2,p3\mathbf p^1,\mathbf p^2,\mathbf p^3 로 놓고 xi=(xi,yi,wi)T\mathbf x_i = (x_i,y_i,w_i)^{\mathsf T} 라 하면 성분을 풀어 쓸 수 있다.

(0TwiXiTyiXiTwiXiT0TxiXiTyiXiTxiXiT0T)(p1p2p3)=0\begin{pmatrix} \mathbf 0^{\mathsf T} & -w_i\mathbf X_i^{\mathsf T} & y_i\mathbf X_i^{\mathsf T}\\ w_i\mathbf X_i^{\mathsf T} & \mathbf 0^{\mathsf T} & -x_i\mathbf X_i^{\mathsf T}\\ -y_i\mathbf X_i^{\mathsf T} & x_i\mathbf X_i^{\mathsf T} & \mathbf 0^{\mathsf T} \end{pmatrix} \begin{pmatrix}\mathbf p^1\\ \mathbf p^2\\ \mathbf p^3\end{pmatrix} = \mathbf 0

세 행이 나왔지만 독립인 것은 둘뿐이다. 셋째 행은 (xi1행+yi2행)/wi-(x_i\cdot\text{1행} + y_i\cdot\text{2행})/w_i 로 정확히 재현되기 때문이다. 기하학적으로도 당연하다 — 「두 벡터가 평행하다」는 사영평면에서 자유도 2짜리 조건이므로 방정식도 두 개여야 한다. 그래서 대응 하나가 방정식 두 개라는, 이 바닥에서 가장 자주 인용되는 세는 법이 나온다.1

3. 최소 대응 수 세기[편집]

이제 산수만 하면 된다. 미지수의 자유도를 대응당 방정식 수로 나눈다.

문제미지수자유도대응당 식최소 대응
2D 아핀 변환6623
호모그래피 HH9824
원뿔곡선 적합6515
카메라 행렬 PP121126
기초행렬 FF (선형)9818
삼각측량 점 X\mathbf X43시점당 22 시점

몇 가지 주석이 필요하다.

  • 카메라 행렬은 5.5점이다. 자유도 11을 2로 나누면 5.5이므로, 대응 5개 + 여섯 번째 점의 좌표 한 개면 이론상 충분하다. 실무에서는 그냥 6점을 쓴다. 이 문제를 특히 재절편(resection)이라 부르고, 3차원 좌표를 아는 점으로 카메라 자세를 구하는 PnP 계열 문제의 비보정판이다.
  • 기초행렬은 대응당 식이 하나다. xTFx=0\mathbf x'^{\mathsf T}F\mathbf x = 0 은 스칼라 방정식이라 외적 트릭이 필요 없고, 그래서 8점이 필요하다. 자유도가 7인데 8점을 쓰는 것은 detF=0\det F = 0 이라는 비선형 제약을 선형계에 넣을 수 없어 일단 무시하고 푼 뒤 나중에 강제하기 때문이다 — 에피폴라 기하 참조.
  • 삼각측량은 미지수 쪽이 뒤바뀐 경우다. PP 를 알고 X\mathbf X 를 모르는 상황에서 같은 외적 식을 X\mathbf X 에 대해 선형으로 읽으면 그대로 DLT가 된다. 틀이 얼마나 넓은지 보여 주는 좋은 예다.

이 「최소 대응 수」가 실전에서 중요한 이유는 정확도가 아니라 RANSAC이다. 필요한 반복 횟수가 최소표본 크기의 지수함수이므로, 4점과 8점의 차이가 오염된 데이터에서 성패를 가른다.

4. Ah=0A\mathbf h = \mathbf 0 을 어떻게 푸는가[편집]

방정식을 전부 쌓으면 AR2n×mA \in \mathbb R^{2n\times m} 인 동차계가 된다. 잡음이 없으면 AA 의 영공간이 1차원이라 그 방향이 답이다. 잡음이 있으면 AA 가 완전 계수가 되어 정확한 영공간이 없으므로, 자명해 h=0\mathbf h = \mathbf 0 을 배제하기 위해 제약을 걸고 최소화한다.

minh=1 Ah\min_{\lVert\mathbf h\rVert = 1}\ \lVert A\mathbf h\rVert

A=UΣVTA = U\Sigma V^{\mathsf T} 로 놓고 y=VTh\mathbf y = V^{\mathsf T}\mathbf h 라 하면 Ah=Σy\lVert A\mathbf h\rVert = \lVert\Sigma\mathbf y\rVert 이고 y=1\lVert\mathbf y\rVert = 1 이므로, 답은 가장 작은 특이값에 대응하는 우특이벡터, 즉 VV 의 마지막 열이다. 「SVD 때리고 마지막 열」의 근거가 이것이다.

여기서 수치해석 쪽 잔소리 하나. ATAA^{\mathsf T}A 의 최소 고윳값 고유벡터를 구해도 답은 같지만, ATAA^{\mathsf T}A 를 만드는 순간 조건수가 제곱된다. AA 의 조건수가 10710^7 이면 ATAA^{\mathsf T}A101410^{14} 라 배정밀도의 유효자릿수를 통째로 태워 먹는다. 대응이 수천 개라 AA 가 크더라도 ATAA^{\mathsf T}A9×99\times912×1212\times12 여서 유혹이 크지만, 정석은 AA 를 직접 QR 분해하거나 SVD 하는 것이다. 정 메모리가 아까우면 AA 를 블록으로 나눠 QR로 누적한 뒤 그 상삼각 인자만 SVD 한다.

5. 하틀리 정규화 — 이 문서의 본론[편집]

DLT 구현에서 정규화는 선택 사항이 아니다. 그리고 「반올림 오차가 조금 줄어든다」 정도로 이해하면 절반만 아는 것이다. 이유가 둘 있고 두 번째가 더 중요하다.

5.1. 이유 1 — 조건수[편집]

AA 의 한 행을 보면 xixix_i x'_i, xiyix_i y'_i, xix_i, …, 11 같은 항이 섞여 있다. 화소 좌표가 수백~수천 단위이면 곱 항은 10510610^5\text{–}10^6 대이고 상수 항은 1이다. 열마다 크기가 대여섯 자릿수 차이 나는 행렬의 최소 특이값은 반올림 오차에 그대로 잠식된다. 실제로 같은 대응에 대해 정규화 전후의 조건수가 101110^{11} 대에서 10110^{1} 대로 떨어지는 것이 호모그래피 문서의 실측 임베드에서 확인된다.

5.2. 이유 2 — 대수적 오차가 좌표계에 의존한다[편집]

이쪽이 본질이다. 데이터가 정확하면 AA 의 영공간은 좌표계를 바꿔도 대응하는 해로 그대로 옮겨 가므로 정규화는 아무 차이도 만들지 않는다. 문제는 잡음이 있을 때다. 잡음이 있으면 우리는 「영공간」이 아니라 「Ah\lVert A\mathbf h\rVert 를 최소화하는 방향」을 고르는데, 좌표변환 xTx\mathbf x \mapsto T\mathbf x 를 하면 AA 도 바뀌고 h=1\lVert\mathbf h\rVert = 1 이라는 제약면도 함께 바뀐다. 두 최적화 문제는 서로 다른 문제이고 따라서 답이 다르다.

즉 정규화는 부동소수점 위생이 아니라 어떤 비용함수를 최소화할지 고르는 행위다. 그리고 하틀리가 고른 좌표계는 대수적 비용을 기하학적 비용에 가장 가깝게 만드는 좌표계다. 호모그래피를 예로 들면 대응 ii 의 대수적 잔차는 대략

aih    wi(화소 단위 재투영 오차),wi=h3Txi\lVert \mathbf a_i \mathbf h\rVert \;\approx\; w'_i \cdot \bigl(\text{화소 단위 재투영 오차}\bigr), \qquad w'_i = \mathbf h^{3\mathsf T}\mathbf x_i

여서, 점마다 다른 wiw'_i 가 가중치로 곱해진다. 좌표가 제멋대로면 이 가중치도 제멋대로라 어떤 대응은 백 배쯤 더 중요하게 취급된다. 좌표를 원점 근처 O(1)O(1) 로 몰아 놓으면 wi1w'_i \approx 1 이 되어 가중치가 사라지고, 그제서야 대수적 최소화가 기하학적 최소화의 그럴듯한 대리가 된다.

5.3. 레시피[편집]

각 영상(또는 각 좌표계)에서 독립적으로:

  1. 점들의 중심(centroid)을 원점으로 평행이동한다.
  2. 원점까지 거리의 RMS가 2\sqrt2 가 되도록 등방(isotropic) 스케일한다.

이 상사변환을 TT 라 하고, 정규화 좌표 x^i=Txi\hat{\mathbf x}_i = T\mathbf x_i 로 DLT를 풀어 H^\hat H 를 얻은 뒤 원좌표로 되돌린다.

H=T1H^T,F=TTF^T,P=T1P^UH = T'^{-1}\,\hat H\,T, \qquad F = T'^{\mathsf T}\,\hat F\,T, \qquad P = T'^{-1}\,\hat P\,U

(UU 는 3차원 점에 건 정규화 변환.) 되돌리는 식이 문제마다 다른 것은 HH 가 점을 보내는 사상이고 FF 는 이중선형형식이기 때문이다 — 여기서 전치와 역행렬을 섞으면 결과가 조용히 틀린다.

2\sqrt2 라는 숫자에는 이유가 있다. 평균적인 점이 (±1,±1,1)(\pm1,\pm1,1) 근처에 오게 해서 동차좌표 세 성분의 크기를 같은 자릿수로 맞추는 것이 목적이다. 3차원 점을 정규화할 때 3\sqrt3 을 쓰는 이유도 같다 — (±1,±1,±1,1)(\pm1,\pm1,\pm1,1) 을 노린다.

축별로 다른 스케일을 주는 비등방 정규화는 권장되지 않는다. 조건수는 더 내려갈 수 있지만 상사변환이 아니게 되어 원 좌표계의 등방 잡음 가정을 깨고, 결과적으로 기하학적 오차와의 대응 관계가 다시 나빠진다. 그리고 점 분포가 한 방향으로 극단적으로 쏠린 경우에는 오히려 불안정해진다.

이 정규화가 원래 유명해진 무대는 8점 알고리즘이다. 1990년대 초까지 「8점 알고리즘은 잡음에 취약해 못 쓴다」가 정설이었는데, 하틀리가 1997년 논문에서 취약했던 것은 알고리즘이 아니라 정규화를 건너뛴 습관임을 보이면서 평판이 통째로 복구되었다.2 코드 다섯 줄로 논문 한 편이 나온 사례로 자주 회자되지만, 위의 「이유 2」를 읽고 나면 그것이 다섯 줄짜리 트릭이 아니라 비용함수의 선택 문제였다는 것을 알 수 있다.

6. 대수적 오차 대 기하학적 오차[편집]

정규화를 하더라도 DLT가 최소화하는 것은 여전히 Ah\lVert A\mathbf h\rVert 이지 우리가 원하는 화소 단위 오차가 아니다. 셋을 구분해 두면 정리가 된다.

오차정의성격
대수적Ah2\lVert A\mathbf h\rVert^2닫힌 해가 있다. 물리적 의미 없음
기하학적(재투영)관측 화소와 재투영 화소의 거리 제곱합가우시안 잡음 가정에서 최대우도추정
샘슨기하학적 오차의 1차 근사계산은 대수적 오차 수준, 정확도는 기하에 근접

샘슨 오차는 제약면 위로의 거리를 1차 테일러로 근사한 것이라, 대수적 잔차를 그 그래디언트 노름으로 나눈 형태가 된다. 반복 없이 계산되면서 좌표 스케일에도 둔감해 RANSAC 내부 판정에 사실상 표준으로 쓰인다(구체적 형태는 에피폴라 기하 문서에 있다).

7. 골드 스탠다드 — DLT는 초기값일 뿐[편집]

그래서 정확도가 필요한 곳에서 DLT 해를 그대로 내보내는 일은 없다. 표준 파이프라인(하틀리·지서만이 「골드 스탠다드 알고리즘」이라 부른 것)은 이렇다.3

  1. 대응 수집 — 특징점 검출·매칭.
  2. RANSAC + 최소표본 DLT — 4점(또는 6점, 8점) 표본으로 모형을 만들고 내점을 센다.
  3. 정규화 DLT 재적합 — 살아남은 내점 전부로 다시 푼다. 여기까지가 초기값.
  4. 비선형 정련 — 재투영 오차를 레벤버그-마쿼트 방법으로 최소화한다. 필요하면 「보정된 대응점」까지 미지수로 넣어 양쪽 영상의 오차를 함께 줄인다.
  5. 강건 손실 — 남은 이상치에 대비해 후버·코시 손실을 얹는다(로버스트 통계).

4단계는 사실상 미니 번들 조정이고, 실제로 같은 solver를 쓴다. 여기서 3단계를 건너뛰고 4단계로 바로 가면 국소 최솟값에 빠지거나 수렴이 하염없이 느려진다 — **DLT의 존재 이유는 정확도가 아니라 「비선형 최적화에 던져 줄, 계산이 닫힌 형태로 끝나는 그럴듯한 시작점」**이다.

8. 제약을 못 넣는다는 구조적 한계[편집]

DLT의 또 다른 성질은 미지 행렬이 속해야 할 제약집합을 무시한다는 것이다. 선형계로 만들 수 있는 것은 선형 제약뿐이라, 비선형 제약은 전부 사후 처리로 밀린다.

  • FFdetF=0\det F = 0 을 만족해야 한다 → SVD로 최소 특이값을 0으로 만들어 rank 2로 사영한다.
  • EE 는 특이값 두 개가 같아야 한다 → diag(1,1,0)\mathrm{diag}(1,1,0) 으로 바꾼다.
  • PPK[Rt]K[R\mid\mathbf t] 로 쪼개려면 RR 이 직교여야 한다 → RQ 분해 후 직교화한다.
  • HH 가 회전만에서 온 것이라면 K1HKK^{-1}HK 가 직교여야 한다 → 별도 사영 필요.

즉 DLT는 더 넓은 공간에서 풀고 나서 제약 다양체 위로 밀어 붙이는 두 단계 구조다. 그 사영이 최적이라는 보장은 없다(프로베니우스 노름 기준으로는 최적이지만, 그게 기하학적으로 최적이라는 뜻은 아니다). 제약을 처음부터 지키면서 최소 개수의 대응만으로 푸는 것이 최소해법(minimal solver)이고, 5점 알고리즘처럼 다변수 다항식계를 그뢰브너 기저 기법으로 푸는 계열이 여기 해당한다. 계산은 훨씬 험하지만 표본 크기가 줄어 RANSAC에서 압도적으로 유리하다.

9. 축퇴와 함정[편집]

증상원인처방
HH 가 폭발하거나 무의미4점 중 3점이 (거의) 공선표본 단계에서 넓이·조건수로 걸러낸다
PP 가 결정되지 않음3차원 점이 전부 한 평면입체 보정 치구, 또는 평면 여러 자세(Zhang 기법)
PP 가 드물게 무너짐점들이 카메라 중심을 지나는 꼬인 삼차곡선점 배치를 바꾼다
FF 는 나오는데 에피폴라 선이 안 모임rank 2 강제를 안 함SVD로 σ30\sigma_3 \to 0
「대충 맞는데 미묘하게 틀림」정규화 생략정규화. 증상이 애매해서 발견이 가장 늦다
최적화기가 h=0\mathbf h = \mathbf 0 을 자랑스럽게 반환h=1\lVert\mathbf h\rVert=1 제약 누락제약을 걸거나 SVD를 쓴다
특정 배치에서만 발산h33=1h_{33}=1 로 고정하는 편법h=1\lVert\mathbf h\rVert=1 로 잡는다

마지막 두 줄이 특히 자주 나온다. 미지수 하나를 1로 박아 비동차 최소자승으로 바꾸는 것은 코드가 짧아져서 매력적이지만, 그 원소가 실제로 0인 정당한 해를 표현할 수 없어 특정 배치에서 조용히 무너진다. 최소자승법 코드를 재활용하고 싶은 마음은 이해하지만, 동차계는 동차계답게 풀어야 한다.

그리고 정규화를 했는지 아닌지는 결과만 보고 알기 어렵다. 잘 조건된 데이터(점이 화면 전체에 고르게 퍼진 경우)에서는 두 결과가 거의 같기 때문이다. 차이는 점이 화면 한구석에 몰렸을 때, 좌표 원점이 멀 때, 대응 수가 최소에 가까울 때 갑자기 나타난다. 개발 데이터에서 멀쩡하던 코드가 현장에서 무너지는 전형적인 패턴이 이것이다.

10. 관련 문서[편집]

11. Footnotes[편집]

  1. 셋째 행을 굳이 넣어도 되긴 한다. 대응이 많으면 종속인 행이 최소제곱해를 바꾸지는 않지만, wiw_i 가 0에 가까운(무한원에 가까운) 점이 섞이면 세 행 중 어느 것이 수치적으로 안전한지가 달라진다. 그래서 일부 구현은 세 행을 다 쌓아 놓고 SVD에 맡긴다. 우아하진 않아도 wi=0w_i=0 인 점에서 죽지 않는다는 실용적 장점이 있다.

  2. Hartley, R. (1997). “In Defense of the Eight-Point Algorithm.” IEEE TPAMI 19(6). 한국어 표기는 하틀리·하틀레이가 섞여 쓰이고 문헌에 따라 다르니, 검색할 일이 있으면 원문 철자로 찾는 편이 빠르다. 참고로 이 논문의 진짜 교훈은 「정규화해라」가 아니라 「당신이 최소화하는 비용함수가 좌표계에 의존하는지 확인해라」다. 전자만 외운 사람은 다른 문제에서 같은 실수를 반복한다.

  3. 「골드 스탠다드」라는 이름은 하틀리·지서만의 Multiple View Geometry in Computer Vision 에서 붙었다. 정확도의 기준선을 정해 놓고 다른 모든 근사법을 그것과 비교한다는 뜻인데, 정작 실무에서는 3단계까지만 돌리고 마감에 쫓겨 4단계를 건너뛰는 경우가 흔하다. 그래 놓고 「재투영 오차가 왜 이렇게 크냐」고 놀라는 것까지가 세트다.