私のプロジェクトでは、x、y をピクセルで、Z をカメラからの距離を mm で計算しています。だから私は深さを利用してx、y、zを計算したい。
どうすればそれができるか教えてもらえますか?
次の情報があります。
- 画像から取得した x,y ピクセル
- カメラからの距離とオブジェクト カメラとオブジェクトからの距離は、さまざまな距離から画像を作成しているため、変化し続けます
私のプロジェクトでは、x、y をピクセルで、Z をカメラからの距離を mm で計算しています。だから私は深さを利用してx、y、zを計算したい。
どうすればそれができるか教えてもらえますか?
次の情報があります。
画像座標に x、y、カメラ行列、ワールド座標に z がある場合、画像座標を同次ベクトルに入れ、カメラ行列の逆数を掛けてから、z_world 座標を掛ける必要があります。最初は直感的ではないかもしれませんが、ワールド座標の単位は関係ありません。カメラ行列の逆数を掛けた後、単位のない比率 x/z を定義しました。z_world を掛けて、結果の単位を指定します。mm、インチ、マイルなどで測定でき、結果のベクトルは同じ単位になります。
cv::Matx31f world_cord(x_im,y_im,1); //here measured in pixels
world_cord = camera_matrix.inv()*world_cord; //representing a ratio x/z,y/z
world_cord *= z_world; //now x,y,z are measured in units of z_world
world_cord に x_world、y_world、z_world が含まれるようになりました。