OpenCVのestimateAffine3D()関数を使用して、3Dの2セットの同一平面上の点間のアフィン変換を取得しようとしています。1つの変数を定数にすると、その変数の変換コンポーネントに定数エラーがあることがわかります。
私のテストコードは次のとおりです。
std::vector<cv::Point3f> first, second;
std::vector<uchar> inliers;
cv::Mat aff(3,4,CV_64F);
for (int i = 0; i <6; i++)
{
first.push_back(cv::Point3f(i,i%3,1));
second.push_back(cv::Point3f(i,i%3,1));
}
int ret = cv::estimateAffine3D(first, second, aff, inliers);
std::cout << aff << std::endl;
私が期待する出力は次のとおりです。
[1 0 0 0]
[0 1 0 0]
[0 0 1 0]
編集:私の期待は正しくありません。z座標が一定の場合、行列は[R|t]に分解されません。
しかし、私が得たものは(読みやすさのためにいくつかの丸めを加えて)次のとおりです。
[1 0 0 0]
[0 1 0 0]
[0 0 0.5 0.5]
この動作を修正する方法はありますか?2Dポイントのセットで同じことを行う機能はありますか?