1. 개요[편집]
| 삼각측량 Triangulation | |
|---|---|
| 입력 | 카메라 행렬 $P, P'$ 와 대응 화소 $\mathbf x, \mathbf x'$ |
| 출력 | 3차원 점 $\mathbf X$ |
| 핵심 난점 | 잡음 때문에 두 광선이 만나지 않는다 |
| 최적해 | 재투영 오차 최소화 — 6차 다항식 (하틀리-스투름, 1997) |
| 정밀도 지배 변수 | 교차각(시차각). 깊이 오차는 $Z^2$ 에 비례 |
| 혼동 주의 | 거리로 재는 것은 삼변측량. GPS는 이쪽이다 |
두 곳에서 같은 별을 올려다보고, 두 시선이 만나는 곳에 별이 있다고 말한다. 문제는 시선이 실제로는 절대 만나지 않는다는 것이다.
삼각측량(triangulation)은 서로 다른 위치에서 같은 목표를 향해 측정한 방향(또는 각)들의 교차로 목표의 위치를 결정하는 방법이다. 두 관측점 사이의 거리인 기선(baseline)만 알면 나머지는 삼각형의 닮음으로 풀리며, 「접근할 수 없는 대상까지의 거리를 재는」 거의 유일한 고전적 수단이었다.
컴퓨터 비전에서는 좁은 의미로 굳어져서, 두 개 이상의 핀홀 카메라에서 관측된 대응 화소로부터 3차원 점 좌표를 복원하는 문제를 가리킨다. 스테레오 비전의 마지막 단계, Structure from Motion에서 새 점을 만드는 단계, SLAM에서 지도를 늘리는 단계가 전부 이것이다.1
2. 측량학의 삼각측량[편집]
원리는 중학교 삼각비다. 기선 양 끝에서 목표를 향한 방향의 각이 라면 사인 법칙으로 나머지 변이 나오고, 목표까지의 거리가 결정된다. 실무적으로 결정적인 사실은 각은 재기 쉽고 거리는 재기 어렵다는 것이었다. 그래서 근대 측지는 기선 하나만 극도로 정밀하게 실측한 뒤, 그 위에 삼각형 그물을 쌓아 각만 재며 국토 전체로 좌표를 전파하는 방식을 택했다.
- 1615년 — 스넬리위스가 네덜란드에서 삼각형 사슬로 자오선 호의 길이를 재며 근대 삼각측량을 열었다. 지구 크기 측정이 목적이었다.
- 19세기 — 인도 대삼각측량, 스트루베 측지 호 같은 국가·대륙 규모 사업이 이어졌다. 산꼭대기마다 박아 둔 삼각점이 그 유산이다.
- 20세기 후반 — 전파·레이저 거리측정기와 위성 측위가 등장하면서 「각을 재는」 삼각측량은 「거리를 재는」 삼변측량(삼변측량, trilateration)에 자리를 내준다.
여기서 자주 틀리는 것 하나. GPS는 삼각측량이 아니라 삼변측량이다. 위성이 보내는 것은 방향이 아니라 신호의 전파 시간이고, 수신기는 여러 위성까지의 거리(정확히는 시계 오차가 섞인 의사거리)로 구면들의 교점을 푼다. 각을 재는 장치가 어디에도 없다. 일상적으로 「삼각측량」이라는 말이 「여러 정보를 교차 검증한다」는 비유로 쓰이면서 굳어진 오해다.
천문학의 연주시차(연주시차)는 삼각측량의 가장 극단적인 사례다. 반년 간격으로 관측하면 기선이 지구 공전 궤도의 지름(2 AU)이 되고, 그렇게 얻은 각의 절반(= 기선 1 AU에 해당하는 각)을 연주시차라 한다. 이 값이 정확히 1초각이 되는 거리를 1 파섹(약 3.26 광년)으로 정의한 것도 이 구도에서 나왔다. 재는 각이 1초각 이하라는 사실이 이 측량의 난이도를 그대로 말해 준다. 기선을 아무리 늘려도 각이 작아지면 정밀도가 무너진다는, 아래에서 다룰 문제의 원형이 여기 있다.
3. 비전의 문제 설정 — 만나지 않는 두 광선[편집]
카메라 행렬 와 대응 화소 가 주어졌다. 각 화소는 광학중심에서 뻗어 나가는 반직선 하나에 대응하므로, 이상적으로는 두 반직선이 한 점에서 만나고 그 점이 답이다.
현실에서는 만나지 않는다. 이유가 셋 있다.
- 특징점 위치에 화소 단위 잡음이 있다.
- 자체가 추정값이라 오차가 있다.
- 3차원 공간의 두 직선이 만나는 것은 확률 0의 사건이다. 만나려면 에피폴라 기하의 구속 이 정확히 성립해야 하는데, 잡음이 있으면 성립할 리가 없다.
그래서 삼각측량은 「교점 구하기」가 아니라 「무엇을 최소화할 것인가」를 정하는 문제가 된다. 답이 여러 개인 이유도, 방법마다 결과가 다른 이유도 전부 여기서 나온다.
4. 중점법 — 쉽고, 틀렸다[편집]
가장 먼저 떠오르는 방법이다. 두 반직선의 최단 거리 선분을 찾고 그 중점을 답으로 삼는다. 광선을 , 로 두면 에 대한 2×2 선형계라 몇 줄이면 끝난다.
문제는 이것이 아무것도 최소화하지 않는다는 점이다. 정확히는 3차원 공간에서의 유클리드 거리를 최소화하는데, 우리가 잡음을 아는 곳은 3차원이 아니라 영상이다. 결과적으로 셋이 어긋난다.
- 사영 불변이 아니다. 재구성 전체에 사영변환 를 걸어 , 로 바꾸면 관측 화소는 하나도 안 변하는데, 중점법의 답은 로 옮긴 원래 답과 다르다. 「중점」과 「최단거리」가 유클리드 개념이지 사영 개념이 아니기 때문이다. 카메라를 아직 보정하지 않아 사영 재구성 단계에 있는 파이프라인에서는 이 성질이 치명적이다.
- 편향된다. 영상 잡음이 등방이어도 그것이 만드는 3차원 오차는 광선 방향으로 길쭉하다. 두 광선의 「가운데」를 고르면 깊이가 계통적으로 한쪽으로 밀린다. 특히 교차각이 작을수록 심해진다.
- 최대우도가 아니다. 영상 잡음이 등방 가우시안이라면 최대우도 추정은 재투영 오차 제곱합의 최소화지, 3차원 거리의 최소화가 아니다.
그럼에도 중점법은 여전히 쓰인다. 초기값을 만들거나, 광선이 카메라 앞에 있는지 부호만 확인하거나, 정밀도가 애초에 필요 없는 곳에서는 충분히 싸고 충분히 좋다. 알고 쓰는 것과 모르고 쓰는 것의 차이가 클 뿐이다.
5. 선형 DLT 삼각측량[편집]
직접 선형 변환의 틀을 그대로 적용하면 깔끔한 선형해가 나온다. 을 에 대한 선형식으로 읽는 것이다. 시점 하나가 독립 방정식 두 개를 주므로, 두 시점이면
가 되고, 아래 최소화하면 의 최소 특이값 우특이벡터가 답이다. 시점이 늘어나면 행을 더 쌓기만 하면 되고, 코드가 열 줄을 넘지 않는다.
성질은 DLT의 성질 그대로다. 최소화하는 것은 대수적 오차이며, 이라는 제약이 사영 불변이 아니어서 이 방법도 사영변환에 대해 불변이 아니다.2 그럼에도 중점법보다 나은 이유는 잔차가 영상 좌표에서 정의된 양에 훨씬 가깝기 때문이고, 실제 비교 실험에서도 중점법보다 일관되게 낫다. 여기서도 하틀리 정규화는 필수다 — 화소 좌표와 의 원소 크기가 뒤섞여 조건수가 나빠지는 구조가 똑같다.
6. 최적 삼각측량 — 하틀리-스투름[편집]
「최적」의 정의부터 정하자. 영상 잡음이 등방 가우시안이라면 최대우도 추정은
이다. 즉 관측 화소를 최소한만 움직여 에피폴라 구속을 정확히 만족시키는 한 쌍을 찾고, 그 둘을 삼각측량한다. 보정된 한 쌍은 광선이 정확히 만나므로 그 뒤는 계산이 아니라 대입이다.
하틀리와 스투름(1997)의 관찰은 이 문제가 닫힌 형태로 풀린다는 것이었다. 첫 영상의 에피폴라 선다발을 매개변수 하나로 훑으면 두 번째 영상의 대응 에피폴라 선도 로 결정되고, 목적함수는 각 선까지의 수직거리 제곱합이라 의 유리함수가 된다. 미분해서 분자를 정리하면 에 대한 6차 다항식 하나가 남는다. 실근을 전부 구해 목적함수 값을 비교하면 전역 최솟값이 보장된다.
이 방법의 가치는 정확도보다 성질에 있다.
- 와 영상 관측만으로 정의되므로 사영 불변이다. 재구성이 사영 단계에 있어도 의미가 유지된다.
- 국소 최솟값이 없다. 반복법이 아니라 근 찾기라서 초기값이 필요 없다.
- 두 시점에 한해서는 이것이 정답이다. 다른 모든 방법은 이것과 비교당한다.
대가는 6차 다항식 근 찾기의 비용이다. 점 수백만 개를 처리하는 파이프라인에서는 무겁기 때문에, 실무에서는 반복 두 번으로 거의 같은 답에 도달하는 근사법(린드스트룀의 방법이 대표적)이나 카나타니 계열의 반복 최적 보정이 널리 쓰인다. 정확도 차이는 보통 소수점 아래에서 갈리고 속도는 한 자릿수 이상 차이가 난다.
세 시점 이상에서는 닫힌 형태가 없다. 시점이 늘면 제약이 여러 개가 되어 대수적 소거가 감당이 안 되기 때문이다. 표준 처방은 선형 DLT로 초기값을 잡고 재투영 오차를 레벤버그-마쿼트 방법으로 줄이는 것 — 카메라를 고정한 채 점 하나만 미지수로 두는, 가장 작은 번들 조정이다. 한편 오차의 합 대신 최댓값()을 최소화하면 문제가 준볼록이 되어, 가시성 조건 아래 이등분 탐색으로 전역 최적을 보장할 수 있다는 결과도 있다. 이상치에 약하다는 것이 의 고질적 약점이라 만능은 아니다.
7. 불확실성 — 길쭉한 오차 타원체[편집]
삼각측량 결과의 오차는 등방이 아니다. 광선 방향으로 길고 그에 수직인 방향으로 짧은 타원체가 되고, 길쭉한 정도를 정하는 것은 오직 교차각(시차각) 다.
깊이 , 기선 , 교차각 라 하자. 를 미분하면
가 나온다. 마지막 등식은 각도 오차를 화소 오차로 바꾼 것()이고, 스테레오 비전의 와 같은 식이다. 깊이의 상대오차는 「각도 오차 ÷ 교차각」이다. 외울 것은 이 한 줄이다.
숫자로 감을 잡아 보자. 화소 잡음 0.5 px, px 이면 각도 오차는 약 0.036°다.
| 교차각 | 깊이 상대오차 | 오차 타원체 |
|---|---|---|
| 30° | 0.12 % | 거의 구형 |
| 5° | 0.72 % | 약간 길쭉 |
| 1° | 3.6 % | 명백한 시가 모양 |
| 0.2° | 18 % | 사실상 광선 |
| 0.05° | 72 % | 깊이 정보 없음 |
교차각이 0.2°만 되어도 그 점은 깊이를 모르는 점이다. 그런데 재투영 오차는 여전히 작다 — 광선 위 어디에 놓아도 영상에서는 같은 자리에 찍히기 때문이다. 재투영 잔차가 작다는 것이 그 점이 잘 결정됐다는 뜻이 아니라는 사실이, 삼각측량에서 가장 자주 잊히고 가장 비싼 대가를 치르는 교훈이다.3
그래서 실무에서는 삼각측량 전에 교차각을 검사한다. 시각 SLAM 구현들이 새 지도점을 만들기 전에 시차각 하한(대개 1° 안팎)을 거는 것, 교차각이 부족한 점을 버리지 않고 「깊이 미정 상태로 보류」했다가 카메라가 더 움직인 뒤에 다시 시도하는 것이 표준 관행이다.
이 상황에 잘 맞는 표현이 역깊이(inverse depth) 매개변수화다. 를 미지수로 쓰면, 시차각이 작을 때도 의 불확실성이 거의 가우시안으로 남는다(반면 의 분포는 꼬리가 두껍고 심지어 음수·무한대까지 뻗는다). 덕분에 깊이가 사실상 무한대인 먼 점도 으로 자연스럽게 표현되고, 그 점을 버리지 않은 채 방향 정보만 제공하는 구속으로 계속 쓸 수 있다. 필터 기반 단안 SLAM이 역깊이를 표준으로 채택한 이유다.
8. 스케일 드리프트로 이어지는 길[편집]
단안 시각에서는 절대 스케일이 원리적으로 결정되지 않는다(에피폴라 기하의 는 방향만 나온다). 그래서 파이프라인은 첫 두 프레임의 기선 길이를 1로 정하고 시작하고, 그 이후의 모든 스케일은 삼각측량한 점들이 운반한다. 구조는 이렇다.
- 자세 로 점들을 삼각측량한다 → 점의 깊이가 정해진다.
- 그 점들로 다음 프레임의 자세를 푼다(PnP) → 새 자세의 스케일은 점들이 정한다.
- 새 자세로 다시 새 점을 삼각측량한다 → 1로 돌아간다.
즉 스케일이 곱셈으로 전파된다. 각 단계에서 1 %씩 편향이 생기면 오차가 더해지는 게 아니라 곱해져서, 백 단계 뒤에는 스케일이 배로 벌어진다. 이것이 스케일 드리프트이고, 회전·이동 드리프트와 달리 겉보기 궤적 모양은 멀쩡한데 크기만 서서히 변한다는 점에서 발견이 늦다. 긴 복도를 왕복한 단안 SLAM 결과가 갈 때와 올 때의 크기가 다른, 그 유명한 그림이 이것이다.
교차각이 작은 점들이 이 편향의 주범이다. 깊이가 사실상 자유로운 점을 「추정됐다」고 믿고 다음 자세를 풀면, 그 자세가 그 점의 편향을 물려받고 다시 다음 점으로 넘긴다. 처방은 셋이다.
- 애초에 만들지 않는다. 시차각 임계값, 가시성(cheirality) 검사, 재투영 오차 검사를 통과한 점만 지도에 넣는다.
- 주기적으로 전역 최적화한다. 국소 번들 조정은 국소 스케일만 맞추므로 드리프트를 못 잡는다. 루프를 닫고 상사변환군 위에서 포즈 그래프를 최적화하면 스케일 차이를 명시적으로 흡수할 수 있다 — 단안 SLAM의 포즈 그래프가 가 아니라 인 이유가 정확히 이것이다.
- 외부에서 스케일을 주입한다. 스테레오 리그의 기선, IMU가 준 가속도 적분, 휠 오도메트리, 크기를 아는 마커. 실용 시스템이 결국 단안을 고집하지 않는 이유이기도 하다.
9. 실무 점검표[편집]
| 증상 | 의심할 것 |
|---|---|
| 점이 카메라 뒤에 생김 | 자세 후보를 잘못 골랐거나 부호 규약이 뒤집힘. 가시성 검사 필수 |
| 깊이가 터무니없이 큼 | 교차각 부족. 임계값으로 걸러내거나 역깊이로 보류 |
| 재투영 오차는 작은데 3차원이 휨 | 저시차 점 다수 + 스케일 드리프트. 전역 최적화 필요 |
| 스테레오 리그인데 거리가 몇 % 틀림 | 기선 길이·내부파라미터 문제 → 카메라 보정 |
| 특정 영역에서만 점이 안 생김 | 그 방향의 이동이 없어 교차각이 0. 카메라를 옆으로 움직여야 한다 |
| 결과가 방법마다 크게 다름 | 조건이 나쁜 구성. 방법을 바꾸기 전에 교차각을 먼저 본다 |
마지막 줄이 요약이다. 잘 조건된 구성에서는 중점법이든 DLT든 하틀리-스투름이든 답이 거의 같다. 방법 선택이 결과를 바꾸는 것은 이미 조건이 나쁠 때이고, 그럴 때는 더 좋은 알고리즘보다 카메라를 더 움직이는 것이 언제나 낫다. 기하가 없는 정보를 수치해석으로 만들어 낼 수는 없다.
10. 관련 문서[편집]
- 에피폴라 기하 · 스테레오 비전 · 핀홀 카메라 · 직접 선형 변환
- 번들 조정 · Structure from Motion · SLAM · 오도메트리
- 카메라 보정 · 호모그래피 · 점군 정합 · 특징점 검출
- 특이값 분해 · 최소자승법 · 레벤버그-마쿼트 방법 · 조건수 · 불확실성 정량화
- 포토그래메트리 · 삼변측량 · 연주시차 · 센서 융합
11. Footnotes[편집]
-
영어 triangulation 은 「3차원 점 복원」과 「영역을 삼각형으로 잘게 쪼개기」를 둘 다 가리켜서 검색할 때 자주 엉킨다. 한국어는 다행히 전자를 삼각측량, 후자를 삼각분할로 갈라 쓴다(들로네 삼각분할). 논문을 영어로 쓸 때는 문맥을 확실히 잡아 주지 않으면 리뷰어가 격자 생성 논문인 줄 알고 읽기 시작하는 사고가 실제로 난다. ↩
-
로 고정해 비동차 최소자승으로 푸는 변형도 있다. 이쪽은 아핀변환에 대해서는 불변이지만 무한원점()을 표현할 수 없어 아주 먼 점에서 무너진다. 사영 불변성과 무한원점 처리 중 무엇을 포기할지의 선택이며, 둘 다 포기하지 않으려면 결국 하틀리-스투름으로 가야 한다. ↩
-
그래서 재구성 품질 보고서에 재투영 RMS만 적혀 있으면 그 표는 절반만 읽은 것이다. 함께 봐야 할 것은 점당 관측 수의 분포와 시차각의 분포다. 두 장에만 보이고 시차각이 1° 미만인 점이 절반을 넘는 재구성은, 숫자가 아무리 예뻐도 그 점들이 스스로 자기 좌표를 맞춘 것이지 검증된 것이 아니다. ↩