私のプロジェクトの一部で、アフィン変換された画像のパッチの向きを計算する必要があります。今私の問題は、元の歪みのない画像に対してこの計算された向きを見つける方法がわからないことです。
たとえば、ゆがんだ画像のポイントが見つかります(100,200)。8x8 の隣接ピクセルを使用して、この点の向きを抽出できます。30度だとします。ポイントが見つかった歪んだ画像は、元の画像に各軸 (ピッチ、ヨー、ロール) で 60 度の変換を適用した結果です (この方向抽出は通常、コンピューター ビジョンでは記述子抽出として知られています)。
これで、変換行列がわかりました。変換された画像内の点の向きも既知です。ポイント wrt 参照の位置は既知です (逆変換を使用)。このポイント(100,200)が参照フレーム(たとえば150,250)に移動した場合、新しい方向が何であるかを知りたいです。言い換えれば、参照画像に対する新しい向きは何ですか。
ロール角回転(60度)だけであれば、これは簡単に解決できます。この場合、参照フレームに対する向きは 30+60 = 90 になります。
OpenCVを使用してこれを実装しようとしました:
cv::Mat rvec1(3,1,CV_32F); // rot vector related to B
rvec1.at<float>(0,0)=0;
rvec1.at<float>(1,0)=30*to_RAD;
rvec1.at<float>(2,0)=0;
cv::Mat rvec2(3,1,CV_32F); // rot vector related to A
rvec2.at<float>(0,0)=0;
rvec2.at<float>(1,0)=60*to_RAD;
rvec2.at<float>(2,0)=0;
cv::Mat R_A;
cv::Mat R_B;
cv::Rodrigues(rvec1, R_B);
cv::Rodrigues(rvec2, R_A);
cv::Mat R_combined= R_B*R_A;
cv::Mat rvec_result;
cv::Rodrigues(R_combined,rvec_result);
2 つの回転ベクトルを使用して、回転マット A と B を作成したいと考えています。これら2つを乗算した後、それを回転ベクトルに変換したいのですが、最後の行で実行時エラーが発生するだけです(cv::Rodrigues(R_combined,rvec_result);)
よろしくお願いいたします。