본문 바로가기
글 & 논문/Computer vision

[PTAM] Mapping

by sim0609 2024. 3. 20.

이번 시간에는 PTAM의 세 번째 시스템 Mapping에 대해 자세히 소개하겠다. PTAM에 대한 두 번째 시스템인 Tracking에 대한 자세한 내용은 아래 링크에서 확인 가능하다.

https://sim0609.tistory.com/entry/PTAM-Tracking

 

[PTAM] Tracking

이번 시간에는 PTAM의 두 번째 시스템 Tracking에 대해 자세히 소개하겠다. PTAM에 대한 첫 번째 시스템인 Map에 대한 자세한 내용은 아래 링크에서 확인 가능하다. https://sim0609.tistory.com/entry/PTAMMap [PTAM

sim0609.tistory.com

Mapping

Mapping은 Tracking 과정에서 얻은 Key frame(camera pose & 2D img)들을 이용하면서, 3D Map을 생성하는 과정이다. Mapping은 맵을 생성하는 단계와 확장하는 단계로 크게 두 단계가 존재한다. 

 

1. 초기 맵 생성 단계: 초기 맵(= Base map)을 구축할 때는 stereo 기술을 사용해 구축할 수 있다.

2. Map 확장 단계: 초기 맵을 생성했으면, Tracking system에서 새로운 key frame을 얻어 맵을 보완하고 확장할 수 있다.

 

그럼 먼저 초기 맵을 생성하는 방법부터 살펴보도록 하자.

Step 1. Init Map

초기 맵을 생성할 때 사용자도 함께 참여하게 된다. 첫 번째 key frame과 두 번째 key frame을 생성할 때까지만 사용자의 도움이 필요하게 된다. 

1. Start Button

첫 번째 Key frame을 얻기 위해 사용자는 사용자의 작업 공간에 카메라를 두고, PTAM 응용 프로그램 시작 버튼을 눌러야 한다. 이렇게 시작 버튼을 누르면 첫 번째 Key frame이 저장되고, 첫 번째 key frame의 pyramid level 0에서 FAST corner algorithm으로 뚜렷한 1000개의 patch를 찾아내는 과정을 거치게 된다. 여기서 뚜렷한 특징점을 찾는 이유는 두 번째 Key frame과 매칭되는 대응점을 찾아 초기 맵을 구축하기 위해서이다.

첫 번째 Key frame

2. End Button

다음으로, 두 번째 Key frame을 얻기 위해 사용자는 사용자의 작업 공간에서 10cm정도 이동한 후 종료 버튼을 누르게 된다. 이후, 초기 맵을 생성하기 위해 두 번째 Key frame은 첫 번째 Key frame과 아래와 같은 과정이 수행된다. 

 

Five-point Algorithm & RANSAC

: 두 key frame 사이의 대응점을 이용해서 five point algorithm으로 init camera pose를 추정하고, Ransac을 이용해 init camera pose를 최적화한다. 

 

** five-point algorithm: 두 개의 카메라 view(첫 번째 key frame과 두 번째 key frame)에서 최소 5개의 대응점을 사용해 카메라의 상대적인 포즈를 추정한다. 

 

** RANSAC: 첫 번째 key frame과 두 번째 key frame의 대응점들 중 몇 쌍만을 이용해서 essential matrix들을 가정하고, 나머지 대응점들을 이용해 가정했던 essential matrix들 중 가장 잘 맞는 essential matrix로 최종 camera pose를 최적화한다.

 

Triangulation

: RANSAC까지 이용해서 최종 camera pose를 추정하게 되면, Triangulation을 이용해 base map을 생성할 수 있다. 

 

위 과정으로 base map을 생성했으면, base map을 최적화하기 위해 Bundle adjustment를 수행할 수 있게 된다. 그리고 추가적으로 base map은 임의의 scale로 생성되기 때문에, map을 실제 세계의 크기 단위로 조정하기 위해서 PTAM은 사용자가 생성한 첫 번째 Key frame과 두 번째 Key frame 사이의 camera 이동 거리가 10cm라고 가정하고 map을 Scaling한다. 아래 그림처럼 주황색 선이 첫 번째 Key frame과 두 번째 Key frame간의 이동거리를 보여준다.

두 번째 Key frame

Step 2. Keyframe insertion and epipolar search

지금까지 두 개의 key frame을 이용해서 초기 맵을 생성했고, 여기서 우리는 카메라를 이동해가며 새로운 key frame들을 맵에 추가해서 초기 맵을 확장할 수 있다. 또한, Map을 확장하기 위해 사용되는 Key frame들은 아래와 같은 조건을 따르게 된다. 

Map을 확장하는데 사용되는 Key frame의 3가지 조건)

1. Good Tracking quality에 해당하는 Key frame이어야 한다. 즉, Real World의 특징적인 정보를 잘 담은 2D image면서 카메라의 시점 변화가 명확하게 존재하는 2D image를 갖고, 해당 image에 대한 camera pose도 잘 추정한 Key frame이어야 한다.

  

2. 가장 최근에 map에 추가된 Key frame과 최소 20 frame 이상 시간 차이가 나는 Key frame이어야 한다.

 

3. 새롭게 추가될 Key frame은 이전에 찍었던 Key frame과 어느정도 공간상의 변화가 존재해야 한다.

 

이렇게 Map을 확장하는데 사용되는 Key frame이 위와 같은 3가지 조건을 만족해야 하는 이유는 map 안에서 중복이 되거나 불필요한 데이터의 증가를 방지하면서, 기존의 point와 완전히 다른 새로운 feature point들을 map에 효율적으로 추가하기 위해서이다. 

 

그리고 Map에 Key frame뿐만 아니라 새로운 point들을 추가하기 위해서 point의 깊이 정보가 필요하게 되는데, 아래와 같은 과정으로 map 새롭게 추가할 point에 대한 깊이 정보를 구할 수 있다.

Epipolar search

먼저, 새로운 key frame과 이전 key frame 사이의 대응점을 찾기 위해 epipolar search를 수행해야 한다. 

Zero-mean SSD

그리고 epipolar search로 두 key frame의 대응점이 matching되는 점인지 확인하기 위해서 Zero-mean SSD score을 이용해 유사도를 검사하게 된다. 

Triangulation

마지막으로, 두 key frame 사이의 대응점이 확인됐다면, Triangulation을 통해 대응점의 깊이 정보를 알 수 있게 되고, 해당 깊이 정보를 이용해서 기존 map 존재하지 않았던 새로운 point를 map에 추가할 수 있게 된다. 

Step 3. Bundle Adjustment

이렇게 새로운 key frame들과 새로운 point들이 map에 추가되면 Bundle adjustment로 3D map을 최적화할 수 있게 된다. Mapping에 사용되는 Bundle adjustment는 크게 두 가지 존재한다.

Global Bundle Adjustment

(μ2~μN): 현재 맵에 존재하는 2~N번째 camera pose에 대한 최적화

(p’1~p’M): 현재 맵에 존재하는 모든 map point의 위치 최적화

 

global bundle adjustment는 말 그대로 현재까지 생성된 모든 map point와 camera pose를 반복적으로 조정하는 과정이다. 그렇기 때문에 만약 map이 너무 커지게 되면, global bundle adjustment를 수행하는데까지 걸리는 시간이 길어지고 새로운 정보를 탐색하고 반영하는 것도 지연된다.  

Local Bundle Adjustment

X: 최근 5개 key frame의 camera pose가 최적화 대상

Y: X key frame들의 camera pose 최적화에 도움을 주는 참조 key frame

Z: 5개의 key frame에 포함되는 point들로 최적화 대상

 

따라서, global bundle adjustment의 계산 복잡도를 최소화하기 위해 일부 key frame과 그 Key frame의 존재하는 map point를 최적화한다. 해당 논문에서는 최근 5개 key frame의 camera pose와 map point가 최적화 대상이 된다. 

Step 4. Data association refinement

그리고 만약에 bundle adjustment까지 수행했고 새로운 key frame이 map에 추가되지 않고 있다면, data association refinement를 통해서 새로 추가된 map point와 기존 map point와의 연관성을 개선하는 작업을 수행하게 된다. data association refinement는 아래와 같이 새롭게 추가된 point와 이상치에 대해서 데이터 개선 작업이 진행된다. 

 

1. 새로운 map point 보완: 새롭게 추가된 map point는 새로운 key frame과 직전 key frame과의 관계를 통해 추가된 점인데, 해당 point가 훨씬 이전의 key frame에서 발견될 경우 추가적인 측정을 통해 새로운 map point를 보완할 수 있다.

 

2. 이상치 제거 및 업데이트: 오류로 판단되는 map point들은 이전 추가됐던 Key frame들을 이용해서 데이터 연관성을 확인할 수 있고, 이상치로 판단되면 map point를 제거하거나 더 적절한 point로 업데이트된다.   

 

여기까지가 PTAM의 Mapping이 어떻게 작동되는지에 대한 설명이다. 그럼 다음 시간에 실제 PTAM 실습 과정을 살펴보도록 하자. 그리고 아래 자료는 내가 KIST에서 논문 발표할 때 사용한 자료이다. 

>> PTAM 발표 자료

20240319.pptx
1.99MB

 

>> PTAM 실습 

https://sim0609.tistory.com/entry/PTAM-%EC%8B%A4%EC%8A%B5

 

[PTAM] 실습

PTAM 실습 꽤 오랫동안 PTAM 논문을 반복해서 읽고, 드디어 PTAM 실습을 하려고 한다. PTAM 실습에 참고한 블로그는 darkprogrammer님의 블로그이다. https://darkpgmr.tistory.com/130 PTAM/PTAMM 컴파일하기 이 글은 P

sim0609.tistory.com

 

'글 & 논문 > Computer vision' 카테고리의 다른 글

[논문 리뷰] 3D gaussian-splatting  (0) 2024.05.29
[Camera parameter] 3D to 2D projection  (0) 2024.05.23
[PTAM] Tracking  (0) 2024.03.20
[PTAM] Map  (0) 2024.03.19
[PTAM] PTAM vs. SLAM  (0) 2024.03.18