StereoScan: Dense 3d Reconstruction in Real-time
[cite]10.1109/IVS.2011.5940405[/cite]
1. Introduction
로보틱스나 자율 주행 차량에 레이저를 많이 사용하고 있습니다. 그 이유는 실시간으로 3D 환경을 측정하기에 용이하기 때문입니다. 전통적인 컴퓨터 비전의 이미지를 이용한 방법들은 노이즈의 영향을 받아 물체의 검출이나 추적에 어려움을 겪고 있습니다.
이러한 관점에서 높은 해상도의 스테레오 영상만을 이용하여 고정된 씬에서의 정확한 3D 재구성을 소개하고자 합니다. 하나의 CPU에서 메가픽셀 단위의 센서를 실시간으로 처리할 수 있을 정도로 빠릅니다.
2. Relasted works
3. 3D Reconstruction Pipeline
여기서 소개하는 3D 재구성 방법은 4가지 단계로 구성됩니다.
- Sparse feature matching
- egomotion estimation
- dense stereo matching
- 3d reconstruction
여기서는 CPU가 2개의 코어를 가지고 있다고 가정하고 2개의 스레드를 이용하여 각각 1, 2 / 3, 4 단계를 수행하도록 하였습니다. 그 결과 1, 2단계는 25 fps, 3, 4단계는 3~4 fps 정도의 속도를 보였습니다.
3D 재구성을 위하여는 스테레오 카메라들이 서로 캘리브레이션 되어있고 이미지의 왜곡은 제거된 상태를 가정하였습니다.
A. Feature Matching
이 알고리즘의 입력은 4개의 영상을 입력으로 받습니다. 좌, 우 카메라에 대하여 연속적인 두개의 프레임이 필요합니다. 안정적으로 특징 위치를 찾기 위하여 먼저 5 * 5 크기의 blob, corner 마스크로 필터링 하였습니다. 다음 각 필터링된 이미지에 non-maximum, non-minimum-suppression을 수행한 뒤 남아있는 점들을 4개의 클래스로 분류하여 피쳐 후보로 등록합니다. 4개의 클래스를 각각 blob min/max, corner min/max 입니다. 계산을 빠르게 하기 위해 이후 매칭 작업은 클래스끼리만 수행하도록 합니다.
순서가 없는 이미지에서의 재구성 과정과는 달리 여기에서는 카메라 움직임이 부드럽다는 가정에서 출발하여 SURF와 같은 스케일, 회전 불변 특징들을 대체하고자 합니다. 두개의 특징 점이 주어지면, 11 * 11 크기의 가로, 세로 Sobel 필터를 적용 한 이미지에서의 sum of absolute differences (SAD)를 계산하고자 합니다. 속도를 높이기 위해 Sobel 결과를 8비트의 크기를 갖도록 양자화 한 뒤, 16개의 위치에 대하여만 SAD를 계산하였습니다. 따라서 SAD는 16바이트의 크기를 가지므로 두번의 SSE 연산(가로, 세로)을 이용하여 계산이 가능하였습니다.
Egomotion에 대해서는, 특징 점들이 모든 이미지에서 올바르게 매칭되어야 한다는 점을 가정하였습니다. 여기에서는 원형 매칭 방법을 사용하였는데, 먼저 왼쪽 현재 프레임과 왼쪽 이전 프레임 간의 매칭 쌍을 구한 뒤, 왼쪽 이전 프레임에서 오른쪽 이전 프레임의 매칭을 구합니다. 같은 방법으로 오른쪽 이전 프레임과 오른쪽 현재 프레임을 거쳐서 마지막으로 원래의 왼쪽 현재 프레임으로 돌아왔을 때 같은 1픽셀 이내로 오차가 있다면 이들은 올바르게 매칭된 것으로 판단합니다.
Sporadic outlier는 주변의 점들에 대하여 2D Delaunay triangulation 방법을 이용하여 검증하였습니다.
이러한 최적화를 사용하였어도 특징점 자체가 많아지면 많은 시간이 걸리므로, 더 효과적인 아이디어를 적용하였습니다.
스테레오 매칭에서 먼저 피처의 일부 서브셋에 대해서만 매칭 작업을 한 뒤, 이미지를 50 * 50으로 나눈 셀 내에 각 피처를 할당합니다. 다음 각 셀에서 가장 작은 차이와 큰 차이 값을 구한 뒤, 마지막 탐색 공간에서 이들을 제외하는데 기준으로 사용됩니다.
B. Egomotion Estimation
이렇게 구해진 매칭 결과로부터 카메라 모션을 구하고 칼만 필터를 이용하여 속도를 예측합니다.
먼저 200 ~ 500개의 피쳐만을 남기고 나머지는 제거 한 뒤, 이미지 전체에 대해 균일하게 뿌립니다. 다음 triangulation을 이용하여 특징 점을 투영합니다. 3차원 점에서의 점 $X$를 왼쪽 카메라의 이미지로 변환하는 함수를 $ \pi^{(l)}(X; r, t) : R^3 \rightarrow R^2 $라고 하여봅시다. 오른쪽도 마찬가지로 $\pi^{(r)}$이라고 합시다. 이들은 구해진 파라미터를 통해 투영하면 올바르게 가야할 것입니다. 이러한 성질을 반영하여 아래의 식을 Gauss-Newton 최적화를 이용하여 반복적으로 풀어냅니다.
$$\sum_{i=1}^N || x_i^{(l)} - \pi^{(l)}(X_i; r, t) || + || x_i^{(r)} - \pi^{(r)}(X_i; r, t) ||$$
이 과정에서 Jacobian을 사용하여야 하며 r과 t의 초기값은 0으로 시작합니다. 보통 4-8번의 반복으로 수령할 수 있엇습니다. 우리는 이 과정을 RANSAC으로 둘러싸 최종적으로 파라미터를 결정하였습니다.
이제 속도를 계산합니다. 표준 칼만 핕러를 이용하여 속도를 구하고 이 속도로부터 r, t를 계산하였습니다.
C. Stereo Matching
Disparity map의 생성을 위해서는 ELAS 소스를 사용하였습니다.
D. 3D Reconstruction
점 기반 모델이기에 매 프레임마다 많은 수의 데이터가 들어옵니다. 가장 쉬운 방법은 이들음 프로젝션한 뒤, 모든 점들은 다시 투영하는 것입니다. 하지만 프레임이 계속될 수록 점들을 모두 가지고 있는 것도 비 효율적인지라 다음 프레임에서 이적 프레임의 피처가 나오면 그것을 그대로 사용하기로 하였습니다.