이번 시간에는 PTAM의 두 번째 시스템 Tracking에 대해 자세히 소개하겠다. PTAM에 대한 첫 번째 시스템인 Map에 대한 자세한 내용은 아래 링크에서 확인 가능하다.
https://sim0609.tistory.com/entry/PTAMMap
[PTAM] Map
이번 시간에는 PTAM의 첫 번째 시스템 3D Map에 대해 자세히 소개하겠다. PTAM에 대한 대략적인 설명, PTAM과 SLAM의 비교 내용은 아래 링크에서 확인 가능하다. https://sim0609.tistory.com/entry/PTAM1 [PTAM] PTAM v
sim0609.tistory.com
Tracking
Tracking은 지금까지 만들어진 3D map 정보가 존재한다고 가정했을 때, 3D map과 현재 frame 사이의 매칭점을 구해서 카메라의 위치를 실시간으로 추적하는 과정이다. Tracking에서는 각 frame의 camera pose를 추적하기 위해 아래 4단계의 과정을 차례대로 거치게 된다.
Step 1. Image Acqusition & Initial Camera Pose 추정 단계
Image Acqusition
사용자가 Hand-held-camera를 들고 특정 작업 공간 내에서 이동하면, 실시간으로 2D image(frame)를 습득하게 된다.
Initial Camera pose 추정
Tracking에서 PTAM은 motion model로 감쇠 속도 모델을 이용하면서, 매 Frame마다 initial camera pose를 추정한다.
이렇게 초기 camera pose를 추정하는 이유는 3D map point와 현재 카메라 프레임에서 관찰된 특징점들 사이의 feature 매칭 과정을 더 빠르고 정확하게 수행하기 위해서 해당 과정을 거친다고 보면 된다. (initial camera pose는 Step 2. Patch Search 단계에서 사용된다.)
** 감쇠 속도 모델: 시간이 지남에 따라 카메라의 이동 속도가 감소한다고 가정할 때, 카메라의 이전 움직임을 바탕으로 이후의 Camera pose를 추정하는 방식
Step 2. Patch Search 단계
Patch search 단계는 지금까지 생성된 3D map과 현재 frame 사이의 매칭되는 특징점(대응점)을 찾는 과정이다. 이렇게 3D map과 현재 frame 사이의 매칭되는 특징점(대응점)을 구하기 위해서, 우리는 먼저 3D map의 point가 현재 frame에서는 어떤 형태의 patch로 표현될 수 있는지 구하고, 해당 patch(= 3D map point의 현재 frame에서의 patch 정보)가 실제로 현재 frame에 존재하는지 확인하는 과정을 통해서 최종 매칭 patch를 구할 수 있다.
먼저, 3D map의 point가 현재 frame에서 어떤 형태의 patch로 표현될 수 있는지를 알기 위해 와핑 행렬 A를 구해야한다. 그 전에 와핑 행렬 A의 개념을 먼저 알아보도록 하자.
와핑 행렬 A란?
와핑 행렬은 아래 예시처럼 정사각형 pattern과 평행사변형 pattern이 존재할 때, 정사각형 pattern을 평행사변형 pattern으로 변형해주는 행렬 형태의 공식이다. 그래서 이 와핑 행렬을 정사각형을 구성하는 pixel들마다 적용해주게 되면, pixel들의 모양과 크기가 변화하면서 평행사변형 pattern을 구성하게 된다.
지금까지 짧게 와핑 행렬의 개념과 적용을 알아봤으니 실제 3D map point에서 와핑 행렬을 어떻게 활용하는지 알아보도록 하자.
Map point로 와핑 행렬 구하는 방법
Map point로 와핑 행렬을 구하는 방법은 다음과 같다.
예를 들어, 아래 그림처럼 지금까지 생성된 3D map에 빨간색 point가 있고, 이 빨간색 point는 기본적으로 해당 point가 key frame에서 처음 발견됐을 때의 시각적인 정보인 patch 정보를 갖고 있다.
그리고 이 빨간색 point에 현재 frame에서의 초기 camera pose를 내적하고, 3D에서 2D image plane으로 투영하게 되면, 빨간색 point가 현재 frame에서는 어떤 모양과 크기의 patch로 존재하는지 알 수 있다.
정사각형 patch = 빨간색 point의 기존 patch
평행사변형 patch = 빨간색 point의 현재 frame에서 추정되는 patch
(추가적으로, map point의 기존 patch와 현재 frame에서 추정되는 patch의 모양, 크기, 위치가 모두 다르다. 그 이유는 map point가 처음 발견된 시점부터 현재 frame의 시점까지 camera pose가 변화했고, 그에 따라 camera에 찍히는 실제 환경의 공간상 변화도 발생하기 때문이다.)
이렇게 하나의 map point에서 두 개의 patch 정보를 얻게 되면, 그 둘의 변환 관계를 이용해서 와핑 행렬을 구할 수 있다. 즉, 여기서 와핑 행렬 A는 3D map point의 기존 patch(ex. 정사각형 pattern)를 현재 frame에서 추정되는 patch(ex. 평행사변형 pattern)로 변환하기 위한 행렬이라고 정의할 수 있다.
이처럼 와핑 행렬을 구하는 방법을 그림으로 확인했으니, 와핑 행렬의 수식 표현을 살펴보도록 하자. 와핑 행렬의 각 요소는 map point의 기존 patch(S)의 pixel 위치 변화에 따른 map point의 현재 frame에서 추정되는 patch(C)의 pixel 위치 변화율로 표현할 수 있다.
더 자세히 설명하자면, 첫 번째 행은 기존 patch의 가로, 세로 pixel 위치 변화에 따른 현재 patch의 가로 pixel 위치 변화율이다.
그리고 두 번째 행은 기존 patch의 가로, 세로 pixel 위치 변화에 따른 현재 patch의 세로 pixel 위치 변화율이다.
그래서 map point의 기존 patch를 구성하는 모든 pixel에 아까 구한 와핑행렬을 적용하면, map point의 현재 frame에서 추정되는 patch가 나온다. 그리고 추가적으로 두 patch간의 위치 변환은 Translation, Rotation, Skew, Scaling의 조합에 해당하는 아핀 변환으로 표현할 수 있다고 한다.
와핑 행렬 A를 이용해 현재 frame에서 3D map point의 patch 찾기
지금까지 우리는 map point의 와핑 행렬을 구할 수 있었고, 이 와핑 행렬을 좀만 더 변형하면 현재 frame의 특징점과 3D map point의 매칭점 찾을 수 있다. 즉, 현재 frame 안에서 map point를 찾을 수 있게 된다.
1. det(A) / 4^l(= pyramid level) ≒ 1
와핑 행렬 A에 행렬식을 씌운 후, 이걸 4^(pyramid level)으로 나눴을 때 1에 가까워지는 pyramid level이 target pyramid level이 된다. 이렇게 구한 target pyramid level은 현재 frame에서 매칭점의 실제 patch scale을 가장 잘 반영한 pyramid level이며, 매칭점을 검색할 가장 적합한 pyramid level이 된다.
target pyramid level을 구하는게 중요한 이유)
현재 frame 안에서 3D map point에 대응하는 patch를 정확하게 추적하고 매칭하기 위해서 매칭점의 실제 patch scale을 담은 pyramid level을 찾는게 중요하다.
2. Patch search template
3D map point의 기존 patch에다가 와핑 행렬과 bilinear interpolation을 적용하면, 현재 frame에서 map point에 매칭되는 patch를 찾을 수 있는 template이 생성된다.
최종 매칭점의 patch search
target pyramid level과 patch search template을 구했으면, 이 두 가지를 이용해 현재 frame 안에서 map point에 대응되는 최종 patch를 구할 수 있게 된다.
1. 현재 frame의 target pyramid level 안에서 매칭되는 patch가 존재할 법한 원형 검색 영역 내 FAST-corner algorithm을 수행한다.
2. FAST-corner algorithm으로 이미지 내에 뚜렷한 특징점에 해당하는 fast corner location과 patch search template의 SSD score을 평가한다.
3. SSD score로 patch search template과 가장 유사한 patch가 발견되면, 현재 frame에 map point가 존재한다는걸 의미하고 해당 patch는 map point의 현재 시점에 대한 patch 정보가 된다.
**FAST-corner algorithm: 이미지 내에서 코너(또는 특징점)을 빠르게 찾기 위한 알고리즘
**SSD 점수: 두 패치 간의 유사성을 측정하는 데 사용되는 지표
Step 3. Pose Update
Step 2에서 Patch search를 통해 현재 frame과 map point의 성공적으로 매칭된 patch 집합을 찾았으면 이걸 바탕으로 현재 frame의 camera pose를 업데이트 할 수 있다. 이때 camera pose를 업데이트 및 최적화하는 방법은 Tukey biweight 목적 함수로 reprojection errror를 최소화하는 방식으로 camera pose를 최적화한다.
Reprojection error
첫 번째 좌표는 patch search로 구한 현재 frame에서 map point의 patch 좌표(label)를 의미하고, 빼기 뒤에 나오는 두 번째 좌표는 계속해서 업데이트되는 camera pose와 map point를 내적한 후 2D image plane에 투영한 좌표(predict)이다.
그리고 reprojection error는 단순히 이 두 patch의 오차를 나타내는 식이다.
Tukey biweight objective function
ej: 매칭된 patch의 재투영 오류
σj: 매칭된 patch의 측정 노이즈, σ = 2^l(= pyramid level)
ej / σj: 매칭된 patch들의 scale에 상관없이 모든 patch들의 재투영 오류를 동일한 기준으로 비교하기 위한 reprojection error 정규화
Tukey biweight 목적 함수는 ej / σj(각 매칭된 patch의 정규화된 재투영 오류)가 σT보다 작으면 해당 patch에는 큰 가중치를 부여하고, σT보다 크면 해당 patch에는 0에 가까운 매우 작은 가중치를 부여해서 매칭된 patch 집합의 전반적인 재투영 오류를 최소화하는 방법으로 camera pose를 업데이트한다고 한다.
실제로, Tukey biweight을 10번 정도 반복하면 현재 frame에 대한 camera pose가 어느정도 최적값으로 수렴한다.
Step 4. Two stage tracking
Pose update까지의 내용이 Tracking이 현재 frame 안에서 camera pose를 추정하는 과정에 대한 내용이었다. 근데, Tracking은 실제로 한 번만 이뤄지는게 아니라 아래와 같이 Coarse Tracking과 Fine Tracking으로 두 번 이뤄진다.
1.Coarse Tracking
첫 번째 Tracking에서는 현재 프레임의 이미지 피라미드 안에서 가장 높은 레벨(pyramid level 3)에 나타나는 50개의 뚜렷한 맵 포인트에 대해 넓은 검색 영역 안에서 patch search가 이뤄지고, camera pose를 업데이트한다.
2. Fine Tracking
두 번째 Tracking에서는 현재 프레임의 가장 낮은 레벨(pyramid level 0) 이미지에 있는 최대 1000개의 세부적인 맵 포인트에 대해 좁은 검색 영역 안에서 patch search를 진행하고, camera pose를 업데이트한다.
Step 5. Tracking quality and failure recovery
그리고 PTAM의 성능이 좋다고 하지만, Tracking을 수행했을 때 항상 Tracking quality가 좋은건 아니기 때문에 PTAM의 Tracking에서는 매 frame마다 tracking quality를 측정할 수 있는 시스템이 존재한다고 한다.
Good tracking quality와 Bad tracking quality를 판단하는 기준은 아래와 같다.
Bad Tracking Quality
매 frame마다 map과 현재 frame에서 성공적으로 매칭된 point feature(patch)의 비율 < 기준값
Good Tracking Quality
매 frame마다 map과 현재 frame에서 성공적으로 매칭된 point feature(patch)의 비율 > 기준값
그리고 만약 Bad Tracking Quality로 Tracking Failure이 발생하면, 아래 논문의 Real-time SLAM relocalisation의 방식을 이용해 frame의 camera pose를 다시 추정한다고 한다.
>> 다음 시간에 PTAM을 구성하는 시스템 중 Mapping에 대해 자세히 설명하겠다.
https://sim0609.tistory.com/entry/PTAM-Mapping
[PTAM] Mapping
이번 시간에는 PTAM의 세 번째 시스템 Mapping에 대해 자세히 소개하겠다. PTAM에 대한 두 번째 시스템인 Tracking에 대한 자세한 내용은 아래 링크에서 확인 가능하다. https://sim0609.tistory.com/entry/PTAM-Trac
sim0609.tistory.com
'글 & 논문 > Computer vision' 카테고리의 다른 글
[Camera parameter] 3D to 2D projection (0) | 2024.05.23 |
---|---|
[PTAM] Mapping (0) | 2024.03.20 |
[PTAM] Map (0) | 2024.03.19 |
[PTAM] PTAM vs. SLAM (0) | 2024.03.18 |
Coordinate System (0) | 2024.03.03 |