<small id='KBxfM'></small><noframes id='KBxfM'>

        <bdo id='KBxfM'></bdo><ul id='KBxfM'></ul>
      <i id='KBxfM'><tr id='KBxfM'><dt id='KBxfM'><q id='KBxfM'><span id='KBxfM'><b id='KBxfM'><form id='KBxfM'><ins id='KBxfM'></ins><ul id='KBxfM'></ul><sub id='KBxfM'></sub></form><legend id='KBxfM'></legend><bdo id='KBxfM'><pre id='KBxfM'><center id='KBxfM'></center></pre></bdo></b><th id='KBxfM'></th></span></q></dt></tr></i><div id='KBxfM'><tfoot id='KBxfM'></tfoot><dl id='KBxfM'><fieldset id='KBxfM'></fieldset></dl></div>

    1. <legend id='KBxfM'><style id='KBxfM'><dir id='KBxfM'><q id='KBxfM'></q></dir></style></legend>

      <tfoot id='KBxfM'></tfoot>
    2. 从基本矩阵中提取平移和旋转

      时间:2023-09-18
        <bdo id='otUep'></bdo><ul id='otUep'></ul>

            <i id='otUep'><tr id='otUep'><dt id='otUep'><q id='otUep'><span id='otUep'><b id='otUep'><form id='otUep'><ins id='otUep'></ins><ul id='otUep'></ul><sub id='otUep'></sub></form><legend id='otUep'></legend><bdo id='otUep'><pre id='otUep'><center id='otUep'></center></pre></bdo></b><th id='otUep'></th></span></q></dt></tr></i><div id='otUep'><tfoot id='otUep'></tfoot><dl id='otUep'><fieldset id='otUep'></fieldset></dl></div>

              <legend id='otUep'><style id='otUep'><dir id='otUep'><q id='otUep'></q></dir></style></legend>
                  <tbody id='otUep'></tbody>
                <tfoot id='otUep'></tfoot>

                <small id='otUep'></small><noframes id='otUep'>

                本文介绍了从基本矩阵中提取平移和旋转的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                问题描述

                我正在尝试从计算的基本矩阵中检索平移和旋转向量.我确实使用 OpenCV,一般方法来自维基百科.我的代码是这样的:

                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:

                //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<double>(0, 0) = decomp.w.at<double>(0, 0);
                S.at<double>(1, 1) = decomp.w.at<double>(0, 1);
                S.at<double>(2, 2) = decomp.w.at<double>(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<double>(0, 1) = -1;
                W.at<double>(1, 0) = 1;
                W.at<double>(2, 2) = 1;
                
                cout << "computed rotation: " << endl;
                cout << U * W.t() * V.t() << endl;
                cout << "real rotation:" << endl;
                Mat rot;
                Rodrigues(images[1].rvec - images[0].rvec, rot); //Difference between known rotations
                cout << rot << endl;
                

                最后,我尝试将估计的旋转与我使用每个图像中的棋盘计算的旋转进行比较(我计划在没有棋盘的情况下获得外部参数).例如我得到这个:

                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:

                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]
                

                很明显似乎有问题,我就是想不通是什么.

                So clearly there seems to be a problem, I just can't figure out what it could be.

                这是我使用未转置的 vt 得到的结果(显然来自另一个场景):

                Here are the results I got with the untransposed vt(obviously from another scene):

                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]
                

                这是我计算的相机矩阵,误差非常低(大约 0.17...).

                Here is my computed camera matrix, the error was pretty low(about 0.17...).

                [1699.001342509651, 0, 834.2587265398068;
                  0, 1696.645251354618, 607.1292618175946;
                  0, 0, 1]
                

                这是我尝试重新投影立方体时得到的结果...相机0,立方体是轴对齐的,旋转和平移是(0, 0, 0).图片 http://imageshack.us/a/img802/5292/bildschirmfoto20130110u.png

                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). image http://imageshack.us/a/img802/5292/bildschirmfoto20130110u.png

                和另一个,具有第一张图像中点的外线.图片 http://imageshack.us/a/img546/189/bildschirmfoto20130110uy.png

                and the other one, with the epilines of the points in the first image. image http://imageshack.us/a/img546/189/bildschirmfoto20130110uy.png

                推荐答案

                请看这个链接:

                http://isit.u-clermont1.fr/~ab/Classes/DIKU-3DCV2/Handouts/Lecture16.pdf.

                参考第2页.R有两种可能.第一种是UWVT,第二种是UWTVT.你用了第二个.尝试第一个.

                Refer to Page 2. There are two possibilities for R. The first is UWVT and the second is UWTVT. You used the second. Try the first.

                这篇关于从基本矩阵中提取平移和旋转的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                上一篇:寻找优雅高效的C++矩阵库 下一篇:如何在 OpenCV 中用零填充矩阵?

                相关文章

                最新文章

              • <legend id='VbnPp'><style id='VbnPp'><dir id='VbnPp'><q id='VbnPp'></q></dir></style></legend>
                  <bdo id='VbnPp'></bdo><ul id='VbnPp'></ul>

                1. <small id='VbnPp'></small><noframes id='VbnPp'>

                  <tfoot id='VbnPp'></tfoot>

                    <i id='VbnPp'><tr id='VbnPp'><dt id='VbnPp'><q id='VbnPp'><span id='VbnPp'><b id='VbnPp'><form id='VbnPp'><ins id='VbnPp'></ins><ul id='VbnPp'></ul><sub id='VbnPp'></sub></form><legend id='VbnPp'></legend><bdo id='VbnPp'><pre id='VbnPp'><center id='VbnPp'></center></pre></bdo></b><th id='VbnPp'></th></span></q></dt></tr></i><div id='VbnPp'><tfoot id='VbnPp'></tfoot><dl id='VbnPp'><fieldset id='VbnPp'></fieldset></dl></div>