5

私はチェス盤に相当するカメラを持っています。ポイントの世界の3D位置と、カメラ画像上の対応する投影ポイントの2D位置を知っています。すべてのワールド ポイントは同じ平面に属します。私はsolvePnPを使用しています:

Matx33d camMat;
Matx41d distCoeffs;
Matx31d rvec;
Matx31d tvec;
std::vector<Point3f> objPoints;
std::vector<Point2f> imgPoints;
solvePnP(objPoints, imgPoints, camMat, distCoeffs, rvec, tvec);

次に、projectPoints を使用して 3D ワールド ポイントから 2D イメージ ポイントに移動できます。

std::vector<Point2f> projPoints;
projectPoints(objPoints, rvec, tvec, camMat, distCoeffs, projPoints);

projPoints は imgPoints に非常に近いです。

同じ平面に属する 3D ワールド ポイントに対応するスクリーン ポイントで逆を行うにはどうすればよいですか。単一のビューから 3 次元の位置を再構築することはできないことはわかっていますが、ここでは同じ平面にいるので、実際には 2 次元の問題です。逆回転行列と逆平行移動ベクトルを計算できますが、どうすればよいですか?

Matx33d rot;
Rodrigues(rvec, rot);
Matx33d camera_rotation_vector;
Rodrigues(rot.t(), camera_rotation_vector);
Matx31d camera_translation_vector = -rot.t() * tvec;
4

2 に答える 2

1

この質問は、質問者が適切に解決策を提供する別の Stackoverflow の質問の複製のようです。ここにリンクがあります: 答えはここにあります:画像点からの x,y 座標 (3D) の計算

于 2015-12-09T18:52:36.990 に答える