1 | initial version |

It depends whether you have knowledge about an objects absolute metric size (e.g., the basewidth of a stereo camera setup). The Essential Matrix `E`

decomposes into rotation `R`

and translation `t`

, but notice that there are four possible solutions, but only one geometrically feasible one (see here, slide 8). After doing the cheirality check, i.e., all 3D points must be in front of the two cameras, you get the feasible solution.

The translation vector `t`

(and rotation matrix `R`

) yield your camera matrix `P = [R|t]`

, where `R`

corresponds to the camera orientation in world coordinates and `t`

is the position of the world origin in camera coordinates. Therefore, to obtain the camera origin `c`

in world coordinates, you calculate:

```
c = -inverse(R)*t
```

As you noticed in your EDIT 1: The translation vector is normalized to unit. This is due to the SVD, which always returns a solution normalized to unit. Therefore, it is impossible to retrieve an absolute metric translation (in m, mm or whatever) without any additional knowledge of the absolute dimensions of an observed object, but you only obtain a correct solution *up-to-scale*.

2 | No.2 Revision |

It depends whether you have knowledge about an objects absolute metric size (e.g., the basewidth of a stereo camera setup). The Essential Matrix `E`

decomposes into rotation `R`

and translation `t`

, but notice that there are four possible solutions, but only one geometrically feasible one (see here, slide 8). After doing the cheirality check, i.e., all 3D points must be in front of the two cameras, you get the feasible solution.

The translation vector `t`

(and rotation matrix `R`

) yield your camera matrix `P = [R|t]`

, where `R`

corresponds to the camera orientation in world coordinates and `t`

is the position of the world origin in camera coordinates. Therefore, to obtain the camera origin `c`

in world coordinates, you calculate:

```
c = -inverse(R)*t
```

As you noticed in your EDIT 1: The translation vector is normalized to unit. This is due to the SVD, which always returns a solution normalized to unit. Therefore, it is impossible to retrieve an absolute metric translation (in m, mm or whatever) without any additional knowledge of the absolute dimensions of an observed object, but you only obtain a correct solution *up-to-scale*.

Edit: you might also take a look at this post for the calculation of the four possible solutions.

Copyright OpenCV foundation, 2012-2018. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.