Essential Matrix from Fundamental Matrix in OpenCV

JuaniL picture JuaniL · May 29, 2014 · Viewed 10.2k times · Source

I've already computed the Fundamental Matrix of a stereo pair through corresponding points, found using SURF. According to Hartley and Zisserman, the Essential Matrix is computed doing:

E = K.t() * F * K

How I get K? Is there another way to compute E?

Answer

kebs picture kebs · May 30, 2014

I don't know where you got that formulae, but the correct one is E = K'^T . F . K (see Hartley & Zisserman, §9.6, page 257 of second edition)

K is the intrinsic camera parameters, holding scale factors and positions of the center of the image, expressed in pixel units.

    | \alpha_u     0     u_0 |
K = |    0      \alpha_u v_0 |
    |    0         0      1  |

(sorry, Latex not supported on SO)

Edit : To get those values, you can either:

  • calibrate the camera
  • compute an approximate value if you have the manufacturer data. If the lens is correctly centered on the sensor, then u_0 and v_0 are the half of, respectively, width and height of image resolution. And alpha = k.f with f: focal length (m.), and k the pixel scale factor: if you have a pixel of, say, 6 um, then k=1/6um. Example, if the lens is 8mm and pixel size 8um, then alpha=1000

Computing E

Sure, there are several of ways to compute E, for example, if you have strong-calibrated the rig of cameras, then you can extract R and t (rotation matrix and translation vector) between the two cameras, and E is defined as the product of the skew-symmetric matrix t and the matrix R.

But if you have the book, all of this is inside.

Edit Just noticed, there is even a Wikipedia page on this topic!