プロジェクトでは、既知のオブジェクトに対するカメラの実際の位置と向きを計算する必要があります。写真のセットがあり、それぞれが異なる視点からチェス盤を表示しています。CalibrateCamera と solvePnP を使用して、2D でポイントを再投影して、AR のものを取得できます。だから私の状況はそのようなものです:
固有パラメータが知られている
歪み係数は既知です
平行移動ベクトルと回転ベクトルは、写真ごとにわかっています。
カメラの位置を計算する方法がわかりません。私の推測は次のとおりです。
平行移動ベクトルを反転します。(=t')
回転ベクトルを度(ラジアンのように見える)に変換し、逆にする
回転ベクトルにロドリゲスを使用
RotationMatrix * t' を計算します
しかし、結果はどういうわけか完全にずれています...基本的に、ワールド座標の各ピクセルのレイを計算したいと思います。私の問題についてさらに情報が必要な場合は、すぐにお答えいたします。
わからない...どういうわけか、光線はまだオフになっています。これは私のコードです:
Mat image1CamPos = tvecs[0].clone(); //From calibrateCamera
Mat rot = rvecs[0].clone(); //From calibrateCamera
Rodrigues(rot, rot);
rot = rot.t();
//Position of Camera
Mat pos = rot * image1CamPos;
//Ray-Normal (( (double)mk[i][k].x) are known image-points)
float x = (( (double)mk[i][0].x) / fx) - (cx / fx);
float y = (( (double)mk[i][0].y) / fy) - (cy / fy);
float z = 1;
float mag = sqrt(x*x + y*y + z*z);
x /= mag;
y /= mag;
z /= mag;
Mat unit(3, 1, CV_64F);
unit.at<double>(0, 0) = x;
unit.at<double>(1, 0) = y;
unit.at<double>(2, 0) = z;
//Rotation of Ray
Mat rot = stof1 * unit;
しかし、これをプロットすると、光線はオフになります:/