Note that there are some explanatory texts on larger screens.

plurals
  1. POCamera motion from corresponding images
    primarykey
    data
    text
    <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>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload