논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

Real-time monocular visual odometry for on-road vehicles with 1-point RANSAC

[cite]10.1109/ROBOT.2009.5152255[/cite]

1. Introduction

비디오 입력만을 통한 움직임을 추정하는 알고리즘은 매우 유용하지만 실제로 적용된 것은 그리 많지 않습니다. 그 이유는 많은 연산량으로 인한 실시간 처리가 힘들다는 단점이 주된 이유입니다. 이겨서는 제한된 움직임 모델을 사용하여 움직임을 하나의 파라미터로 표현하고자 합니다. 이를 이용하면 단 한개의 대응 관계만을 이용하여 계산이 가능해집니다. 또한 그 결과에서 아웃라이어를 제거하는 방법을 이야기 하고자 합니다.

여기서 사용할 제한 조건은 바퀴가 달린 차량이라는 점입니다. 차량은 앞의 두 바퀴에 따라 다른 각도로 진행하게 되며 이 때 원을 그리며 Instantaneous Center of Rotation으로 운동하게 됩니다. 여기에 착안하여 이동에 대한 자유도를 2개로 줄일 수 있습니다. 바로 회전 각도와 반지름입니다. 그 뒤, 에피폴라 지오메트리를 만족하는 1개의 대응 피쳐를 계산하고 그들 중 아웃라이어를 제거하는 방법을 이야기하고자 합니다.

2. Related Work

하나의 카메라로부터 3D 구조와 카메라의 상대적 포즈를 구하는 문제는 컴퓨터 비전 분야에서 많은 연구가 이루어져 와있습니다. 흔히 Structure From Motion (SFM)이라는 것입니다. 여러 연구들이 있지만 두가지로 분류할 수 있는데 하나는 피쳐 기반의 방법들과 형태 기반의 방법으로 구분됩니다. 피쳐는 여러 프레임간 반복되어 나타나는 피쳐를 추적하여 이용하는 방버입니다. 형태 기반의 방법은 이미지의 일부나 전체의 픽셀 값 정보를 이용하는 방법입니다.

이 SFM은 로보틱스 분야에서 Simultaneous Localization and Mapping (SLAM) 문제와 관련이 있습니다. SLAM은 그동안 카메라보다는 다른 센서를 이용하는 경향이 있었지만 최근 하나의 카메라만으로도 연구가 이루어지고 있습니다.

3. Why do We Need Only One Point?

바퀴가 달린 차량이 rolling 움직임을 할 때, 바퀴 주변의 점은 원형 궤적으로 움직이게 됩니다. 이것은 ICR을 중심으로 돌게 되어있고 이것은 휠의 축에 대한 교점으로 구할 수 있습니다. 차량에서는 이에 대하여 Ackermann steering principle에 자세히 정리가 되어있습니다.

더 나아가 카메라가 차량에 설치되어있을 경우, 차량 또한 원형 움직임으로 표현할 수 있다고 생각할 수 있습니다. 직선 운동 또한 할 경우 무한 반지름을 가진 원형 운동으로 표현됩니다. 따라서 이제부터 움직임 모델은 circular motion으로 간주하고 이야기를 해나가도록 하겠습니다.

A. The Essential Matrix

평면에서 이루어지는 운동의 경우, 두 카메라에 대한 상대적인 포즈 관계는 3가지 파라미터로 나타낼 수 있습니다. 회전 각도 yaw $ \theta$와 위치 차이에 대한 polar coordinates $ ( \rho, \phi ) $ 입니다. 하나의 카메라만 사용할 경우 스케일 팩터에 대하여 알 수가 없으므로 여기서는 $\rho$를 1로 설정하고자 합니다. 따라서 이제 2개의 파라미터만이 남았습니다.

만약 카메라가 원형으로 움직인다고 하고, x축이 그 원의 접선이라고 하면 $\phi = \theta / 2 $로 계산할 수 있어 하나의 파라미터 만이 필요하게 됩니다.

이제 이들을 이용하여 essential 행렬을 표현하여 봅시다. R과 T를 우리가 구하고자 하는 회전과 이동 행령리라고 한다면 다음과 같이 표현됩니다.

$$R = \begin{bmatrix} \cos(\theta) &\ -\sin(\theta) &\ 0 \\
\sin(\theta) &\ \cos(\theta) &\ 0 \\ 0 &\ 0 &\ 1 \end{bmatrix},

T = \rho \cdot \begin{bmatrix} \cos(\phi) \\ \sin(\phi) \\ 0 \end{bmatrix}$$

만약 동일한 지점의 두 카메라 위치에서의 좌표를 $p, p'$이라고 한다면, 에피폴라 제한에 따라 다음과 같이 됩니다.

$$p'^T E p = p'^T [T]_{\times} R p = 0$$

앞의 두 식을 이용하여 대입하면 평면 위에서의 회전 운동에 대한 essential 행렬은 다음과 같이 정리됩니다.

$$E = \rho \cdot \begin{bmatrix} 0 &\ 0 &\ \sin(\theta/2) \\
0 &\ 0 &\ \cos(\theta/2) \\ \sin(\theta / 2) &\ \cos(\theta / 2) &\ 0 \end{bmatrix}$$

B. Recovering $\theta$

위의 essential matrix를 정리하면 다음과 같은 식을 얻을 수 있습니다.

$$\sin(\theta /2) \cdot (x'z + z'x) + \cos ( \theta / 2) \cdot (y'z - z'y ) = 0$$

하나의 점이 주어질 경우, $\theta$에 대해 이 식을 정리하면,

$$\theta = -2 \tan^{-1} ( \frac{y'z - z'y}{x'z + z'x})$$

와 같이 됩니다. m개 포인트가 주어진다고 하면, 위의 두 식을 이용하여 SVD를 이용하여 $\theta$를 풀어낼 수 있습니다.

C. Discussion on our Motion Model

위의 식은 사실, 카메라가 뒷바퀴 축 위에 있고 x축이 바퀴 축에 수직인 경우에만 성립이 됩니다. 하지만, 작은 스티어링 각을 가질 경우 회전 반경이 커짐으로써 이러한 가정에서 느슨해질 수가 있습니다. 따라서 바퀴 휠에 수직인 한 어디에든 위치하여도 된다는 가정으로 변경하고자 합니다.

또한 평면 운동과 원형 운동은 지역적으로만 성립하면 됩니다.

4. Outlier Removal: Two Approaches

아웃라이어를 제거하기 위해 두가지 방버을 제안합니다. 한가지는 RANSAC을 이용한 방법이고 한가지는 히스토그램을 이용한 방법입니다.

A. 1-Point RANSAC

Random Sample Consensus (RANSAC)은 아웃라이어가 있는 모델 추정에서 오래 사용되어온 방법입니다. RANSAC은 랜덤하게 선택된 샘플로부터 가설을 설정하고 이를 검증하는 과정을 거칩니다. 가설을 테스트할 수 N은 $ N = \frac{\log (1-p)}{\log (1 - (1 - \epsilon)^s)} $를 이용하여 계산이 되는데, 여기서 s는 계산에 필요한 최소 데이터 포인트, $ \epsilon $은 성공 확률입니다. 이전의 방법들은 6 점, 5점 방식을 이용하기 때문에 N의 크기가 컸지만, 여기서는 1개의 점만이 사용됨으로써 N의 수가 상당히 줄일 수 있었습니다. 여기서는 p = 99%, $\epsilon$ = 50% 를 사용하였습니다.

검증 과정에서는 회전 결과에 대하여 지오메트리 계산을 통하여 검증하도록 하였습니다.

B. Histogram voting

위의 방법보다 반복적이지 않은 더 효과적인 방법도 생각할 수 있습니다. 먼저 모든 대응 점에 대한 $\theta$를 계산하고 이에 대한 히스토그램 $H$을 생성합니다. 이 히스토그램을 분포를 살펴보면 좁은 피크 영역이 나타나게 되는데 이 중 가장 높은 부분을 $\theta* = \arg \max {H}$로 선택하도록 합니다. 실험 결과 이는 median 값을 사용해도 같은 값으로 나타났습니다.

5. Structure from Motion Algorithm

연속적인 프레임으로부터 움직임을 추정해야 할텐데, 여기서는 자유도 2인 원형 움직임 모델을 사용하엿으므로 자유도 3과 자유도 6인 방법들과의 결과를 비교해야 할 것입니다. 알고리즘의 순서를 정리하면 다음고 ㅏ같습니다.

  1. 프레임의 로딩
  2. 피쳐 대응 점을 추출
  3. 대응되는 픽셀 간 거리 계산, 90%의 픽셀들이 거리 3 이하라면 이동이 없는 것으로 간주
  4. 아웃라이어 제거
  5. 남은 인라이어에 대하여 SVD를 이용하여 움직임을 계산한다
  6. 인라이언에서 움직임을 3자유도, 6자유도 방법을 이용하여 다시 계산한다
  7. 움직임이 너무 클 경우, 계산된 파라미터들을 무시한다.
  8. 현재 차량에 속도를 이용하여 $ \rho = v \Delta t $ 로 계산한다.
  9. 삼각 함수를 통해 3D 구조를 재구성한다.
  10. 다음 프레임에 대하여 1부터 반복한다.

6. Results

실제 차량에 카메라를 달고 Zurich 중심가를 촬영하여 실험을 진행하였습니다. 피쳐는 SIFT, Harris, KLT 등으로 추출하여 비교하였는데, 실제로 KLT가 제일 나은 성능을 보여주었습니다. 직접적인 원인은 피쳐가 이미지에서 골고루 분포하느냐로 예상됩니다. 아웃라이어를 거르는데 영향이 있기 때문입니다. 피라미드를 사용하는 KLT는 영상 전체에 골고루 분포할 가능성이 높습니다.

하지만 실제로 1-Point 알고리즘과 평면 움직임 모델을 비교하면 평면 움직임 모델이 성능이 좋습니다. 그 이유는 피쳐의 분포도 있지만, 아주 적은 피쳐들만이 제공될 경우, 실패할 가능성이 있습니다.

가장 좋은 결과는 KLT릉 이용하고 평면 이동 모델을 사용한 것입니다.


Add a Comment Trackback