--- title: Eight-point algorithm (Lecture) categories: lecture --- # Eight-Point Algorithm Input : At least eight pairs of points $(\mathbf{x}_1,\mathbf{x}_2)$ (from stereo view). Output : The essential matrix $E$ (or rather an estimate) Main Principle : **Epipolar Constraint** $\mathbf{x}_2^TE\mathbf{x}_1 = 0$ ## Outline + The epipolar constraint is a linear equation, but it is written in an unusual form, with the unknown $E$ in the middle. + We know $\mathbf{x}_i$, and want to solve for $E$. + **Note** if $E$ is a solution, then $c\cdot E$ is a solution for any $c\in\mathbb{R}$ + Up to nine unknowns in the $3\times3$ matrix $E$, but one is the indeterminable $c$. + Scaling up all distances by the same factor gives the same solution + Step 1. Rewrite the constraint in a more regular format. + Step 2. Formulate a system of linear equations using eight pairs of points. + Eight pairs of points give eight equations ## Kronecker product + **Serialisation** of a matrix: $(\cdot)^s$ maps a $3\times 3$ matrix into a 9-dimensional vector. + You can scan row by row or column by column; and seriously, Matlab does it one way and Python (numpy) the other. + Numpy method: `.flatten()` + You need to be consistent, and it is worth running a test to see what your system does. + **Kronecker product**: $\bigotimes$ + $\vec{a}\bigotimes \vec{b} = (\vec{a}\vec{b}^\mathrm{T})^s$ + Rewrite the **epipolar constraint**: $$(\mathbf{x}_1\bigotimes\mathbf{x}_2)^TE^s = 0$$ + Note: one equation in nine unknowns, ## Preparing for the eight-point algorithm + Each point of pairs gives rise to a nine-dimensional vector: $$\mathbf{a} = \mathbf{x}_1\bigotimes\mathbf{x}_2$$ + view it as a column + The epipolar constraint is $\mathbf{a}^\mathrm{T}\cdot E^s = 0$. + This gives a matrix equation $\chi\cdot E^s=0$ where $$\chi = [\mathbf{a}_1, \mathbf{a}_2, \ldots, \mathbf{a}_n]^T$$ + We can solve $\chi E^s = 0$ for $E^s$. + With eight points, we have unique solutions up to a scalar factor. + With additional points, we can minimise the squared errors + $\min_E ||\chi E^s||^2$ + i.e. eigenvector of $\chi^T\chi$ of smallest eigenvalue + (this is a general approach to solve linear systems of equations *with noise*) + The scale ambiguity is intrinsic. + The distance $||T||$ cannot be determined from the images ## Projection onto the essential space The solution is not necessarily a valid essential matrix, but we can project onto the space of such matrices and correct the sign to get positive determinant. + Write $F$ for the solution of $\chi E^s=0$. This is called the **fundamental matrix** + Write $F = U\Sigma_FV^T$ for the
singular value decomposition + $\Sigma_F$ is a diagonal matrix + $U$ and $V$ are orthogonal matrices (assuming they are real) + canonical decomposition with the entries on $\Sigma_F$ in descending order + use an API to compute
+ Use $E=U\Sigma V^T$ for the essential matrix, where + $\Sigma=\mathsf{diag}(1,1,0)$ ## Recover the transform from the essential matrix $$ \begin{cases} (\hat T_1,R_1) &= (UR_Z(+\frac\pi2)\Sigma U^T, UR_Z(+\frac\pi2)V^T) \\ (\hat T_2,R_2) &= (UR_Z(-\frac\pi2)\Sigma U^T, UR_Z(-\frac\pi2)V^T) \end{cases} $$ where $$R_Z(+\frac\pi2) = \begin{bmatrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{bmatrix} $$ is a rotation by $\pi/2$ radians around the $z$-axis. + **Four solutions** + Two solutions $\pm F$ to the equation $\chi E^s=0$ + Two poses from each candidate matrix + Only one of the four solutions is in front of both cammeras ## Notes ### Number of points. + $(R,T)$ only has five degrees of freedom when $T$ is determined up to a scalar factor. + thus five points suffices in theory + $\mathsf{det}(E)=0$ removes one degree of freedom + linear algorithm exists for six points ### Requirements **General position** We have to assume linear independence in the equation $\chi E^s=0$ **Sufficient parallax** If $T=0$, then $E=0$, hence the algorithm requires $$T\neq0$$ The algorithm may work even if $T=0$, due to noise, but the resulting estimate for $T$ (direction) would be meaningless. ### Variants + Infinitesimal viewpoint change, see Section 5.4 + Multiple motion, see Chapter 7 ### Scale ambiguity (Ma (2004) Section 5.2.2) + Depth scales $\lambda_1,\lambda_2$ (for each object point) + Motion scale $\gamma=||T||$ $$\lambda_2^j\mathbf{x}_2^j = \lambda_1^jR\mathbf{x}_2^j + \gamma T$$ + Recall that the scale ambiguity is intrinsic + $\gamma$ cannot be determined from the images # Optimal pose in the presence of noise **Reading** Ma (2004) Section 5.2.3 + Noise is everywhere - Two problems: + error in $(R,T)$ + no consistent 3D reconstruction from noisy image points + The epipolar constraint assumes ideal co-ordinates - but applied to noisy measurements + **Two approaches** 1. Maximum likelihood 2. Minimal sum of squared errors + We only discuss option 2. ## Optimal Pose Consider an observed point $\tilde{\textbf{x}}^j=(\tilde x^j_1, \tilde x^j_2, \tilde x^j_3)$ and an unknown true point $\textbf{x}^j=( x^j_1, x^j_2, x^j_3)$. The corresponding 3D point is $\textbf{X}^j$. + **Observations** $\tilde x_i^j$ + **Independent variables** $x_i^j,R,T$ + **Sum of squared errors** $$\phi(\mathrm{X}^j,R,T) = \sum_j ||w_1^j||^2 + ||w_2^j||^2 = \sum_j|| \tilde x_1^j-x_1^j||^2 + ||\tilde x_2^j-x_2^j||^2 = \sum_j|| \tilde x_1^j-\pi_1(\textbf{X}^j)||^2 + ||\tilde x_2^j-\pi_2(\textbf{X}^j)||^2$$ **Task** $$\min_{\textbf{X}^j}\phi(\mathrm{X}^j,R,T) = \sum_j\sum_{i\in\{1,2\}} ||w_i^j||^2$$ under the conditions that $$ x_2^j\hat TR x_1^j = 0$$ and $$x_1^{jT}e_3 = 1\quad\text{for } i=1,2, j=1,2,\ldots,n$$ + Lagrangian optimisation **Goal** find image point pairs which minimise the reprojection error for that particular object point. (Structure Triangulation)