C++ 在摄影机之间查找外部对象
我所处的情况是,我需要根据图像对应找到两个或多个摄影机之间的相对摄影机姿势(因此摄影机不在同一点)。为了解决这个问题,我尝试了与描述相同的方法(代码如下)C++ 在摄影机之间查找外部对象,c++,opencv,computer-vision,bundler,levenberg-marquardt,C++,Opencv,Computer Vision,Bundler,Levenberg Marquardt,我所处的情况是,我需要根据图像对应找到两个或多个摄影机之间的相对摄影机姿势(因此摄影机不在同一点)。为了解决这个问题,我尝试了与描述相同的方法(代码如下) cv::Mat校准_1=。。。; cv::Mat校准_2=。。。; cv::Mat校准\目标=校准\ 1; (0,2)处的校准目标=0.5f*帧宽度;//主要观点 (1,2)处的校准目标=0.5f*帧高度;//主要观点 自动基本矩阵=cv::findFundamentalMat(左匹配、右匹配、cv\u RANSAC); 基本矩阵。conve
cv::Mat校准_1=。。。;
cv::Mat校准_2=。。。;
cv::Mat校准\目标=校准\ 1;
(0,2)处的校准目标=0.5f*帧宽度;//主要观点
(1,2)处的校准目标=0.5f*帧高度;//主要观点
自动基本矩阵=cv::findFundamentalMat(左匹配、右匹配、cv\u RANSAC);
基本矩阵。convertTo(基本矩阵,CV_32F);
cv::Mat essential_matrix=校准_2.t()*基本矩阵*校准_1;
cv::SVD SVD(基本矩阵);
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在摄像机之间的旋转=svd.u*cv::Mat(w)*svd.vt//赫兹9.19
但在大多数情况下,我都会得到非常奇怪的结果。所以我的下一个想法是使用一个成熟的捆绑调整器(它应该满足我的需求?!)。目前我唯一的大依赖是OpenCV,他们只有一个未记录的捆绑调整实现
因此,问题是:
- 是否有一个无依赖性且使用允许商业使用的许可证的捆绑调整器
- 有没有其他简单的方法可以找到外在因素
- 与摄像机的距离相差甚远的物体是否存在问题?(大视差)
提前感谢我也在处理同样的问题,面临更棘手的问题。 以下是一些建议:
这些步骤将使旋转估计更容易受到噪声的影响。您必须获得4种不同的解决方案,并选择具有最多正Z坐标点的解决方案。通过反转基本矩阵的符号,用w_inv替换w,生成解决方案。虽然计算了w_inv,但您没有这样做。您是否重复使用其他代码?能否提供更多详细信息?两个摄像机都有一个共同的视野(FOV)?摄像机是相同的型号-但不完全相同-因此本质可能略有不同。理想情况下,内部也会进行调整,但这不是我目前的首要问题,我的主要问题是两个摄像头是否有一个可以成像的公共区域。如果是,您可以在该公共区域放置一个棋盘,并找到摄像头之间的相对姿势。摄像头的重叠部分约为水平视野的30%,但我不能使用棋盘或任何其他图案-我的输入是功能对应。谢谢您的回答,您能更详细地解释第一步吗?
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