Review: Visual Odometry I [tutorial]
Scaramuzza, D., & Fraundorfer, F. (2011). Visual odometry [tutorial]. IEEE robotics & automation magazine, 18(4), 80-92.
0. Introduction
Visual Odometry는 모노 또는 스테레오 카메라 만을 이용하여 어떤 주체(e.g. 차량, 사람, 로봇 등)의 에고모션을 추정하는 과정이다. 활용 분야로는 로보틱스, 웨어러블, 증강 현실, 자율 주행 등이 있다.
egomotion에 대하여
Visual Odometry라는 단어는 2004년 Nister의 대표 논문에서 처음 등장했으며, Wheel Odometry와의 유사성 때문에 그렇게 정해졌다. 참고로, Wheel Odometry란, 일정 시간 동안의 바퀴의 회전 수를 이용하여 차량의 점진적인 움직임을 추정하는 것이다. 이와 같이, Visual Odometry 또한 차량의 움직임으로 인해 장착된 카메라의 이미지에 생기는 변화를 통해 차량의 포즈를 점진적으로 추정하는 방식으로 작동한다. Visual Odometry가 효과적으로 작동하기 위해선, 첫째, 충분히 밝은 환경이어야 하고, 둘째, 각각의 정적인 Scene은 움직임을 확실히 추출 해낼 수 있는 충분한 질감을 지니고 있어야 한다. 더불어, 연속한 프레임들은 충분하게 겹친 Scene들이어야 한다.
Wheel Odometry와 비교해서 Visual Odometry는 Wheel slip과 울퉁불퉁한 지면 등 다른 불리한 조건들의 영향을 받지 않는다. Visual Odometry는 0.1 ~ 2% 범위의 상대 위치 오차를 보이며 Wheel Odometry 보다 정확한 Trajectory 추정이 가능한 것이 증명되었다.
Trajectory에 대하
이러한 이점으로 Visual Odometry는 Wheel Odometry를 비롯한 다른 Navigation 시스템 (GNSS, IMU, Laser Odometry )의 대안 혹은 보충안으로 떠오르고 있다. 특히 물속과 같은 GPS 음영 지역에서 Visual Odometry가 더 유용하다.
두 파트의 Tutorial과 Survey를 통해 1980년부터 2011까지 Visual Odometry(이하 VO)에 관한 연구를 알아 볼 것이다. 처음 20년 동안 많은 오프라인 구현이 이루어졌지만, 30년 째 들어서 처 실시간 시스템이 화성 탐사 차량에 사용되면서 주류가 되었다. 첫 번째 파트에선 30년 동안의 이 분야 논문들에 대한 회고와 핵심 내용을 다룬다. 카메라 모델링과 캘리브레이션에 관한 간단한 고찰 후에, 모노와 스테레오 카메라를 이용한 움직임 추정 과정을 살펴보고 각각의 장단점을 알아본다. 두 번째 파트에선 피쳐 매칭과 robustness 그리고 활용하는 것을 다룬다. 이 부분에선 VO에서 주로 쓰이는 특징점 추출기에 대해 살펴보고 다른 아웃라이어 제거 방식도 살펴본다. 특히 Random Sample Consensus (i.e. RANSAC)과 그것을 빠르게 사용하는 방법을 강조해서 논한다. 그리고 error modeling, location recognition, bundle adjustment 등에 대해서도 다뤄본다.
이 튜토리얼은 숙련자와 비숙련자 모두에게 완전한 VO시스템을 구축하는 가이드 라인과 참조 알고리즘을 제공한다. 항상 작동하는 작업 환경을 위한 이상적이고 고유한 VO 솔루션이 존재하지 않기 때문에 특정 탐색 환경과 주어진 계산 리소스에 따라 신중하게 최적의 솔루션을 선택해야 한다..
1. History of Visual Odometry
SfM과 같은 컴퓨터 비전 커뮤니티에서 카메라 이미지 세트에서 상대적인 카메라 포즈와 3차원 구조를 복원하는 문제가 알려져 있다. 그 기원은 [2]와 [3]과 같은 것들로 거슬러 올라갈 수 있다. VO는 SFM의 특정한 경우이다. SFM은 연속적인 정렬, 비정렬 이미지 셋으로 부터 구조와 카메라 포즈 3D 재구성 문제를 해결하고 비교적 일반적이다. (더 큰 바운더리다.) 최종 구조와 카메라 포즈는 일반적으로 오프라인 최적화(BO)로 다듬어지며, 계산 시간은 이미지 수에 따라 증가한다. 반면에, VO는 -새로운 프레임이 들어오면- 실시간으로 카메라의 3D모션을 연속적으로 추정하는데 초점이 맞춰져있다.
비주얼 입력으로부터 차량의 에고모션을 추정하는 문제는 일찍이 1980년대에 다뤄졌다. [5] 흥미롭게도 VO의 초기 연구 ([5] ~ [9]) 대부분이 NASA 화성 탐사 프로그램에 주로 울퉁불퉁하고 거친 지형에서 바퀴의 미끄러짐이 있을 때 탐사선의 6자유도 동작을 측정할 수 있는 기능을 제공하기 위한 노력의 일환이었다.
Moravec의 작업은 최초의 모션 추정 파이프 라인(주요 기능 블록은 여전히 사용되고 있음)을 제시 한 것 뿐만 아니라 최초의 코너 검출기 중 하나를 설명하는데도 중요하다. (Hanna가 1974년에 제안한 첫 번째 것 이후[10]) Moravec 코너 검출기는 Forstner 코너 검출기[12]와 Harris-Stephens 코너 검출기[3], [82]의 전신이다.
Moravec은 본인이 Slider stereo(a single camera sliding on a rail)라고 표현한 카메라가 장착된 탐사선으로 그의 작업을 테스트했다. 그리고 상기 장치는 stop-and-go 방식으로 움직였고, 모든 위치에서 이미지 디지털화 및 분석을 진행했다. 각각의 stop포인트에서 카메라는 수평으로 슬라이드하면서 일정한 거리에서 총 9번으로 나누어 이미지를 얻는다. Moravec이 만든 특징점 검출기를 이용해 한 이미지에서 코너를 찾아내고 Normalized cross correlation을 이용하여 나머지 8개 이미지의 epipolar line에 일치시켰다.
epiporal?
Normalized cross correlation
다음 로봇 위치에서 예상되는 일치는 큰 규모의 변화를 설명하기 위해 Coarse to fine strategy를 사용한 상관 관계에 의해 구해진다. 그리고 그 후에 8개의 스테레오 쌍을 이용해 깊이 불일치를 고려하여 이상값(Outliers)를 제거한다. 마지막으로 두 개의 연속된 로봇 위치에서 보이는 삼각 측량된 3D 포인트를 정렬하기 위해, 모션은 강체 변환으로 계산되었다.
rigid body transformation
Triangulation
식은 가중 최소 제곱을 통해 해결되었다. (가중치가 3차원의 점으로부터의 거리에 반비례하는)
방정식 시스템은 가중치가 3 차원 점으로부터의 거리에 반비례하는 가중 최소 제곱을 통해 해결되었습니다.
weighted least square
비록 Moravec이 단안의 슬라이딩 카메라를 사용했지만, 그의 작업들은 스테레오 VO 알고리즘에 속한다. 이 용어는 피처의 상대적인 3D 위치가 항상 삼각 측량에 의해 측정 되고 상대 동적을 유도하는데 사용된다는 말이다. Trinocular 방법도 같은 알고리즘 종류에 속한다. 스테레오 방식의 대안은 단안 카메라를 사용하는 것이다. 이 경우, 방위 정보만 사용할 수 있다. 단점은 모션이 scale factor만큼만 복구될 수 있다는 것이다. 절대적인 크기는 모션 제약, IMU, 기압 및 범위 센서와 같은 다른 센서와의 통합 등 직접 측정 방식에 의해 구할 수 있다. (e.g. 장면의 요소 측정)
단안 방법에서 주목할 점은 거리가 스테레오 기준선(i.e. 두 카메라 사이의 거리)보다 훨씬 클 때 스테레오 VO가 단안 케이스로 퇴화 될 수 있다는 점이다.
Stereo baseline
이 경우 스테레오 방식은 효과가 떨어지므로, 단안 방법을 사용 해야 한다. 수년에 걸쳐 단안 VO와 스테레오 VO는 독립적으로 발전해왔다. 이 섹션의 나머지 분야에서는 이 부분에 관해 다루겠다.
1-1. Stereo VO
VO에 대한 대부분의 연구는 스테레오 카메라를 이용해 이루어졌다. Moravec의 작업을 기반으로, Matthies와 Shafer [6], [7] 은 스테레오 시스템과 Moravec의 방식을 사용하여 코너 detecting과 tracking을 수행했다.
Moravec의 작업을 기반으로 Matthies와 Shafer [6], [7]은 양안 시스템과 Moravec의 절차를 사용하여 모서리를 감지하고 추적했습니다. 이들은 Moravec이 불확실성의 스칼라 표현을 사용한 것과 달리, Triangulated 피쳐와 error covariance matrix를 사용하여 이를 모션 추정 단계에 통합했다. 탐사선 궤도 회복에서 Moravec에 비해 5.5m 경로에서 2%의 상대 오차로 더 우수한 결과를 보여주었다. Olson [9], [13] 등은 절대 방향 센서 (e.g. compass, omnidirectional camera)를 도입하고 Forstner 코너 Detector을 사용해 Moravec의 operator보다 훨씬 빠르게 계산하는 걸 보였다. 그들은 egomotion 추정 값만 사용하면 이동 거리의 superlinear growth와 누적 오류가 발생하여 방향 오류가 증가함을 보였다. 반대로, 절대 방향 센서가 통합되면 오차 증가는 이동 거리의 선형 함수 형태로 줄어들 수 있다. 이로 인해 20m 경로에서 1.2%의 상대 위치 오류가 발생했다.
Triangulated feature
error covariance matrix
Forstner corner detector
Lacroix 등 은 앞서 설명한 것과 유사한 화성 탐사선용 스테레오 Visual Odometry 접근 방식을 구현했다. 차이점은 key point를 잡는 방법에 있는데 Forstner detector를 사용하지 않고, dense stereo를 사용한 다음, peaks 주변의 correlation function을 분석하여 key point 후보를 선택하였다. 이 접근법은 나중에 [14], [15] 와 다른 작업들에서도 쓰였다. 이 방법은 correlation curve의 형태와 표준편차 사이에 강한 상관 관계가 있다는 것을 기반으로 한다.
correlation function
correlation curve
Cheng 등 은 Olson 방식에서 두 가지를 개선하였다. 우선 Harris Corner Detector를 사용한 후, (Lacroix 등이 제안한) Feature 주변의 correlation function의 curvature을 사용하여 이미지 포인트의 error covariance matrix를 정의했다. 두 번째는, Nister가 그랬듯 outlier rejection을 위해서 최소 자승 모션 추정 단계 (least-squares motion estimation step)에서 RANSAC을 사용했다.
다목적 탐사 차량을 위한 motion estimation와 outlier removal에 대한 다른 접근으로는 Milella와 Siegwart의 방법이 있다. 이들은 Shi-Tomasi Detector를 사용했고 (Lacroix와 비슷하게) stereo disparity map에 강한 신뢰를 바탕으로 작업했습니다. 이전의 방법처럼 최소 자승을 사용하여 Motion estimation문제를 풀고 ICP(Iterative Near Point) 알고리즘을 사용하여 Pose refinement를 해결했다. 그리고 robustness를 위해서 outlier removal 단계를 ICP에 통합시켰다.
지금까지 언급한 작업들은 모두 스테레오 쌍에 대해서 triangulation을 통해 3D 포인트를 잡고 relative motion은 3D to 3D point registration 문제로 풀어내는 방식이라는 공통점이 있다. Nister에 의해 2004년에 완전히 다른 접근법이 제안되었는데, 이들은 VO라는 용어를 처음 만들었고 강력한 outlier rejection 체계를 실시간에서 long-run 하게 구현해냈다.
Nister et al.에 의해 2004 년에 완전히 다른 접근법이 제안되었습니다. 그들의 논문은 VO라는 용어를 만들었을뿐만 아니라 강력한 이상치 제거 체계를 갖춘 최초의 실시간 장기 구현을 제공하는 것으로 알려져 있습니다. 또한 여러 면에서 이전 이론들을 개선해냈는데, 첫째로, 이전 이론들과 다르게 프레임간 Feature들을 추적하지 않았다. 대신 Harris corner detector를 이용해 독립적으로 찾은 Feature들을 매치하였다.
기존 방식과 차이는 뭐고 뭐가 지금은 대세인지?
이러한 방식은 cross-correlation-based tracking에서 drift를 피하는 장점이 있다. 둘째로, relative motion을 3D to 3D 방식으로 계산하지 않고 3D to 2D 카메라 포즈 추정 문제로 풀었다. (이 부분은 Motion Estimation에서 자세히 기술한다.) 마지막으로, RANSAC outlier rejection을 motion estimation 단계에 통합했다.
Comport 등은 다른 모션 추정 방식을 도입했다. 3D to 3D point registration 이나 3D to 2D camera pose estimation 기술을 쓰지 않고, 3D 포인트를 triangulation할 필요 없이 2D to 2D 이미지에서 모션을 계산 할 수 있도록하는 quadrifocal tensor를 사용했다. 이 방법은 어떤 스테레오 쌍에서도 3D Point를 triangulation 하지 않고 2D to 2D 이미지 매치를 가능하게 한다.
quadrifocal tensor
3D to 3D, 3D to 2D, 2D to 2D
1-2. Monocular VO
monocular VO가 스테레오 방식과 다른 점은 3D structure는 전부 2D 방위 데이터로부터 계산되어야 한다. 절대적 크기를 절대 알 수 없기 때문에 첫 두 프레임의 카메라 포즈는 보통 1로 설정된다. 새로운 이미지를 받으면 첫 두 프레임에 대한 상대적인 스케일과 카메라 포즈는 3D structure에 대한 정보나 trifocal tensor를 사용하여 결정한다.
trifocal tensor, ORB SLAM에서 모노 스케일을 결정하는 방법
perspective camera와 omnidirectional 카메라 모두를 사용하여 지난 10년간 단일 카메라로 장거리(길게는 수 킬로미터)에서 괜찮은 성능을 내었다.
원근 및 전 방향 카메라를 모두 사용하여 지난 10 년 동안 장거리 (최대 수 킬로미터)에서 단일 카메라로 성공적인 결과를 얻었습니다. 관련 작업은 feature-based 방법, appearance-based 방법, hybrid 방법으로 나뉠 수 있다. Feature-based 방법은 각점(silent)과 반복되는 피쳐를 기반으로 한다. appearance-based 방법은 이미지 또는 하위 영역에 있는 모든 픽셀의 intensity 정보를 사용한다. 그리고 hybrid 방법은 두 가지 방법을 합친 것이다.
Feature-based 방법은 [1], [24], [25], [27], [30]~[32] 의 방법이다. 단일 카메라에 대한 최초의 실시간 VO는 Nister의 것이었고, 그들은 outlier rejection으로 RABSAC을 사용하고 새로운 카메라의 포즈를 계산하는데 3D to 2D 카메라 포즈 추정을 사용했다. 논문의 주 내용은 RANSAC에서 운동 가설을 계산하기 위해 five-point minimal solver를 사용했다. 이후 five-point RANSAC은 VO에서 대세가 되었음. Corke [24]는 catadioptric 카메라를 이용해 얻은 omnidirectional 이미지와 optical flow를 이용한 mono VO에 대한 접근 방식을 제안했다. Eng Lhuillier [25] 및 Mouragnon [30]은 모션과 3D 맵을 모두 복구하기 위해 Local windowed-bundle adjustment을 기반으로 한 방식을 제안했다. (이는 Bundle adjustment가 마지막 m 프레임의 윈도우에서 수행됨을 의미함.) 다시, 그들은 outlier 제거 방법으로 five-point RANSAC을 사용했다.
Five-point RANSAC
windowed-bundle adjustment
Tardif [27]는 Bundle adjustment 없이 장거리(2.5km)에서 VO를 하는 방법을 제안했다. 이전 작업들과는 달리 Rotation과 translation 추정을 분리했다. Rotation은 무한대의 점과 복구된 3D 지도의 translation을 이용하여 추정했다. 그리고 five-point RANSAC을 사용하였다.
Appearance-based 와 hybrid 방법으로는 [26], [28], [29] 가 있다. Goecke [26]은 Fourier-Mellin transform을 이용해 차량에서 찍은 지면의 원근 이미지를 registering했고, Milford와 Wyeth[28]은 차량에 장착된 single perspective 카메라에서 대략적인 Rotation 및 translational velocity 정보를 추출하는 방법을 제시 했으며 이걸 RatSLAM에 사용했다. 그들 방식은 장면 중앙에 Templete tracking 방법을 썼다. 이 방법의 주요 단점은 occlussion에 robust하지 않다는 점이다. 이러한 이유로 Scaramuzza와 Siegwart[29]는 translation과 absolute scale을 계산하는데 사용되는 자동차의 회전과 지면으로 부터의 특징을 추정하기 위해서 이미지 모양을 사용했다. Feature 기반의 방식은 appearance 방식의 단점을 보완하는데 사용했다.
세 접근법 중 어떤 접근법이 대세 인지
앞서 언급한 모든 방식은 6 DoF에서의 unconstrained motion을 위해 설계되었다. 하지만, 몇가지 VO 작업은 motion constraint가 있는 차량을 위해 설계되었다. 장점은 연산 시간이 단축되고 모션 정확도가 향상된다는 것이다. 예를 들어 Liang and Pears [35], Ke and Kanade [36], Wang et al. [37] 및 Guerrero et al. [38]는 dominant 그라운드 면에서의 egomotion을 추정하기 위해 homographies를 사용했다. Scaramuzza et al. [31], [39] 는 egomotion 추정 속도를 400Hz로 높이기 위해 vehicle nonholonomic constraint를 기반으로한 one-point RANSAC outlier rejection을 도입했다. 후속 작업에서 그들은 nonholonomic constraint가 차량이 회전 할 때마다 mono camera에서 absolute scale을 복구 할 수 있음을 보여주었다[40]. 그 작업에 이어 feature tracking 향상을 위해 Pretto et al. 에 의해 차량 nonholonomic constraint도 사용되었다. Fraundorfer et al. [41]는 windowed bundle adjustment를 위해 nonholonomic constraint를 사용하였다. (다음 섹션 참조)
nonholonomic constraint
unconstrained motion
6 DoF 비주얼 오도메트리에서 DoF 의미
1-3. Reducing the Drift
VO는 카메라 경로를 점진적으로 계산하는 방식이므로 (포즈와 그 다음 포즈) 각각의 새로운 프레임 간 모션으로 인해 발생하는 오류는 시간이 지남에 따라 누적된다. 이것은 실제 경로에서 추정된 궤적으로 drift를 생성한다. 일부 애플리케이션의 경우 drift를 가능한 작게 유지하는 것이 중요하다. 이는 마지막에서 부터 m개의 카메라 포즈에 대한 local optimization을 통해 수행 할 수 있다.
local optimization
sliding window bundle adjustment 또는 windowed bundle adjustment라고 하는 이 방식은 [41]-[44] 와 같은 여러 작업에서 쓰였다. 특히 Konolige et al. [43]의 10km VO 실험에서 window bundle adjustment이 최종 위치 오류를 2~5배 감소시킬 수 있음을 보여주었다. 명백히, VO drift는 GPS나 레이저와 같은 다른 센서와 결합하거나 IMU만 사용하여도 줄일 수 있다. [43], [45], [46].
1-4. V-SLAM
이 튜토리얼은 VO 중심의 내용이지만 VSLAM에 의해 수행되는 parallel line에 대해 언급해야한다. SLAM 문제에 대한 심도 있는 연구를 위해 독자는 Durrant-Whyte와 Bailey [47], [48]의 글을 참조한다. 두 가지 방법론이 VSLAM 에서 대세가 되었다. 1)필터링 방법은 모든 이미지의 정보를 확률 분포(probability distribution)과 융합하고 [49] 2) 키 프레임 방법이라고도 하는 비 필터링 방법은 선택한 키프레임에 대한 global bundle adjustment 를 유지한다. 두 접근법의 주요 장점은 [51]에 평가되고 요약 되어있다.
[51] 요약 읽어보기
지난 몇 년 동안 mono와 stereo camera 모두 사용하여 성공적인 결과를 얻었다. [49], [52]-[62]. 이러한 연구의 대부분은 작은 실내 작업 공간으로 제한되어 있으며 최근해 큰 공간을 위해 설계된 연구는 극소수에 불과하다. [54], [60], [62].
54 60 62 읽어보기
실시간 VSLAM의 초기작들 중 일부인 Chiuso et al. [52], Deans [53], Davison [49]는 full-covariance Kalman 방식을 사용한다. Davison[49] 연구의 이점은 임의의 시간 후에 반복 가능한 localization을 설명한 것이다. 나중에 Handa et al. [59]가 probabilistic framework을 기반으로 한 active matching 기술을 사용하여 그 작업을 개선했다.
Civera et al. [60] 는 RANSAC model-hypothesis 단계에서 필터에서 유용한 사전 확률 정보를 사용하는 Kalman filter 내에서 one-point RANSAC의 조합을 제안하는 방식으로 구현하였다. 마지막으로 Strasdat et al. [61]은 SLAM의 특수 특성을 고려하면서 키 프레임 optimization 접근법 [50]을 활용하는 실외 VSLAM을 위한 새로운 프레임 워크를 제시하였다.
RANSAC model-hypothesis 단계
특수 특성 (special character) 란?
1-5. VO versus VSLAM
이 섹션에서는 VO와 VSLAM의 관계를 분석한다. 일반적으로 VSLAM의 목표는 로봇 경로의 전체적이고 일관된 추정치를 얻는 것이다. 이것은 로봇이 이전에 방문한 지역으로 돌아올 때를 인식하는데 필요하기 때문에 전에 환경의 지도를 추적하는 것을 의미한다. (이를 Loop closing 이라고 한다. Loop closing이 감지되면 이 정보들은 지도와 카메라 경로 모두에서 drift를 줄이는 데 사용된다. 1) Loop closing 이 발생하는 시기를 이해하고 2) 이 새로운 constraint을 현재 맵에 효율적으로 통합하는 것이 SLAM의 두 가지 주요 문제이다.) 반대로, VO는 Path를 포즈마다 점진적으로 복구 하는 것과 잠재적으로 마지막에서 부터 n개의 포즈에 대해서 최적화를 하는 것을 목표로 한다. (이것은 Windowed bundle adjustment라고 불리기도 한다.) sliding window optimization은 SLAM에서 로컬 맵을 구축하는 것과 동일하다고 간주할 수 있다. 그러나 철학(;본질)은 다르다. VO에서는 trajectory의 local consistency에만 관심이 있고, 로컬 맵은 local trajectory의 정확한 추정(e.g. bundle adjustment) 에만 사용된다. 반면에 VSLAM은 global map consistency에 보다 관심이 있다.
loop closing
global map consistency
VO는 완전한 SLAM 알고리즘의 building block으로 사용되어 카메라의 incremental motion을 복구 할 수 있다. 그러나 완전한 SLAM 방법을 만드려면 Loop closing을 감지하는 방법과 가능한 global optimization 단계를 추가하여 metrically하게 일관된 맵을 가져와야 한다. (이 단계가 없어도 맵은 여전히 topologically하게 일정하다.)
incremental motion
만약 사용자가 전체 맵이 아닌 카메라 경로에만 관심이 있는 경우 이 튜토이얼에서 설명하는 VO 기술 대신 완전한 VSLAM 방법을 사용할 수 있다. VSLAM 방식은 경로에 더 많은 제약을 적용하지만 반드시 더 강력한 것은 아니기 때문에 잠재적으로 훨씬 더 정확하다. (e.g. loop closing의 outlier들은 map consistency에 심각한 영향을 줄 수 있음.) 또한 더 복잡하고 계산 비용이 많이 든다.
결국 VO와 VSLAM 중 선택하는 것은 성능과 일관성 사이의 균형과 구현의 단순성에 달려 있다. 카메라 경로의 전체적인 일관성이 중요하긴 하지만 VO는 카메라의 이전 기록을 추적할 필요 없이 실시간 성능과 일관성을 절충한다.
2. Formulation of the VO problem
agent가 전체 환경을 이동하며 고정된 카메라 시스템으로 이산 시간 k에 이미지를 촬영한다. mono 시스템의 경우 k 시간에 촬영된 이미지 세트는 I0:n = {I0, ... , In} 꼴로 나타낼 수 있다. Stereo 시스템의 경우는 매 순간 왼쪽 오른쪽 이미지가 있는데 y Il, 0:n ¼ fIl, 0, ... , Il, ng and Ir, 0:n ¼ fIr, 0, ... , Ir, ng . 이는 Figure 1 의 그림이 이를 보여주고 있다.

단순화를 위해, camera coordinate frame을 agent's coordinate frame으로 가정한다. Stereo 시스템의 경우 일반성을 잃지 않고 왼쪽 카메라의 좌표계를 원점으로 사용 할 수 있다.
인접한 시점 k1 및 k에서 두 개의 카메라 위치는 다음 형식의 rigid body transformation T_k,k-1 E R ^4x4 of the following form:

Rigid body transform
여기서 Rk,k-1 E SO(3) 는 rotation 행렬이고, tk,k-1 E R^3x1 는 translation 벡터이다. T1:n = {T1,0,,,, , Tn,n-1} 세트에는 모든 후속 동작이 포함된다. 단순하게 표기하기 위해 지금부터 tk,k-1 대신에 Tk로 표기한다. 마지막으로 카메라 포즈 세트 C0:n = {C0, ... , Cn}는 k=0인 초기 좌표 프레임에 대한 카메라의 변환이 포함된다. 현재 포즈 Cn은 모든 변환 Tk(k=1,,,n)을 연결해서 구할 수 있다. 그리고 그러므로 Cn = Cn-1Tn, 즉, C0은 사용자가 임의로 설정한 k=0 순간의 카메라 포즈라고 할 수 있다.
VO의 주요 작업은 이미지 Ik 와 Ik-1에서 relative transformation Tk를 계산한 다음 transformation들을 연결하여 카메라의 전체 궤적 C0:n을 복구하는 것이다. 이것은 VO가 포즈마다 경로를 점진적으로 복구한다는 것을 의미한다. 이 단계 후에 마지막 m개의 포즈에 대한 반복적인 미세 조정을 수행하여 local trajectory를 보다 정확하게 추정할 수 있다. 이 반복적인 개선은 마지막 m개의 이미지에 대해 재구성 된 3D 포인트 (즉, 3D 맵)의 squared reprojection error의 합을 최소화하는 방식으로 작동한다. (m프레임의 window에서 수행되기 때문에 windowed-bundle adjustment라고 함, Bundle adjustment는 Part 2에서 자세히 다룬다.) 3D 포인트는 이미지 포인트를 Triangulation하여 얻는다. (Triangulation과 Keyframe Selection 부분 참고)
"Monocular VO" 에서 언급했듯이 상대 모션 Tk를 계산하는 두 가지 주요 방식이 있다. 두 입력 이미지에 있는 모든 픽셀의 intensity 정보를 이용하는 appearance-based 방법과 salient와 반복되는 feature를 뽑아서 사용하는(track하는) feature-based 방법이 있다.
salient
appearance-based 방법은 feature-based 방법에 비해 정확도가 떨어지고 연산량이 더 많다. (앞선 "History of VO"에서 살펴봤듯이 Stereo의 경우보다 구현이 쉬운 관계로 대부분의 appearance-based 방식은 monocular VO에 쓰였다. ) Feature-based 방식을 사용하려면 프레임 전체에서 feature들을 robust하게 매치하는 기능이 필요하지만 appearance-based 방식보다 빠르고 정확하다. 그러한 이유로, 대부분의 VO 구현은 Feature-based 방식이다.
VO의 파이프라인은 Figure 2에 요약되어 있다. 모든 새 이미지 Ik(스테레오 카메라의 경우 이미지 쌍) 에 대해 처음 두 단계는 2D Feature를 감지하고 이전 프레임의 Feature와 일치시키는 것으로 구성된다. 서로 다른 프레임에서 동일한 3D 기능을 reprojection하는 2D 기능을 image correspondences 라고 한다. ( Part2 에서 다시 설명하겠지만, 우리는 feature matching과 feature tracking을 구별한다. 첫 번째로 모든 이미지에서 독립적으로 feature를 감지한 다음 몇 가지 similarity metrics를 기반으로 매칭하는 것으로 구성되고, 두 번째로 하나의 이미지에서 feature를 찾고, 다음 이미지에서 correlation과 같은 local search technique을 사용하여 tracking 하는 것으로 구성된다. )

세 번째 단계는 k 1 순간과 k 순간 사이의 상대 운동 Tk를 계산하는 것으로 구성다. 대응이 3 차원 또는 2 차원으로 지정되었는지 여부에 따라 이 문제를 해결하기 위한 세 가지 다른 접근 방식이 있다. (“Motion Estimation”섹션 참조). 카메라 포즈 Ck는 Tk를 이전 포즈와 연결하여 계산된다. 마지막으로, Local trajectory에 대한 보다 정확한 추정을 얻기 위해 마지막 m 프레임에 대해 반복적인 iterative refinement (bundle adjustment)을 실행할 수 있다.
Motion estimation은 이 튜토리얼에 설명되어있다. ("motion estimation" 섹션 참고) Feature detection과 matching, bundle adjustment는 Part2에서 설명한다. 또한, 정확한 모션 계산을 위해 feature correspondences 는 outlier (wrong data associations라고도 하는) 를 포함하고 있어서는 안된다. outlier가 있는 상태에서 정확한 모션 추정을 보장하는 것은 robust estimation의 작업이며 이는 Part2에서 설명하도록 한다. 대부분의 VO 구현에서는 카메락 보정되었다고 가정한다. 이를 위해 다음 섹션에서는 perspective camera와 omnidirectional camera의 표준 모델과 보정 절차를 알아본다.
2-1. Perspective Camera model
perspective 카메라에 가장 많이 사용되는 표준 모델은 pinhole projection 시스템을 가정한다. 이미지는 초점 면과 렌즈 중앙(투영 중심)을 통해 물체에서 나오는 광선의 교차로 형성된다. Figure 3. (a) 참고.

X= [x,y,z]^t를 카메라 reference frame의 scene point라고 하고, p=[u,v]^t는 픽셀 단위로 측정된 이미지 면으로의 투영이라고 가정한다. 3D에서 2D로의 매핑은 perspective projection equation으로 제공된다.

여기서 람다는 depth factor, a_u 및 a_v는 초점 거리, u_0, v_0는 투영 중심의 이미지 좌표이다. 이러한 parameter를 intrincsic parameter라고 한다. 카메라의 시야가 45도보다 크면 방사형 왜곡의 효과가 표시 될 수 있으며, 2차(또는 그 이상) 다항식을 사용하여 모델링 할 수 있다. 완전 모델의 파생형은 [22]나 [63]와 같은 컴퓨터 비전 교과서에서 찾을 수 있다. p ~= [u, v,1]^T = k^-1[u,v,1]^T를 정규화된 이미지 좌표(Nomalized image coordinates)라고 한다. 이 좌표는 다음 섹션 전체에서 사용된다.
omnidirectional camera, spherical camera 생략
2-2. Camera Calibration
Calibration의 목표는 카메라 시스템의 intrinsic 및 extrinsic parameter를 정확하게 측정하는 것이다. 다안 카메라 시스템에서 extrinsic parameter는 카메라 간 상호 위치와 방향을 가지고 있다. 가장 널리 사용되는 방법은 planar checkerboard-like pattern을 사용하는 것이다. 보드의 사각형의 위치는 알고 있어야 하며, calibration parameter를 정확하게 계산하기 위해 카메라의 화각에 최대한 채워져 있고 다양한 위치와 방향에서 찍힌 여러장의 보드 사진을 촬영해야 한다. 그런 least-square minimization method를 이용하여 intrinsic 파라미터와 extrinsic 파라미터를 구해낸다. 입력 데이터는 보드 사각형 모서리의 2D 위치와 코너의 해당 픽셀 좌표이다.
많은 카메라 Calibration 툴박스가 MATLAB 및 C 용으로 고안되었다 최신 목록은 [68]에서 찾을 수 있다. 이 중 가장 많이 사용되는 MATLAB은 perspective camera와 omnidirectional 카메라에 대해서 [69]와 [70]~[72]에 나와 있다. perspective 카메라에 대한 카메라 Calibration의 C구현은 OpenCV [73]에서 찾을 수 있다.
2-3. Motion Estimation
Motion Estimation은 모든 이미지에 대해 수행되는 VO 시스템의 핵심 단계이다. 보다 정확하게는 Motion Estimation 단계에서 현재 이미지와 이전 이미지 사이의 카메라 모션이 계산된다. 이러한 모든 single 움직임을 연결하여 카메라와 agent의 full trajectory(카메라가 단단히 장착되어 있다고 가정)을 복구 할 수 있다. 이 섹션에서는 두 이미지 Ik-1과 Ik 간의 변환 T_k가 가 각각 순간 k-1과 k에서 두 세트의 해당 corresponding feature , 에서 계산 될 수 있는 방법을 설명한다. feature correspondence가 2D로 명시되었는지, 3D로 명시되었는지에 따라 세가지 방법으로 나뉜다.
2D to 2D: 이 경우 과 는 모두 2D 이미지 좌표로 지정.
3D to 3D: 이 경우 과 는 모두 3D 이미지 좌표로 지정. 이 방식은 Stereo 카메라 시스템 같은 걸 이용하 매 순간 마다 3D point를 triangulation 해야한다.
3D to 2D: 이 경우 는 3D로 지정되고과 는 이미지 에 대한 2D reprojection이다. monocular의 경우 3D 구조물은 인접한 두 개의 카메라 시점에 의해 triangulation될 것이다. 그런 다음에 세 번째 뷰의 2D 이미지 feature와 일치해야한다. monocular 방식에서는 적어도 세 개의 view가 일치해야 한다.
Feature는 점 또는 선이 될 수 있다. 일반적으로 구조화되지 않은(unstructured) 장면에서는 선이 없기 때문에 VO에서 포인트 feature를 사용한다. 포인트feature와 라인 feature에 대한 세가지 접근 방식의 심층 분석은 [74]에서 찾을 수 있다. 본 튜토리얼에서는 point feature만 다룬다.
2-4. 2D to 2D: Motion from Image Feature Correspondences
Estimating the Essential Matrix
보정된 카메라의 두 이미지 와 사이의 기하학적 관계는 소위 에센셜 행렬 E로 설명된다. E에는 다음과 같은 형태로 변환에 대해 알려지지 않는 배율까지 카메라 모션 parameter로 포함된다.

tk = [tx, ty, tz]^T 와

물결 기호는 곱셈 스칼라까지 등호가 유효함을 표시하는데 사용된다.

에센셜 행렬은 2D to 2D feature correspondence로 부터 계산할 수 있으며 rotation과 translation은 E에서 직접 추출할 수 있다. 2D to 2D 기반 Motion estimation의 주요 속성은 epipolar constraint 이다. 이는 p의 해당 특징점 p'~가 다른 이미지에 있는 선을 결정한다. 이 constraint는

로 공식화 될 수 있다. 여기서 p'~는 Ik와 같은 한 이미지에서의 feature 위치이고 p~는 다른 이미지의 해당 Feature 위치 이다. ~p 및 ~p'는 nomalize된 이미지의 좌표이다.
p~ 및 p0~은 정규화 된 이미지 좌표입니다. 단순화를 위해 다음 섹션 전체에서

형식의 정규화 된 좌표가 사용된다. (원근 카메라 모델 섹션 참조).
Last updated
Was this helpful?