DOI QR코드

DOI QR Code

A Study on Estimating Skill of Smartphone Camera Position using Essential Matrix

필수 행렬을 이용한 카메라 이동 위치 추정 기술 연구

  • 오종택 (한성대학교 전자정보공학과) ;
  • 김호겸 (한성대학교 전자정보공학과)
  • Received : 2022.07.04
  • Accepted : 2022.12.09
  • Published : 2022.12.31

Abstract

It is very important for metaverse, mobile robot, and user location services to analyze the images continuously taken using a mobile smartphone or robot's monocular camera to estimate the camera's location. So far, PnP-related techniques have been applied to calculate the position. In this paper, the camera's moving direction is obtained using the essential matrix in the epipolar geometry applied to successive images, and the camera's continuous moving position is calculated through geometrical equations. A new estimation method was proposed, and its accuracy was verified through simulation. This method is completely different from the existing method and has a feature that it can be applied even if there is only one or more matching feature points in two or more images.

이동하는 스마트폰이나 로봇의 단안 카메라를 이용하여 연속적으로 촬영된 이미지들을 분석하여 카메라의 위치를 추정하는 것은 메타버스나 이동 로봇, 사용자 위치 서비스에서 매우 중요하다. 지금까지는 PnP 관련 기술들을 적용하여 위치를 계산하였는데, 본 논문에서는 연속된 영상들에 적용된 에피폴라 기하학에서의 필수 행렬을 이용하여 카메라의 이동 방향을 구하고 기하학적인 수식 계산을 통해 카메라의 연속적인 이동 위치를 추정하는 방법을 새롭게 제안하였고, 시뮬레이션을 통해 그 정확성을 검증하였다. 이 방식은 기존의 방식과는 전혀 다른 방법으로 두 개 이상의 영상에서 하나 이상의 일치되는 특징점만 있어도 적용할 수 있는 특징이 있다.

Keywords

Ⅰ. 서론

인간의 눈과 같이 두 개의 카메라(stereoscopic camera)를 사용하면 동시에 두 장의 사진을 얻을 수 있고, 두 개의 카메라 사이의 거리에 따라서 동일한 물체가 두 장의 사진에 다르게 찍히므로 물체와 카메라사이의 거리를 알 수 있다[1,2]. 그러나 간격이 충분히 먼 두 개의 카메라를 장착하면 장치의 크기가 커지고 비용이 증가하는 문제가 있으므로 스마트폰이나 소형 이동 로봇의 경우에는 단안 카메라(monocular camera)를 이용해야 한다. 그러나 단안 카메라로 촬영한 한 장의 영상을 이용해서는 물체와의 거리는 알 수 없고 가까이 있는 작은 물체와 멀리 있는 큰 물체도 구분할 수 없으므로, 이동하는 단안 카메라에서 연속적으로 촬영된 영상들을 동시에 활용해야 한다.

이동하는 단안 카메라의 영상들을 이용하여 카메라의 위치를 추정하는 연구들이 매우 활발하게 진행되고 있다[3]. 스마트폰이나 로봇의 위치를 추적하던지, 주변에 대한 3차원의 점 지도를 그리는 것은 상호 의존적이다. 즉 두 장의 영상에서, 두 번째 영상을 촬영한 카메라의 위치를 추정하면서 동시에 두 개의 영상에 공통으로 찍힌 3차원 물체의 위치를 추정한다[4]. 이 두 가지 작업 결과의 정확도가 서로 영향을 미친다. 따라서 두 장의 사진으로 추정한 3차원 물체 점에서 다시 두 개의 카메라 위치로 재 투영(re-projection)시킨 두 개의 영상 점과, 원래의 두 개의 영상 점과의 위치 차이(재 투영 오차)를 줄이는 것이 최적화의 목표가 된다[5].

카메라 원점(camera center)의 위치와 카메라 렌즈의 지향 방향을 카메라 포즈(camera pose)라고 하고, 카메라로 동영상을 촬영하면서 이동을 하면 연속적으로 정지 영상들이 입력되는데 이들을 처리하여 카메라의 위치를 추적하는 것이다. 이 과정에서 주변의 3차원 물체에 대한 3차원 좌표를 추정하는 것을 로컬 맵핑(local mapping)이라고 한다[6].

연속으로 입력된 정지 영상들로 카메라 포즈를 추정하는 방법에는 주로 Perspective-n-Point(PnP) 방법이 사용된다[7,8]. 이 방법은 3차원 물체 점들 X의 좌표를 알고 이에 해당하는 2D 영상 점들 X의 좌표를 알면 다음의 방정식을 계산하여 크기가 3 × 4인 카메라 행렬(camera matrix) P를 구하는 것이다. 카메라 행렬은 카메라의 회전 행렬 R과 이동 위치 t로 구성되므로, 이동한 카메라의 위치와 지향 방향을 알 수 있다. 여기서K는 카메라의 고유 행렬(intrinsic matrix)이고, pij는 P 행렬의 원소이다.

x=PX=K[R t]X       (1)

\(\begin{aligned} x_{i} & =\frac{p_{00} X_{i}+p_{01} Y_{i}+p_{02} Z_{i}+p_{03}}{p_{20} X_{i}+p_{21} Y_{i}+p_{22} Z_{i}+p_{23}} \\ y_{i} & =\frac{p_{10} X_{i}+p_{11} Y_{i}+p_{12} Z_{i}+p_{13}}{p_{20} X_{i}+p_{21} Y_{i}+p_{22} Z_{i}+p_{23}}\end{aligned}\)       (2)

3차원 물체 점들의 좌표와 한 장의 2차원 영상에서 해당되는 영상 점들의 좌표를 계산하여 카메라 포즈를 구하는 방법에는 Perspective Three-Point Problem(P3P), Algebraic Solution to P3P(AP3P), Efficient Perspective n-Point Problem(EPNP), Infinitesimal Plane-Based Pose Estimation(IPPE) 등 계산 조건에 따라 여러 가지가 있다[9].

그러나 영상의 촬영 과정에서 화소 값의 크기 오차나 픽셀 단위로 위치의 양자화 오차, 잡음 등의 다양한 오류가 발생하며 3차원 물체 점의 좌표 추정에서도 오차가 있으므로, (2)의 방정식의 계산 값에서 오차의 발생이 불가피하다.

한 편 두 장의 영상에 에피폴라 기하학(Epipolar Geometry)를 적용하여 기본 행렬(Fundamental matrix)이나 필수 행렬(Essential matrix)를 구하고 이를 회전 행렬 R과 이동 위치 t로 분리하여 카메라 포즈를 구할 수 있다[10]. 그러나 3차원의 XYZ 세계 좌표계에서 이동 위치 t는 각각의 축으로 이동 방향에 따라 tx, ty, tz로 표시되는데, 실제 카메라 원점과 물체 점과의 거리를 모르므로, 이동위치의 놈(norm)은 항상 || t ||=1로 표시된다. 따라서 첫 번째 영상에 대한 카메라 위치를 (0, 0, 0)으로 세계 좌표계의 원점이라고 할 때, 두 번째 영상에 대한 카메라 원점의 위치는 실제 거리의 일정 비율로 계산되어 이동 궤적 크기의 기준이 된다. 그러나 || t ||가 항상 1이므로 세 번째 영상에 대한 카메라 위치를 첫 번째 영상 또는 두 번째 영상을 기준으로 계산할 수 없다.

이런 한계를 해결하기 위한 연구 결과가 발표되었으며[11], 여기서는 필수 행렬을 이용하여 카메라 원점의 이동거리 또는 이동 위치를 계산하는 새로운 방식이 제안되었고, 그래픽 툴로 그 원리가 확인되었다. 이 방식은 기하학적으로 이동 위치를 구하는 방식으로 카메라 원점들이 동일 평면상(coplanar)이거나 동일 선상(co-linear)에 있어도 적용이 가능하며, 3차원 물체의 점들이 동일 평면상에 있어도 사용할 수 있다.

본 논문에서는 [11]에서 제안된 방식에 대한 수학적 모델을 정립하고 계산 수식을 유도하였으며, 시뮬레이션을 통해서 그 정확도를 검증하였다.

Ⅱ. 필수 행렬을 이용한 카메라 포즈 추정법

1. 에피폴라 기하학

컴퓨터 비젼에서 주로 사용하는 카메라 모델은 핀 홀 카메라 모델이다[12]. 3차원 세계 좌표계 XYZ에서 원점은 카메라 중심 C이고, 카메라는 Z 축 방향이며 이것을 광축(Optical Axis)라고 한다. 또한 Z 축 방향으로 초점거리 f의 위치에 Z 축 방향과 수직으로 영상 면(image plane)이 있고, 3차원 물체의 점(3D 물체 점) X를 C를 향해서 영상 면에 투영시킨 것이 2D 영상 점(image point) x이다. 이 때 3D 물체 점 X의 위치 좌표와 2D 영상 면에서의 영상 점 x의 위치 좌표의 관계는 다음의 동차 좌표계(homogeneous coordinate)의 식으로 표시할 수 있다[13].

OTNBBE_2022_v22n6_143_f0001.png 이미지

그림 1. 핀 홀 카메라 모델

Fig. 1. Pin hole camera model

\(\begin{aligned}x=K[I \mid 0]\left[\begin{array}{cccc}r_{11} & r_{12} & r_{13} & t_{x} \\ r_{21} & r_{22} & r_{23} & t_{y} \\ r_{31} & r_{32} & r_{33} & t_{z} \\ 0 & 0 & 0 & 1\end{array}\right]\left[\begin{array}{c}X \\ Y \\ Z \\ 1\end{array}\right]=K[R \mid \boldsymbol{t}] X)\end{aligned}\)       (3)

여기서 rij는 회전 행렬 R의 원소이다.

한편, 그림 2와 같이 핀 홀 카메라 모델을 이용하여 한 장 이상의 2D 영상을 동시에 고려할 수 있으며, 3D 물체 점과 해당되는 2D 영상 점과의 기하학적인 관계를 에피폴라(Epipolar) 기하학이라고 한다[13]. 카메라의 포즈를 추정하기 위해서는 여러 쌍의 3D 물체 점과 해당되는 2D 영상 점의 위치 좌표를 알아야 한다. PnP 방법의 경우에는 한 장의 영상과 해당되는 3D 물체 점의 좌표가 있어야 하고, 에피폴라 기하학을 이용하는 경우에는 2장 이상의 영상이 있어야 한다.

OTNBBE_2022_v22n6_143_f0002.png 이미지

그림 2. 에피폴라 기하학

Fig. 2. Epipolar geometry

그림 2에서, 임의의 3D 물체 점 X에 대해서 2개의 카메라 원점 C1과 C2에서의 각각의 영상 면에 투영된 2D 영상 점을 각각 x1과 x2라고 한다. 에피폴라 기하학으로 이 두 점과 기본 행렬(Fundamental Matrix) F에 대한관계식을 유도하면 다음 식(4)과 같다[11].

x2TFx1 = 0       (4)

F 행렬에서 카메라 내부 파라미터 행렬 K가 제거된 기본 행렬(Essential Matrix) E를 구할 수도 있다. 또한 E=t × R의 관계이므로 이 식을 분해하여 이동 위치 t와 회전 행렬 R을 구할 수 있다.

그러나 위에서 구한 카메라 회전 매트릭스 R을 이용하여 카메라의 Euler 회전각도 yaw- pitch-roll를 정확히 구할 수 있으나, 카메라 원점의 이동 위치 tX, tY, tZ는 각각의 비율만을 구할 수 있으므로 카메라 원점의 이동 방향은 알 수 있으나, 이동 거리나 위치는 알 수 없는 문제가 있다. 따라서 3장 이상의 2D 영상으로 연속적으로 이동하는 카메라의 원점을 추적할 때 적용할 수 없게 된다.

2. 이동 방향을 이용한 카메라 포즈 추정법

[11]에서 기본 행렬을 이용하여 연속적으로 이동하는 카메라로 촬영된 영상들에 대한 카메라 원점을 추정하는 방법이 제안되었다. 기본 행렬 E를 이용하여 카메라 원점에 대한 회전 각도와 이동 방향을 정확히 계산하고, 이동 거리는 기하학적 모델을 이용하는 방법이다.

그림 3에서 연속된 3장의 2D 영상을 가정한다. 모든 영상에는 동일한 3D 물체 점 X에 대한 세 개의 2D 영상 점 x1, x2, x3가 각각 있어야 한다. 먼저 첫 번째 영상에 대한 카메라 중심 C1이 세계 좌표계의 원점 O(0, 0, 0)으로 가정한다. 첫 번째 영상과 두 번째 영상에 대한 동일하게 일치되는 특징점들을 이용하여, E12를 구하고 이것을 이용하여 두 번째 영상에 대한 카메라 원점 C2에서의 회전 행렬 R12과 이동 위치 t12를 계산한다. t12의 크기는 정규화되어 있으므로, 세 번째 영상에 대한 카메라 원점 C3의 이동 위치는 t12에 대한 일정 비율로 계산된다. 또한 삼각측량 방식(triangulation)으로 C1과 C2를 기준으로 x1과 x2를 역 투영(back projection) 하여 그 교차점인 3D 물체 점 X의 좌표를 추정한다.

OTNBBE_2022_v22n6_143_f0003.png 이미지

그림 3. 에피폴라 기하학을 이용한 카메라 원점의 이동 거리 추정법

Fig. 3. Camera center moving distance estimation method using Epipolar geometry

그 다음으로, 첫 번째 영상과 세 번째 영상의 동일한 특징점들을 이용하여 E13를 구하고 마찬가지로 C3의 회전 행렬 R13와 이동 위치 t13를 계산한다. t13의 크기는 정규화되어 있으므로 이동 방향만을 고려한다.

즉, C1을 기준으로 t13의 이동 방향으로 R13만큼 회전된 C3에서의 카메라 좌표계와, C3에서 x3로 역 투영된 직선을 함께 이동시킨다. C3의 임의의 이동 지점에서 역 투영된 직선은 앞에서 추정된 3D 물체 점 X와 만나게 된다. x3도 X에서 투영된 것이므로 반드시 3개의 역 투영된 선들이 만나는 점이 있어야 한다. 이때의 C3의 위치는 세 번째 영상에 대한 카메라 원점 위치에 해당한다[11].

Ⅲ. 제안된 카메라 포즈 추정법의 수학적 모델

[11]에서는 에피폴라 기하학을 이용하여 카메라 원점의 이동 위치를 추정할 때 수학적 모델과 수식을 사용하지 못하고 그래픽 툴을 이용하여 그 가능성과 정확성을 검증하였다. 본 논문에서는 그림 4와 같은 수학적 모델을 정립하고 이에 대한 카메라 원점 추정 수식을 유도하였다.

OTNBBE_2022_v22n6_143_f0005.png 이미지

그림 4. 필수 행렬을 이용한 카메라 원점 추정 모델

Fig. 4. Camera center estimation model using Essential matrix

그림 4에서 C1은 첫 번째 영상에 대한 카메라 원점을 의미하며 세계 좌표계(world coordinate) X Y Z에 대한 원점인 (0, 0, 0)으로 가정한다. C3는 세 번째 영상에 대한 카메라 원점으로 두 번째 영상에 대한 것은 생략되어 있다. 세계 좌표계로 C3의 좌표는 (XC3, YC3, ZC3)이며 에피폴라 기하학으로 이것을 정확히 추정하는 것이 목적이다. C3에서의 카메라 좌표계 x y z에 대해서 2D 영상점 m3의 좌표는 (x3, y3, z3)이며, 이것을 C1을 기준으로 하는 세계 좌표계로 표시하면 m'3(Xm3, Ym3, Zm3)가 된다. m3를 세계 좌표계로 표시하려면 C3의 세계 좌표계 값을 알아야 한다. 또한 2D 영상 점 m3에 해당하는 3D 물체 점 M에 대한 세계 좌표계 값은 (XM, YM, ZM)이다. 이 좌표 값은 첫 번째와 두 번째 영상으로 이미 구한 것이다.

이 때 m'3에 대한 수식은 다음과 같이 쓸 수 있다.

\(\begin{aligned}\left[\begin{array}{c}X_{m 3} \\ Y_{m 3} \\ Z_{m 3} \\ 1\end{array}\right]=\left[\begin{array}{cccc}r_{11} & r_{12} & r_{13} & t_{x} \\ r_{21} & r_{22} & r_{23} & t_{y} \\ r_{31} & r_{32} & r_{33} & t_{z} \\ 0 & 0 & 0 & 1\end{array}\right]\left[\begin{array}{c}x_{3} \\ y_{3} \\ z_{3} \\ 1\end{array}\right]\end{aligned}\)       (5)

이 수식을 풀어서 간단하게 정리하면 다음과 같다.

\(\begin{aligned}\left(\begin{array}{c}X_{m 3}=A+X_{C 3} \\ Y_{m 3}=B+Y_{C 3} \\ Z_{m 3}=C+Z_{C 3}\end{array}\right.\\\end{aligned}\)       (6)

여기서 A = r11x3 + r12y3 + r12z3, B = r21x3 + r22y3 + r23z3, C = r31x3 + r32y3 + r33z3이다.

그림 4의 기학학적인 제한사항을 적용하면 최종적으로 다음의 수식들이 유도된다.

\(\begin{aligned}X_{C 3}=\frac{1}{C-A \cdot Z_{C 3} / X_{C 3}}\left(C X_{M}-A Z_{M}\right)\\\end{aligned}\),       (7)

ZC3 = ZC3/XC3·XC3       (8)

\(\begin{aligned}Y_{C 3}=\frac{1}{C-B \cdot Z_{C 3} / Y_{C 3}}\left(C Y_{M}-B Z_{M}\right)\\\end{aligned}\),       (9)

Ⅳ. 시뮬레이션 및 결과

필수 행렬의 이동 위치 t13를 이용한 카메라 원점 좌표 C3의 추정 방법과 III 장에서 유도된 계산 수식의 정확성을 확인하기 위하여 3차원 공간에서 평면 도형을 고정시켜 놓고, 카메라를 측면 방향, 즉 X축 방향으로 두번 이동시키면서 2차원 영상 면에 투영시켰다. 즉, 3장의 2D 영상을 시뮬레이션으로 구성하였다.

좌측의 2장의 2D 영상에서 필수 행렬을 구해서 C2의 좌표를 추정하고, 역 투영을 통해 M의 좌표를 계산한다. 그리고 가장 좌측과 가장 우측의 2D 영상에서 필수 행렬을 구하여 회전 행렬과 이동 위치 t13를 추정한 후에, 최종적으로 III 장에서 유도된 수식에 대입하여 C3의 좌표를 계산한다.

시뮬레이션 과정에서 원래의 2D 영상을 원근 투영시켜서, 이동한 카메라에서 촬영한 2D 영상으로 만들어 사용하였다. 이 과정에서 영상 점 픽셀의 위치가 양자화 오차에 의해서 왜곡되므로, 이 때문에 계산 결과에서 오차가 발생한다.

그림 5는 가장 좌측을 기준으로 우측으로 각각 10cm씩 두 번 이동하며 2D 영상을 촬영한 경우이다. 그림의 아래에 세 개의 카메라 원점이 보이며 각각(XC2, YC2, ZC2)와 (XC3, YC3, ZC3)의 좌표 값이다. 스케일 정보가 없으므로 상대적인 비율로 표시되어 있으며, Y나 Z 방향으로는 이동하지 않았으므로 정확히 0.0으로 표시되어 있고, XC2와 YC3만 1.0과 2.0으로 오차가 전혀 없이 추정된 것을 확인할 수 있다.

OTNBBE_2022_v22n6_143_f0006.png 이미지

그림 5. 가로 방향으로 등 간격으로 카메라가 이동한 경우

Fig. 5. When the camera is moved at equal intervals in the horizontal direction.

또한 세 개의 카메라 원점에서 역 투영된 직선들이 5개의 3D 물체 점에서 정확하게 교차하는 것을 확인할 수 있다. 즉 이런 경우에는 재 투영(re-projection) 오차도 0이 된다.

그림 6은 카메라 원점이 Z축의 전방 방향(3D 물체 방향)으로 각각 10 cm와 20 cm 이동한 경우를 시뮬레이션 한 것이다. 가장 아래의 2D 영상은 카메라 원점이 (0, 0, 0)에 있는 경우이고, 가운데의 2D 영상이 10 cm 이동한 것으로 카메라 원점 좌표가 (0.13, 0.09, 1.00)으로 추정되었다. X축과 Y축 방향으로 이동하지 않았으므로 각각 0.0이 되어야 하지만 매우 작은 오차가 발견된다. 그 이유는 기본적으로 에피폴라 기하학을 이용하는 경우에는 영상 면에서 영상 점이 수평으로 이동해야 하므로, 카메라가 전방으로 이동하면 이 값이 작아서 계산오류가 증가하기 때문이다. 그러나 제일 앞쪽의 2D 영상을 보면 추정 좌표값이 (0.02, -0.07, 1.98)으로 10 cm 이동한 카메라에 비해서 2배 이동한 것을 정확하게 추정한 것을 확인할 수 있다.

OTNBBE_2022_v22n6_143_f0007.png 이미지

그림 6. 전방으로 카메라가 이동한 경우

Fig. 6. When the camera moves forward.

표 1은 본 논문에서 유도한 수식으로 카메라 원점의 이동 위치를 여러 가지 경우에 대해서 추정한 결과이며, 매우 작은 오차를 보이고 있다. 결과적으로 [11]에서 새롭게 제안된 카메라 원점 추정 방법과, 본 논문에서 유도된 계산 수식의 정확성이 확인 되었다.

표 1. 제안된 수식에 의한 카메라 원점 추정 오차

OTNBBE_2022_v22n6_143_t0001.png 이미지

Table 1. Camera center estimation error by proposed equation

Ⅴ. 결론

본 논문에서는 필수 행렬을 이용하여 카메라 원점 위치를 추정하는 방법에 대해 수학적 모델을 정립하고 계산 수식을 유도하였다. 시뮬레이션 모델과 거의 일치하는 결과를 보이고 있다. 향후에는 다양한 잡음이 추가된 환경에서 기존의 PnP 방법과의 성능을 비교 분석하는 연구가 필요하다.

References

  1. Theo Moons, Maarten Vergauwen, and Luc Van Gool, "3D Reconstruction from Multiple Images", Foundations and Trends in Computer Graphics and Vision, Vol. 4, No. 4, pp. 287-404. 2010. https://doi.org/10.1561/0600000007
  2. Yi Ma, Stefano Soatto, Jana Kosecka, and Shankar Sastry, An Invitation to 3-D Vision, Springer, 2004.
  3. Cesar Debeunne and Damien Vivet, "A Review of Visual-LiDAR Fusion based Simultaneous Localization and Mapping", Sensors, Vol. 20, No. 7, p. 2068, 2020. DOI: https://doi.org/10.3390/s20072068
  4. Daeyun Shin, Zhile Ren, Erik B. Sudderth, and Charless C. Fowlkes, "Multi-layer Depth and Epipolar Feature Transformers for 3D Scene Reconstruction", IEEE/CVF Conf. Comp. Vision & Pattern Recog. Workshops, pp. 39-43. 2019.
  5. Johannes L. Schonberger and Jan-Michael Frahm, "Structure-from-Motion Revisited", IEEE Conf. Computer Vision and Pattern Recognition, pp. 4104-4113, 2016.
  6. Mur-Artal, Raul, Jose Maria Martinez Montiel, and Juan D. Tardos, "ORB-SLAM: A Versatile and Accurate Monocular SLAM System", IEEE Tr. Robotics, Vol. 31, No. 5, pp. 1147-1163, 2015. https://doi.org/10.1109/TRO.2015.2463671
  7. Long Quan and Zhongdan Lan, "Linear N-point Camera Pose Determination", IEEE Tr. Pattern analysis & Machine Intelligence, Vol. 21, No. 8, pp. 774-780, 1999. https://doi.org/10.1109/34.784291
  8. David Nister, "An Efficient Solution to the Five-point Relative Pose Problem", IEEE tr. Pattern Analysis & Machine Intelligence, Vol. 26, No. 6, pp. 756-770, 2004. https://doi.org/10.1109/TPAMI.2004.17
  9. https://docs.opencv.org/4.x/d5/d1f/calib3d_solvePnP.html
  10. Georgi Hristov Georgiev, "A Practical Method for Decomposition of the Essential Matrix", Applied Mathematical Sciences, Vol. 8, No. 176, pp. 8755-8770, 2014. https://doi.org/10.12988/ams.2014.410877
  11. Jongtaek Oh and Sojung Yoon, "A Study on Estimating Smartphone Camera Position", The Journal of the Institute of Internet, Broadcasting & Communication, Vol. 21, No. 6, pp. 99-104, 2021. https://doi.org/10.7236/JIIBC.2021.21.6.99
  12. Kenichi Kanatani, Yasuyuki Sugaya, and Yasushi Kanazawa, Guide to 3D Vision Computation, Springer, 2016.
  13. Richard Hartley and Andrew Zisserman, Multiple View Geometry in Computer Vision, 2E, Cambridge University Press, 2004.