Structure-from-Motion: COLMAP

Tech blog: COLMAP

Featured image

이번 주에 RebuilderAI R&D팀에서 소개할 내용은 COLMAP 입니다. 기술 소개에 앞서, 전체적인 3D 모델 변환 Pipeline에 대해 소개하도록 하겠습니다. 3d_recon_pipeline 그림 1) 3D 변환 파이프라인

360도로 촬영한 동영상 혹은 이미지를 입력하면, AI 모델에 들어가기 전에 카메라 정보를 먼저 계산해야합니다. 카메라 정보를 계산한 후에, 이미지와 이미지에 대응하는 카메라 정보는 AI 모델로 입력되고 3D로 변환됩니다. 3D로 복원하기 위해서는 각 이미지에 대한 카메라 정보가 필요하고, 이 때 필요한 모듈이 COLMAP 입니다.

COLMAP은 여러 시점에서 촬영한 이미지로부터 3D를 복원할 때 많이 사용되고 있습니다. COLMAP에 이미지들을 넣게 되면 카메라 정보를 계산할 수 있고, 더 나아가 3D로 복원된 결과도 얻을 수 있는 도구입니다.

오늘은 3D 변환 파이프라인 중 하나인 카메라 정보 계산 및 3차원 복원에 사용되는 소프트웨어인 COLMAP에 대해 알아보겠습니다.

Structure-from-Motion


SfM 그림 2) Structure-from-Motion pipeline

COLMAP은 Structure-from-Motion이라는 기술을 프로그램으로 구현한 것 입니다.

Structure-from-Motion(SfM)은 한 Scene에 대해 여러 시점에서 촬영한 이미지들로부터 3차원 구조를 복원하는 시스템입니다. SfM은 기본적으로 크게 3단계로 구성됩니다.

  1. 피처(Feature) 검출
  2. 피처 매칭
  3. Structure / Motion 복원

피처 검출


feature 그림 3) Feature 예시

피처(Feature)란 이미지를 설명할 수 있는 특징적인 부분을 말합니다. 그림 3)에서 처럼, 사람 얼굴에서 눈이나 머리카락 같이 주변과 비교해서 변화가 큰 부분이나 두드러지게 특징적인 부분이 피처라고 볼 수 있습니다. 반대로 사람의 어깨, 볼과 같이 인접한 부분과 비교해서 변화가 적거나 두드러지지 않는 부분은 피처가 적은 부분입니다. SfM 시스템은 검출한 피처로부터 시작되기 때문에 피처가 적은 이미지들이 입력되면 제대로 동작하지 않게 됩니다. 이와 같은 이유로 3D 변환을 위해 동영상이나 사진을 촬영할 때 밋밋하거나 두드러진 특징이 보이지 않는 이미지를 입력하면 변환에 실패하거나 제대로된 결과를 얻을 수 없게 됩니다(그림 4). feature2 그림 4) Feature가 적은 이미지 예시

피처 매칭


각 이미지에서 피처를 검출한 후에는 각 이미지들의 피처를 매칭하는 과정을 거치게 됩니다. 피처 매칭이란 한 이미지와 다른 이미지의 피처가 매칭되는 부분을 확인하는 것 입니다(그림 5). feature_matching 그림 5) Feature matching 예시

그림 5)에서 볼 수 있듯이, 동일한 피처가 매칭되어 연결되는 것을 확인할 수 있습니다. 또한, 매칭된 점들은 삼각측량을 통해 3차원 점으로 계산될 수 있으며, Camera pose를 계산할 수 있습니다. Camera pose란, 이미지를 촬영한 Camera가 어느 위치에 있는지를 나타내는 행렬(Matrix)입니다. 이 행렬(Pose)은 얼마나 카메라가 회전되어 있는지(R) 어떤 위치에 있는지(T 또는 t)를 표현하며, 3차원 복원 분야에서 꼭 필요한 핵심적인 정보입니다. (Camera에 대한 자세한 내용은 다음 기술 소개에서 설명하도록 하겠습니다.) camera 그림 6) Camera pose 예시

하지만, 이렇게 매칭된 점들에는 Outlier가 존재할 수 있습니다. 이러한 잘못된 점들은 최종 결과에 오차를 발생시킬 수 있어 잘못된 점들은 제거를 해야 합니다. 최적화를 위한 다양한 알고리즘을 통해 이상치를 제거하고 정확히 매칭된 점들만 남길 수 있습니다.

Structure / Motion 복원


result 그림 7) COLMAP을 통해 획득한 Point cloud와 Camera(빨간 점) result2 그림 8) COLMAP을 통해 획득한 Point cloud와 Camera(빨간 점) 2 result23 그림 9) COLMAP을 통해 획득한 Point cloud와 Camera(빨간 점) 3

마무리


이번 주에는 Camera pose 계산 및 3D 복원에 널리 사용되는 COLMAP에서 각 단계를 소개하면서 이미지에서의 피처가 어떤 것인지, 잘 안되는 경우는 어떤지에 대해 간단하게 소개하였고, 어떤 처리를 통해 3차원 복원에 필요한 정보를 획득하는지에 대한 소개를 진행하였습니다. COLMAP뿐만 아니라 VisualSFM, OpenMVG 등 SfM 기반의 다양한 소프트웨어가 있지만, 현재 NeRF를 비롯한 3차원 복원 연구에서 많이 쓰이는 COLMAP에 대해 알아보았습니다. 다음 기술 소개에서는 각 단계에서 사용되는 알고리즘이나 Camera 정보에 대한 자세한 내용을 다루도록 하겠습니다. 감사합니다.

그림 참조

그림 2: https://docs.opencv.org/3.4/dc/dc3/tutorial_py_matcher.html
그림 3: https://it.mathworks.com/matlabcentral/fileexchange/50319-sift-feature-extreaction
그림 5: https://docs.opencv.org/3.4/dc/dc3/tutorial_py_matcher.html
그림 6: https://www.researchgate.net/figure/Homography-and-Planar-Motion-The-two-observations-of-a-3D-point-lying-on-a-plane-are_fig1_221362899
그림 7: https://colmap.github.io/index.html
그림 8: https://www.researchgate.net/figure/The-results-of-COLMAP-reconstruction-on-rectified-images-similar-to-those-shown-in-Fig_fig4_345555520
그림 9: https://www.wenyanet.com/opensource/ko/61a778dcabe1f82dec18dfe8.html