[PCL, OpenCV] OpenCVやPCLでの剛体変換の計算
(To be written)
Case 1: OpenCV系のクラスで剛体変換行列を取り扱う場合
Case 1: OpenCV系のクラスで剛体変換行列を取り扱う場合
こちらのほうがたいへん簡単.PCLを使わなくてもいい時などはこちらで行う方がベター.
たとえば,
cv::Mat transMat( 4, 4, CV_64F );
という行列を考えると,
cv::Point3d point;
という成分を加える最も単純な方法は
transMat.at<double>( 0, 3 ) += point.x;
transMat.at<double>( 1, 3 ) += point.y;
transMat.at<double>( 2, 3 ) += point.z;
とするとよい.回転も同様.
剛体変換行列の合成
cv::Mat transMatA2B, transMatA2C;
が定義されている場合,合成は単に
transMatB2C = transMatA2C * transMatA2B.inv();
のように行える.先の平行移動もすべて行列の形で扱った方が,個人的には見通しが良い
(速度の問題を抱えている場合を除いては…).
すなわち
cv::Mat point;
point = cv::Mat().eye( 4, 4, CV_64F );
transMat.at<double>( 0, 3 ) += point.x;
transMat.at<double>( 1, 3 ) += point.y;
transMat.at<double>( 2, 3 ) += point.z;
transMat * point;