三角测量,来自calibrateCameras()s'tvec和rvec

时间:2012-09-06 11:44:28

标签: opencv triangulation camera-calibration projection-matrix

很难找到我的问题的答案,这就是为什么我想在这里问它,即使它在其他地方也很难解释。我尝试在代码中添加解决方案,以便每个人都可以回到我的结果。 但首先必须解决它。

它与OpenCV cv::triangulatePoints()进行三角测量。我知道它的记录很差,但可以在willowgarage(现在)找到(搜索文档2.4.9)

  1. 我用于棋盘校准22个立体图像(两个凸轮)的 不同的角度等。对于稳定的内在参数。
  2. cv::findChessboardCorners()
  3. 获得了棋盘角
  4. 可选 - cv::cornerSubPix()
  5. 在所有棋盘点上创建objectPoints cv::Point3f( k*m_squareSize, j*m_squareSize,0.0f)(k - 棋盘宽度,j棋盘高度,反之亦然,squareSize = realworld大小)
  6. 做2.-4。每张图片
  7. 把所有东西都放在这里:cv::calibrateCamera(object_points1, image_points1, image.size(), intrinsic1, distCoeffs1, rvecs1, tvecs1);这个功能完全像我想要的那样,我也是用第二个相机图像做的。经过长时间的研究,我发现了这个:
  8. cv::Mat R12 = R2*R1.t(); cv::Mat T12 = T2-R*T1;这是针对cam1&的关系(R | T)。 CAM2。这很好用,我用cv::stereoCalibrate()的结果测试了它。
  9. 在这一步,我想使用我的tvecs和rvecs来重新投影2D太3D和3D太2D。最后我完成了cv::projectPoints(object_points1[i],rvecs1[i],tvecs1[i],intrinsic1, distCoeffs1, imagePoints1); - >工作得很好 - 我只有一个单点,从2像素差异中得到48 * 2 * 22点最大值。但是知道我不能进一步从2d 3D三角测量。 我有!也使用cv::triangulatePoints()。我如何得到这项工作???
  10. 到目前为止我所做的事情没有取得好成绩:首先需要投影矩阵P1和P2。

    cv::Matx34d P1 = cv::Matx34d(   R1.at<double>(0,0), R1.at<double>(0,1), R1.at<double>(0,2), tvecs1[0].at<double>(0),
                                    R1.at<double>(1,0), R1.at<double>(1,1), R1.at<double>(1,2), tvecs1[0].at<double>(1),
                                    R1.at<double>(2,0), R1.at<double>(2,1), R1.at<double>(2,2), tvecs1[0].at<double>(2));
    
    抱歉,这看起来很重,但它只有rotationmatrix(rodrigues(rvecs1,R1))和translationvector tvecs1。这是错的吗?我必须反转旋转矩阵R1吗?

    下一步:您需要左右图像中的imagePoints(Corners)。这些imagePoints是我从findChessboardCorners()得到的未失真的角落。

    使用cv::triangulatePoints(P1, P2, cv::Mat(undisPt_set1).reshape(1,2), cv::Mat(undisPt_set2).reshape(1,2), point3d);之后,point3d是一个“4D”点,其中第四个参数也被convertPointsHomogeneous(point3d.reshape(4, 1), point3dCam1);消除了

    这是我到目前为止所做的 - 但它不起作用。 有人知道我做错了什么吗?最后一步有什么错误的想法吗?我试过数学,但我不确定projectionMatrix P1和P2。我知道它的内置像[R | t],但它是我的tvecs和tvecs吗?它是转置还是反转?任何帮助都会很棒,但请帮我解决一些代码或明确的步骤 - 没有更多链接,我应该阅读和思考,我真的做了一个研究,我有学习OpenCV书,OpenCV2食谱,以及Hartley和Zisserman这里在我前面。但我无法达到目的。

0 个答案:

没有答案