title: Extract Translation and Rotation from Fundamental Matrix
body: <p>I am trying to retrieve translation and rotation vectors from a computed fundamental Matrix. I do use OpenCV and the general approach is from wikipedia. My Code is like this:</p>
  
  <pre><code>//Compute Essential Matrix
  Mat A = cameraMatrix(); //Computed using chessboard
  Mat F = fundamentalMatrix(); //Computed using matching keypoints
  Mat E = A.t() * F * A;
  
  //Perfrom SVD on E
  SVD decomp = SVD(E);
  
  //U
  Mat U = decomp.u;
  
  //S
  Mat S(3, 3, CV_64F, Scalar(0));
  S.at&lt;double&gt;(0, 0) = decomp.w.at&lt;double&gt;(0, 0);
  S.at&lt;double&gt;(1, 1) = decomp.w.at&lt;double&gt;(0, 1);
  S.at&lt;double&gt;(2, 2) = decomp.w.at&lt;double&gt;(0, 2);
  
  //V
  Mat V = decomp.vt; //Needs to be decomp.vt.t(); (transpose once more)
  
  //W
  Mat W(3, 3, CV_64F, Scalar(0));
  W.at&lt;double&gt;(0, 1) = -1;
  W.at&lt;double&gt;(1, 0) = 1;
  W.at&lt;double&gt;(2, 2) = 1;
  
  cout &lt;&lt; "computed rotation: " &lt;&lt; endl;
  cout &lt;&lt; U * W.t() * V.t() &lt;&lt; endl;
  cout &lt;&lt; "real rotation:" &lt;&lt; endl;
  Mat rot;
  Rodrigues(images[1].rvec - images[0].rvec, rot); //Difference between known rotations
  cout &lt;&lt; rot &lt;&lt; endl;
  </code></pre>
  
  <p>At the end I try to compare the estimated rotation to the one I computed using the chessboard which is in every Image (I plan to get the extrinsic parameters without the chessboard). For example I get this:</p>
  
  <pre><code>computed rotation:
  [0.8543027125286542, -0.382437675069228, 0.352006107978011;
    0.3969758209413922, 0.9172325022900715, 0.03308676972148356;
    0.3355250705298953, -0.1114717965690797, -0.9354127247453767]
  
  real rotation:
  [0.9998572365450219, 0.01122579241510944, 0.01262886032882241;
    -0.0114034800333517, 0.9998357441946927, 0.01408706050863871;
    -0.01246864754818991, -0.01422906234781374, 0.9998210172891051]
  </code></pre>
  
  <p>So clearly there seems to be a problem, I just can't figure out what it could be.</p>
  
  <p>EDIT:
  Here are the results I got with the untransposed vt(obviously from another scene):</p>
  
  <pre><code>computed rotation: 
  [0.8720599858028177, -0.1867080200550876, 0.4523842353671251;
   0.141182538980452, 0.9810442195058469, 0.1327393312518831;
  -0.4685924368239661, -0.05188790438313154, 0.8818893204535954]
  real rotation
  [0.8670861432556456, -0.427294988334106, 0.2560871201732064;
   0.4024551137989086, 0.9038194629873437, 0.1453969040329854;
  -0.2935838918455123, -0.02300806966752995, 0.9556563855167906]
  </code></pre>
  
  <p>Here is my computed camera matrix, the error was pretty low(about 0.17...).</p>
  
  <pre><code>[1699.001342509651, 0, 834.2587265398068;
    0, 1696.645251354618, 607.1292618175946;
    0, 0, 1]
  </code></pre>
  
  <p>Here are the results I get when trying to reproject a cube...
  Camera 0, the cube is axis-aligned, rotation and translation are (0, 0, 0).
  <a href="http://imageshack.us/a/img802/5292/bildschirmfoto20130110u.png">image http://imageshack.us/a/img802/5292/bildschirmfoto20130110u.png</a></p>
  
  <p>and the other one, with the epilines of the points in the first image.
  <a href="http://imageshack.us/a/img546/189/bildschirmfoto20130110uy.png">image http://imageshack.us/a/img546/189/bildschirmfoto20130110uy.png</a></p>