gpt4 book ai didi

c++ - 寻找相机之间的外部因素

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:18:51 29 4
gpt4 key购买 nike

我处于需要根据图像对应关系找到两个/或多个相机之间的相对相机姿势的情况(因此相机不在同一点)。为了解决这个问题,我尝试了与描述相同的方法 here (下面的代码)。

cv::Mat calibration_1 = ...;
cv::Mat calibration_2 = ...;
cv::Mat calibration_target = calibration_1;
calibration_target.at<float>(0, 2) = 0.5f * frame_width; // principal point
calibration_target.at<float>(1, 2) = 0.5f * frame_height; // principal point

auto fundamental_matrix = cv::findFundamentalMat(left_matches, right_matches, CV_RANSAC);
fundamental_matrix.convertTo(fundamental_matrix, CV_32F);
cv::Mat essential_matrix = calibration_2.t() * fundamental_matrix * calibration_1;
cv::SVD svd(essential_matrix);
cv::Matx33f w(0,-1,0,
1,0,0,
0,0,1);
cv::Matx33f w_inv(0,1,0,
-1,0,0,
0,0,1);
cv::Mat rotation_between_cameras = svd.u * cv::Mat(w) * svd.vt; //HZ 9.19

但在我的大多数情况下,我得到的结果都非常奇怪。所以我的下一个想法是使用一个完整的束调节器(它应该做我正在寻找的东西?!)。目前我唯一的主要依赖是 OpenCV,它们只有一个未记录的包调整实现。

那么问题是:

  • 是否有没有依赖关系且使用允许商业使用的许可证的 bundle 调整器?
  • 是否有其他简单的方法来查找外部变量?
  • 与相机距离相差很大的物体是否存在问题? (严重视差)

提前致谢

最佳答案

我也在处理同样的问题并面临更棘手的问题。这里有一些建议 -

  1. 分解前修改基本矩阵:修改分解前的 Essential 矩阵 [U W Vt] = SVD(E),和新的 E' = diag(s,s,0) where s = W(0,0) + W(1,1)/2

  2. 两阶段基本矩阵估计:使用 RANSAC 内点重新计算基本矩阵

这些步骤应该使旋转估计更容易受到噪声的影响。

关于c++ - 寻找相机之间的外部因素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13542598/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com