小编Ter*_*ept的帖子

Open CV - SfM的几种方法

我有一个任务:

我们有一个系统工作,相机在人头周围做半个圆圈.我们知道相机矩阵和每帧的旋转/平移.(失真和更多...但我想首先没有这些参数工作)

我的任务是我只有相机矩阵,它在此移动时保持不变,以及图像(超过100).现在我必须逐帧进行平移和旋转,并将其与现实世界中的旋转和平移进行比较(来自我所拥有的系统,但仅用于比较,我也证明了它!)

到目前为止我做的第一步:

  1. 使用OpenCV Cookbook中的robustMatcher - 作品finde - 40-70每帧匹配 - 可见看起来非常好!
  2. 我用getFundamental()得到了基本矩阵.我使用robustMatcher和RANSAC的健壮点.
  3. 当我拿到F时我可以使用我的CameraMatrix K获得Essentialmatrix E,如下所示:

cv::Mat E = K.t() * F * K; //Found at the Bible HZ Chapter 9.12

现在我们需要用SVD从E中提取R和t.顺便说一句,camera1的位置只是零,因为我们必须从某个地方开始.

cv::SVD svd(E);
cv::SVD svd(E);

cv::Matx33d W(0,-1,0,   //HZ 9.13
          1,0,0,
          0,0,1);

 cv::Matx33d Wt(0,1,0,//W^
        -1,0,0,
        0,0,1);

 cv::Mat R1 = svd.u * cv::Mat(W)  * svd.vt; //HZ 9.19
 cv::Mat R2 = svd.u * cv::Mat(Wt) * svd.vt; //HZ 9.19

 //R1 or R2???
 R = R1; //R2

 //t=+u3 or t=-u3?
 t = svd.u.col(2); //=u3 …
Run Code Online (Sandbox Code Playgroud)

opencv computer-vision camera-calibration

6
推荐指数
1
解决办法
3049
查看次数