title: Camera motion from corresponding images
body: <p>I'm trying to calculate a new camera position based on the motion of corresponding images.
  the images conform to the pinhole camera model.</p>
  
  <p>As a matter of fact, I don't get useful results, so I try to describe my procedure and hope that somebody can help me.</p>
  
  <p>I match the features of the corresponding images with SIFT, match them with OpenCV's FlannBasedMatcher and calculate the fundamental matrix with OpenCV's findFundamentalMat (method RANSAC).</p>
  
  <p>Then I calculate the essential matrix by the camera intrinsic matrix (K):</p>
  
  <pre><code>Mat E = K.t() * F * K;
  </code></pre>
  
  <p>I decompose the essential matrix to rotation and translation with singular value decomposition:</p>
  
  <pre><code>SVD decomp = SVD(E);
  Matx33d W(0,-1,0,
            1,0,0,
            0,0,1);
  Matx33d Wt(0,1,0,
            -1,0,0,
             0,0,1);
  R1 = decomp.u * Mat(W) * decomp.vt;
  R2 = decomp.u * Mat(Wt) * decomp.vt;
  t1 = decomp.u.col(2); //u3
  t2 = -decomp.u.col(2); //u3
  </code></pre>
  
  <p>Then I try to find the correct solution by triangulation. (this part is from <a href="http://www.morethantechnical.com/2012/01/04/simple-triangulation-with-opencv-from-harley-zisserman-w-code/">http://www.morethantechnical.com/2012/01/04/simple-triangulation-with-opencv-from-harley-zisserman-w-code/</a> so I think that should work correct).</p>
  
  <p>The new position is then calculated with:</p>
  
  <pre><code>new_pos = old_pos + -R.t()*t;
  </code></pre>
  
  <p>where new_pos &amp; old_pos are vectors (3x1), R the rotation matrix (3x3) and t the translation vector (3x1).</p>
  
  <p>Unfortunately I got no useful results, so maybe anyone has an idea what could be wrong.</p>
  
  <p>Here are some results (just in case someone can confirm that any of them is definitely wrong):</p>
  
  <pre><code>F = [8.093827077399547e-07, 1.102681999632987e-06, -0.0007939604310854831;
       1.29246107737264e-06, 1.492629957878578e-06, -0.001211264339006535;
       -0.001052930954975217, -0.001278667878010564, 1]
  
  K = [150, 0, 300;
      0, 150, 400;
      0, 0, 1]
  
  E = [0.01821111092414898, 0.02481034499174221, -0.01651092283654529;
       0.02908037424088439, 0.03358417405226801, -0.03397110489649674;
       -0.04396975675562629, -0.05262169424538553, 0.04904210357279387]
  
  t = [0.2970648246214448; 0.7352053067682792; 0.6092828956013705]
  
  R = [0.2048034356172475, 0.4709818957303019, -0.858039396912323;
       -0.8690270040802598, -0.3158728880490416, -0.3808101689488421;
       -0.4503860776474556, 0.8236506374002566, 0.3446041331317597]
  </code></pre>