300x250

Xiang Gao, Tao Zhang 저자의 'Introduction to Visual SLAM from Theory to Practice' 책을 통해 SLAM에 대해 공부한 내용을 기록하고자 한다.

책의 내용은 주로 'SLAM의 기초 이론', 'system architecture', 'mainstream module'을 다룬다.

 

포스팅에는 기초 이론만 다룰 것이며, 실습을 해보고 싶다면 다음 github를 참조하자.

 

https://github.com/gaoxiang12/slambook2

 

GitHub - gaoxiang12/slambook2: edition 2 of the slambook

edition 2 of the slambook. Contribute to gaoxiang12/slambook2 development by creating an account on GitHub.

github.com

 

Visual Odometry 이전 과정인 feature extraction 및 feature matching 과정에 대한 내용은 다음 글을 참조하자.

 

https://jjuke-brain.tistory.com/entry/Visual-Odometry-1-ORB-Feature-Feature-Matching

 

Visual Odometry (1) - Feature Method, ORB Feature, Feature Matching

Xiang Gao, Tao Zhang 저자의 'Introduction to Visual SLAM from Theory to Practice' 책을 통해 SLAM에 대해 공부한 내용을 기록하고자 한다. 책의 내용은 주로 'SLAM의 기초 이론', 'system architecture', 'ma..

jjuke-brain.tistory.com

 

 

 

 

 

이전 포스팅에서 feature extraction, feature matching에 대해 알아보았다.

Feature matching 결과는 카메라의 motion을 추정하는 데 쓰인다.

Motion estimation 방법은 어떤 카메라를 사용하는지 혹은 카메라의 설정에 따라 3가지로 나뉜다고 하였다.

그중 이번에는 2D-2D case를 다루어볼 것이다.

 

 

 

2D-2D: Epipolar Geometry

 

 

 

 

Epipolar Constraints

 

두 이미지에서 매칭된 feature point 쌍의 일치성을 통해 두 프레임 간에 카메라가 어떻게 움직였는지를 알아낼 수 있다.

간단한 예시를 통해 알아보자.

 

Epipolar Constraints

 

목표는 image plane I1,I2 사이에 카메라의 motion을 찾는 것이다.

이때 카메라의 motion은 R,t로 생각할 수 있다. (자세한 내용은 링크를 참조하자.)

각 image를 얻을 때의 카메라의 중심은 O1,O2이고, I1,I2에서 서로 일치하는 feature point는 각각 p1,p2이다. 매칭이 제대로 됐다면, 두 점은 서로 같은 점의 projection일 것이다.

P는 직선 O1p1과 직선 O2p2가 교차하는 3차원 상의 점이다.

 

이때, 세 점 O1,O2,P가 만드는 평면을 epipolar plane이라 한다.

그리고 직선 O1O2baseline이라 하고, 이 basline과 image plane I1,I2가 만나는 점을 각각 e1,e2로 두며, 이를 epipole이라 한다.

그리고 polar plane과 image plane이 교차하는 직선 l1,l2epipolar line이라 한다.

 

첫 번째 frame에서, 반직선 O1p1상의 모든 점이 같은 픽셀 p1에 투영된다. 즉, point P가 직선 O1p1 상의 어딘가에 존재하고 있다는 것을 말한다.

P의 위치를 모른다 가정하고 두 번째 frame을 보면, epipolar line인 e2p2는 point PI2에 투영될 수 있는 위치를 나타낸다.

그런데 feature matching을 통해 p2의 위치를 결정했으므로, P의 위치를 알 수 있게 된다.

이를 통해 최종적으로 카메라의 움직임도 추론하게 될 것이다.

 

 

 

Epipolar Constraint 유도 과정

 

첫 번째 프레임에서의 P의 위치를 다음과 같이 나타내자.

 

P=[X,Y,Z]T

 

Pinhole camera model을 사용하여 다음과 같이 pixel position을 나타낼 수 있다.

(Pinhole camera model의 자세한 내용은 링크를 참조하자.)

 

s1p1=KP,s2p2=K(RP+t)

 

이때 K는 카메라의 intrinsic matrix, R,t는 두 프레임 사이에서 카메라의 움직임이다. (첫 번째에서 두 번째 프레임으로의 transformation은 정확히 R21,t21로 표현한다. 물론 Lie Algebra 형태로도 나타낼 수 있다.)

또한, Homogeneous coordinate를 사용하면 벡터에 0이 아닌 상수를 곱해도 원래 벡터와 같게 된다. 따라서 projection relationship을 나타내기 좋다. 이를 'equal up to a scale'이라고 표현하고, 수식으로 나타내면 다음과 같다.

 

spp

 

이를 pinhole camera model에 적용하면 다음과 같이 표현이 가능하다.

 

p1KP,p2K(RP+t)

 

두 픽셀 p1,p2normalized plane 상의 좌표x1,x2라 하면 x1=K1p1,x2=K1p2를 만족하고, 이를 식에 대입하면

 

x2Rx1+t

 

양변을 touter product하면, (즉, 좌측에 t를 곱해주면) 자신과의 외적은 영벡터이므로 다음과 같아진다.

 

tx2tRx1

 

다시 왼쪽에 x2T를 곱해주면

 

x2Ttx2x2TtRx1

 

이와 같은 형태의 식을 유도할 수 있다.

여기서 좌변의 tx2tx2 두 벡터에 직교하는 벡터이므로 x2와의 내적 결과는 0일 것이다.

이에 따라 식의 좌변이 strictly zero (정확하게 0)이 되므로, 0이 아닌 상수를 곱해도 여전히 0이 되고, 따라서 symbol을 =으로 바꿀 수 있다.

따라서 다음 식을 얻게 되고,

 

x2TtRx1=0

 

p1,p2를 다시 대입하면 다음 식을 얻는다.

 

p2TKTtRK1p1=0

 

위 두 식 모두 epipolar constraint이다.

 

 

 

Epipolar Constraint의 특징

 

기하학적으로 보면, O1,O2,P는 coplanar(같은 평면 위의 점)이다.

또한 식에서도 알 수 있듯이, epipolar constraint는 translation과 rotation 둘 다 encoding한다.

그리고 이 식에서 나타나는 중요한 두 matrix를 정의한다.

  1. Essential Matrix : E=tR
  2. Fundamental Matrix : F=KTEK1

 

따라서 epipolar constraint를 위 matrix로 정의하면 다음과 같다.

 

x2TEx1=p2TFp1=0

 

Epipolar constraint를 통해 우리는 두 matching point의 공간적인 관계를 알 수 있다.

따라서 camera pose estimation 문제는 다음 두 단계로 간단히 요약할 수 있다.

  1. 매칭된 point의 픽셀 위치에 기반하여 E 혹은 F를 찾는다.
  2. 찾은 EFR,t를 찾는다.

 

EF의 차이점은 식에서 internal parameter의 존재 유무이다.

SLAM task에서는 internal parameter는 알고있다고 가정하기 때문에, 더 간단한 형태인 E를 많이 사용한다.

그럼 essential matrix에 대해 좀 더 자세히 살펴보자.

 

 

 

 

Essential Matrix E

 

정의에 따르면, essential matrix는 크기가 3 × 3인 행렬이고, E=tR을 만족한다. 즉, 9개의 미지수가 존재한다.

또한 다음과 같은 특징을 갖는다.

  • 서로 다른 scale에 대한 equivalence
    • Essential matrix는 epipolar constraint에 의해 정의되는데, epipolar constraint는 '... = 0 (equal-to-zero)' 형태의 식이므로 0이 아닌 상수를 곱해도 성립한다.
    • 따라서 scale이 달라져도 E는 동일하다.
  • Internal properties
    • 정의에 따라 Esingular value는 [σ,σ,0]T의 형태를 갖는다. (자세한 증명은 생략한다.)
  • Translation과 rotation은 3DoF를 갖기 때문에, tR인 essential matrix는 6DoF를 갖게 된다. 하지만, scale에 대한 equivalence 성질을 가지므로 5DoF를 갖는다.

 

Essential matrix E가 5DoF를 가진다는 것은 E를 구하기 위해 5쌍의 points가 필요하다는 것을 의미한다.

하지만, internal property가 nonlinear이기 때문에, E를 구할 때에는 scale equivalence만 고려하여 매칭된 점의 쌍 8개를 사용한다. 즉, 총 9개 미지수(3 × 3 matrix)를 구해야 하지만 scale equivalence를 고려하여 하나를 뺀 8개 필요하다는 것이다.

이를 eight-point-algorithm이라 한다.

 

 

 

Eight-point method

 

Eight-point-algorithmE선형적 성질만 사용하므로 선형대수를 사용할 수 있다.

 

매칭된 점 한 쌍이 있다고 가정하자. 이들의 normalized coordinate는 각각 x1=[u1,v1,1]T, x2=[u2,v2,1]T이다.

Polar constraint에 대입하면 다음을 만족한다.

 

(u2v21)(e1e2e3e4e5e6e7e8e9)(u1v11)=0

 

E를 벡터 형태로 e=[e1,e2,e3,e4,e5,e6,e7,e8,e9]T로 나타내면, epipolar constraint는 e에 대한 linear form으로 다음과 같이 쓸 수 있다.

 

[u2u1,u2v1,u2,v2u1,v2v1,v2,u1,v1,1]e=0

 

i번째 feature point 쌍을 (ui,vi)로 둔다면, 8개의 point 쌍에 대한 식을 다음 linear equation system으로 나타낼 수 있다.

 

(u21u11u21v11u21v21u11v21v11v21u11v111u22u12u22v12u22v22u12v22v12v22u12v121u28u18u28v18u28v28u18v28v18v28u18v181)(e1e2e3e4e5e6e7e8e9)=0

 

위 linear equation system의 계수행렬(coefficient matrix)은 2D feature point의 위치(좌표)로 구성되며, 사이즈는 8 × 9이다.

e는 이 행렬의 null space에 위치하며(즉, 계수행렬을 C라 하면 Ce=0을 만족한다는 의미이므로 위 식과 의미가 같다), coefficient matrix가 full rank(8)일 경우 null space의 차원이 1이 되면서 e는 직선이 된다.

이 말은 곧 e의 scale equivalence성질과 일맥상통한다. 8쌍의 matching point로 구성된 행렬의 rank가 8인 경우, E의 요소들은 위 식에 의해 유일한 해를 얻는다는 의미이기 때문이다.

 

Internal property를 굳이 사용하여 5DoF를 갖게 될 수도 있으나, 계산이 매우 복잡해지고, 실제로는 수많은 feature points 쌍을 얻을 수 있으므로, 8개 쌍을 얻을 때에 비해 5개 쌍을 얻을 때가 큰 이점이 없다.

따라서 선형으로 비교적 간단히 구할 수 있기 때문에 일반적으로 eight-point-algorithm을 사용한다.

 

다음으로는 드디어 카메라의 움직임, 즉 R,t를 구하는 방법을 알아볼 것이다.

 

 

 

 

Essential matrix로부터 카메라의 움직임 구하기

 

E로 카메라의 움직임을 구하는 핵심 아이디어는 바로 SVD(Singular Value Decomposition)이다.

E의 SVD는 다음과 같다.

 

E=UΣVT

 

여기서 U,V는 orthogonal matrices, Σ는 singular value matrix이다.

Einternal property에 의하면 Σ=diag(σ,σ,0)이고, SVD를 통해 어떤 E에 대해서도 다음 두 식을 만족하는 t,R 행렬을 얻을 수 있다.

 

{t1=URZ(π2)ΣUT,R1=URZT(π2)VTt2=URZ(π2)ΣUT,R2=URZT(π2)VT

 

여기서 RZ(π2)는 Z축에 대해 90 회전하여 얻은 rotation matrix를 나타낸다.

E=E이므로, t에 -를 붙여도 같은 결과를 얻게 되므로, SVD 과정을 통해 총 4가지 가능한 해를 얻게 된다.

 

Four Solutions when Decomposing the Essential Matrix

 

빨간 점으로 표시된 projected point(p1,p2)를 알고 있으며, 이를 통해 카메라의 움직임을 구하는 과정을 알아보고 있다.

위와 같이 4가지 가능한 경우가 생기는데, 4가지 중 depth값(distance)이 두 카메라의 중점 O1,O2에서 모두 양수인 경우는 첫 번째 그림이 유일하다. 상식적으로 Image plane은 카메라 앞에 생기므로, 최종 solution은 (1)이다.

 

그런데, linear equation으로 구한 E는 internal property를 만족하지 않을 수 있다. (즉, singular value matrix의 형태가 [σ,σ,0]T의 형태가 아닐 수 있다.)

이 때에는 Σ를 직접 조정하여 위와 같은 형식이 되도록 한다.

 

E=Udiag(σ1+σ22,σ1+σ22,0)VT

 

기하학적으로 보면, linear equation으로 구한 해를 실제 E가 위치하는 manifold 상으로 투영시키는 것을 나타낸다.

또한, E는 scale equivalence 특성을 가지므로, singular value matrix로 diag(1,1,0)을 취하면 더 간단히 구할 수 있다.

 

 

 

 

Homography

 

Fundamental matrix와 essential matrix 말고도 two-view geometry에서 또다른 common matrix가 있는데, 바로 homography matrix H이다.

이는 두 평면간의 mapping 관계를 나타낸다. Image formation 중 Perspective Transformation에서 이 행렬을 본 적이 있을 것이다.

(이미지의 formation의 종류를 알고싶다면 링크를 참조하자.)

 

Scene에서의 feature point가 모두 같은 평면에 존재할 때, (예를 들어 wall, ground 등) 이 행렬을 사용하여 카메라의 motion을 추정할 수 있다.

 

표현은 약간 다르지만, OpenCV 공식 문서에 소개된 다음 그림을 참조하자.

 

Homography

 

이미지 I1,I2에서 매칭된 feature point p1,p2가 plane P 상에 존재한다고 가정하면, normal vector n에 대해 다음 평면방정식이 성립한다.

 

nTP+d=0

nTPd=1

 

Pinhole camera model에 따라 다음이 성립한다.

 

p2K(RP+t)K(RP+t(nTPd))K(RtnTd)PK(RtnTd)K1p1

 

여기서 K(RtnTd)K1PH로 정의한다. 이에 따라 p1,p2간의 transformation을 다음과 같이 간단히 나타낼 수 있다.

 

p2Hp1

 

H는 perspective transformation, 즉 transformation 중 가장 일반적인 형태이다. 즉, rotation, translation, plane coefficients 등의 parameter를 갖는다.

또한 3 × 3 크기를 갖고, essential matrix에서와 마찬가지로 matching points쌍을 통해 이 행렬을 계산한 후 SVD를 적용하여 rotation과 translation을 찾을 수 있다.

 

위 식을 풀어쓰면 다음과 같다.

 

(u2v21)(h1h2h3h4h5h6h7h8h9)(u1v11)

 

Homogeneous coordinates에서 non-homogeneous coordinates로 변환하는 과정을 살펴보자.

 

(u2v21)(h1u1+h2v1+h3h4u1+h5v1+h6v1h7u1+h8v1+h9)

 

{u2=h1u1+h2v1+h3h7u1+h8v1+h9v2=h4u1+h5v1+h6h7u1+h8v1+h9

 

equal sign이 이므로, H 행렬 또한 0이 아닌 상수를 곱할 수 있다.

보통 h9 값이 0이 아니라면 이 값을 1로 만들어 normalize해준다.

이에 따라 정리하면,

 

{h1u1+h2v1+h3h7u1u2h8v1u2=u2h4u1+h5v1+h6h7u1v2h8v1v2=v2

 

Matching points 한 쌍이 두 개의 constraints를 구성할 수 있으므로, 8DoF를 갖는 H매칭된 feature point 쌍 4개로 다음 linear equation system을 풀어서 구할 수 있다.

 

(u11v111000u11u21v11u21000u11v111u11v21v11v21u12v121000u12u22v12u22000u12v121u12v22v12v22u13v131000u13u23v13u23000u13v131u13v23v13v23u14v141000u14u24v14u24000u14v141u14v24v14v24)(h1h2h3h4h5h6h7h8)=(u21v21u22v22u23v23u24v24)

 

이 식은 위의 E (essential matrix)에서와 마찬가지로 H 행렬을 vector로 간주하여 풀어 쓴 것이다. 이러한 방법을 Direct Linear Transform (DLT)라 한다.

위 식에서 coefficient matrix가 나오므로 SVD를 통해 R,t를 구할 수 있다.

4가지 solution이 나오게 되는데, depth 값이 모두 양수인 경우를 통해 2가지를 제외시키고, scene plane의 normal vector n을 알고 있으므로 이를 통해 최종 해를 구할 수 있다. (만약 scene plane이 camera plane과 평행하다면 normal vector n1T일 것이다.)

 

 

Feature point들이 모두 같은 평면에 위치하는 경우, 카메라는 pure rotation만 하게 되고, fundamental matrix F의 DoF가 줄어들어 degeneration이 발생한다. 즉, eight-point method만 사용한다면 degeneration 문제가 발생한다.

(Degeneration이란, 실제 데이터에 존재하는 noise에 의해 redundant freedom이 결정되는 현상을 말한다.)

 

따라서 eight-point method와 homography를 둘 다 사용하여 motion을 추정해보고, 더 작은 reprojection error를 갖는 결과를 최종적으로 선택해야 할 것이다.

728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기