3

私の質問に対する答えを正確に見つけるのは難しいので、他の場所で十分に説明されていなくても、ここで質問したいと思います。誰もが私の結果に戻れるように、コードにソリューションを追加しようとしています。しかし、最初にそれを解決する必要があります。

OpenCVによる三角測量についてcv::triangulatePoints()です。私はその貧弱な文書を知っていますが、ウィローガレージ(現在)で見つけることができます(文書2.4.9を検索してください)

  1. チェス盤のキャリブレーションには、角度の異なる22のステレオ画像(2つのカム)を使用します。安定した固有パラメータの場合。
  2. チェス盤のコーナーを手に入れましたcv::findChessboardCorners()
  3. オプション-cv::cornerSubPix()
  4. すべてのチェス盤ポイントにobjectPointscv::Point3f( k*m_squareSize, j*m_squareSize,0.0f)を作成します(k-チェス盤の幅、jチェス盤の高さ、またはその逆、squareSize =実世界のサイズ)
  5. 2.-4を実行します。すべての画像に対して
  6. ここにすべてを入れてください:cv::calibrateCamera(object_points1, image_points1, image.size(), intrinsic1, distCoeffs1, rvecs1, tvecs1);この機能は私が望んでいたように完璧に機能します、私は2番目のカメラ画像でもそれをやっています。長い調査の結果、私はこれを見つけました。
  7. cv::Mat R12 = R2*R1.t(); cv::Mat T12 = T2-R*T1;これは、cam1とcam2の関係(R | T)用です。これはかなりうまく機能します。の結果でテストしましたcv::stereoCalibrate()
  8. このステップでは、tvecsとrvecsを使用して、2Dも3D、3Dも2Dを再投影したいと思いました。最後に、cv::projectPoints(object_points1[i],rvecs1[i],tvecs1[i],intrinsic1, distCoeffs1, imagePoints1);->正常に動作します-たった1つのポイントで2Pixelの差から最大48 * 2*22ポイントを取得しました。しかし、2Dから3Dへの三角測量をこれ以上進めることはできません。私は持っています!あまりにも使用しますcv::triangulatePoints()。どうすればこの作品を手に入れることができますか?

私がこれまでに行ったことは、良い結果が得られずに試みました。最初に、射影行列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));

申し訳ありませんが、これは重く見えますが、回転行列(rodrigues(rvecs1、R1))とtranslationvectortvecs1のみです。これは間違っていますか?回転行列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を使用した後は、4番目のパラメータが次のように削除された「4D」ポイントです。convertPointsHomogeneous(point3d.reshape(4, 1), point3dCam1);

これは私がこれまでに行ったことですが、機能していません。誰かが私が間違っていることを知っていますか?最後のステップで何か間違った考えはありますか?計算を試しましたが、projectionMatrixP1とP2についてはよくわかりません。[R | t]のように構築されていることは知っていますが、それは私のtvecsとtvecsですか?それは転置ですか、それとも逆ですか?どんな助けでも素晴らしいですが、plsはいくつかのコードや明確な手順で私を助けてくれます-私が読んで考える必要があるより多くのリンクではなく、私は本当に研究をしました、私は学習OpenCV本、Op​​enCV2クックブック、そしてここにハートリーとジッサーマンを持っています私の目の前で。しかし、私はそれに到達することはできません。

4

0 に答える 0