1. Introduce
COLMAP은 Structure-from-Motion Revisited 논문을 기반으로 만들어진 라이브러리입니다. COLMAP은 SfM(Structure from Motion)과 MVS(Multi-View Stereo)를 사용할 수 있게 만든 오픈소스 라이브러리며 3D Reconstruction 분야에서 초기 데이터 설정 등에 많이 사용되고 있습니다. 본 논문에서 SfM 등의 알고리즘을 만든 것이 아닌, 그 알고리즘들을 범용적으로 사용할 수 있는 COLMAP을 제공하는 논문이라고 생각하시면 됩니다.
2. Overview
COLMAP의 전체적인 Overview입니다. SfM(Structure-from Motion)인 경우 Figure 2에서 Incremental Reconstruction을 제외한 것이라고 생각하시면 됩니다. (본 논문에서 제시하는 것은 Incremental Reconstruction이 포함된 Incremental SfM)
전체적으로 각기 다른 View Points로부터 3D Reconstruction 하는 방법을 소개합니다.
Figure 2에서 보여지는 순서를 간략하게 설명하자면
1. Multi-View Image 들이 (Input) 으로 들어오면
2. (Correspondence Search) 그 이미지 들의 관련성을 찾습니다.
- Feature Extraction : 어떻게 특징점을 추출할 것인가
- Matching : 모든 Feature 쌍을 찾아 가장 오버랩이 많은 Image들을 Pair
- Geometric Verification : Matching된 Image Pair들을 Geometric 방법을 통해 검증
3. (Incremental Reconstruction) Matching된 Feature들을 통해 3D로 Reconstruction
- Initialization : Location 정보가 많은 Pair를 선택해 Initialization
- Image Registration : Scene Graph를 통해 다음 Edge에 연결된 Pair를 가져옴
- Triangulation : Pair에서 두개의 Projection Matrices와 매칭된 2D Points를 통해 3D Point Recon
- Bundle Adjustment : Recon된 3D Points와 Pose를 Reprojection 하고 Error를 최소화시킨다.
- Outlier Filtering : 잘못된 3D Points들 제거
3. Method
Correspondence Search
Input : 정렬이 안된 Images
Output : Image Pair들을 Edge로 한 Scene Graph
1. Feature Extraction
- 특징점을 추출하는 단계
𝑥_𝑗 : 이미지 I에서의 특징 위치 (2D 좌표)
𝑓_𝑗 : 해당 위치에서의 descriptor (특징의 시각적 속성을 나타내는 벡터)
𝑁_𝐹𝑖 : 이미지 I에서 감지된 총 특징 개수
- 특징은 Radiometric 및 Geometric 변화에 강해야 합니다. 즉, 조명, 색상, 명암 등이 변화하거나 이미지가 회전, 확대, 왜곡 등의 변화에 강해야 합니다.
- Feature Extraction은 SIFT(Scale-Invariant Feature Transform) 알고리즘을 전통적으로 사용하는데, 요즘은 SIFT 대신 딥러닝을 많이 사용합니다.)
(SIFT 알고리즘)
- Gaussian Blur로 다양한 Scale의 이미지를 만들고, 각 픽셀을 주변 8개 및 상하위 18개 픽셀과 비교해 최대값 또는 최대값인지 확인하고, 이를 통해 중요한 점(극점, Extrema)를 탐지합니다.
- 각 극점의 강도와 환경을 분석하고 노이즈에 민감하지 않고 강한 특징만 남깁니다.
2. Matching
- 여러 이미지에서 같은 장면을 봤던 부분을 찾고, 이들 사이의 특징점을 매칭하는 단계
Input : 𝑥_𝑗, 𝑓_𝑗 을 포함하는 특징 집합 𝐹_𝑖 과 이미지 집합 I
Output : 겹치는 장면을 촬영한 Image pair (𝐼_𝑎, 𝐼_𝑏) 집합인 C / Image pair에서 매칭된 특징점 쌍(𝑀_𝑎𝑏)의 집합
𝐼_𝑎, 𝐼_𝑏 의 유사성을 비교하기 위해 naïve한 방법으로는 Similarity Metric을 사용하는데 최근에 효율적으로는 ANN, Feature Clustering, 딥러닝 등을 많이 사용합니다.
3. Geometric Verification
- 매칭된 포인트들은 외형을 기준으로 잡았기 때문에, 실제로 같은 Scene에 있는지를 확인하는 과정이 필요합니다. (예를 들어, 같은 모양의 물건이 한 장소에 여러개가 있는 경우 등)
Input : 특징점 쌍(𝑀_𝑎𝑏), Image pair (𝐼_𝑎, 𝐼_𝑏)
Output : 매칭 Image Pairs 𝐶 ̅ / Outlier를 제거하고 남은 매칭 점 𝑀 ̅_𝑎𝑏 / 수학적 변환 모델 𝐺_𝑎𝑏 / Scene Graph (노드 : 이미지 I, 엣지 : 검증된 이미지 쌍 𝐶 ̅ )
두 이미지 간의 기하학적 관계를 수학적 변환 모델로 바꿉니다.
- Epipolar Geometry
- 두 이미지 간의 관계는 다음과 같이 설명 가능합니다.
- Essential Matrix (E) : 내부 카메라 파라미터(Calibration)가 알려진 경우
- Fundamental Matrix (F) : Calibration 정보가 없는 경우
이미지 두 장의 관계성으로 상대 Pose를 추정한 뒤에, 기준 View의 Feature Point들을 다른 View로 Projection했을 때 Mapping이 잘되는지 검증합니다.
Incremental Reconstruction
Input : Scene Graph
Output : 최종 Image들의 Pose Estimates P, 3D 공간의 Point Cloud X
1. Initialization
- 겹치는 영역도 많고 기하학적으로 검증된 이미지 Pair (𝐼_𝑎, 𝐼_𝑏) 을 선택합니다.
- 선택된 이미지 Pair에서 Essential Matrix 기반으로 초기 카메라 위치와 방향 (𝑃_𝑎, 𝑃_𝑏) 을 추정합니다.
- 선택된 이미지 Pair의 매칭된 특징점으로 초기 3D Point Cloud (𝑋_𝑘) 을 생성합니다.
2. Image Registration
- 초기화된 Camera pose와 Image Pair를 사용해 2D 매칭점에서 3D Points 계산합니다.
𝑥_𝑗 : 새로운 이미지 𝐼_𝑐 의 2D 특징점
𝑋_𝐾 : 이미 계산된 3D Point Cloud 의 Point
(𝑥_𝑗, 𝑋_𝐾)을 기반으로, 새로운 이미지의 카메라 pose 𝑃_𝑐를 추정합니다.
이러한 Pose 들의 집합인 P로 출력합니다.
3. Triangulation
- 새로운 이미지와 기존 3D 모델간의 관계를 확장하고, 추가적인 3D 포인트를 생성해 Point Cloud를 확장하는 목적 (동일한 3D Point를 여러 이미지에서 관측하면 중복성이 생겨 모델의 안정성을 높입니다.)
- 각 이미지에서 매칭된 2D Point에서 Ray를 생성하고 이 Ray들의 Intersection을 찾습니다.
- Multi-view Triangulation : 다수의 이미지라면 더 정확하지만, 계산량이 많고, 노이즈에 민감합니다.(잘못된 매칭점인 Outlier가 모델에 악영향) --> RANSAC 등을 사용
4. Bundle Adjustment
- 카메라의 파라미터와 3D Point의 좌표를 동시에 최적화하여 정확도를 올리는 과정
- 특징점 2D와 3D Point 간의 Reprojection Error를 최소화합니다.
- Image Registration과 Triangulation은 별개의 과정이지만, IR에서 예측한 pose는 3D포인트의 TR에 영향을 주고, 반대로 TR에서 예측한 3D포인트는 IR에서 Pose를 구하는데 영향을 줍니다. 따라서 BA를 통해 동시에 최적화해 정확도를 높입니다. 따라서 BA에서는 Camera pose (𝑃_𝑐)와 3D Point(𝑋_𝑘)를 동시에 최적화합니다.
4. Conclusion
- 기존 SfM 알고리즘에서의 완전성, 강건성, 정확도, 효율성 문제를 해결한 논문입니다. 본 논문은 COLMAP의 근간이 되는 논문으로 아직까지 많이 사용되기 때문에 완전히 숙지하지는 못해도, 어느정도 어떻게 구성되는지는 알아야 할 것 같습니다.