ARToolKitのtwoView その③ 特徴点の距離検出
長い時間上手くいかず悩んでいましたが、やっとそれらしい結果が出るようになりました。
前回の特徴物体の位置から、物体までの距離を求めます。
参考にしたのは、以下の動画です。
この方は、他にもARToolKitと物理演算を合わせたりと、かなり高度なことをやっています。
今回は、簡単な三角測量を用いて距離計算を行っています。
簡単なケースでは、2つのカメラの向きを平行にして、Y・Z座標の位置も同じにします。
ちなみに失敗していた理由は、VIEW_SCALEFACTORという値を考えていなかったからでした。
これは、ARToolKitの長さの単位から、OpenGLの単位へ変換するときに必要になります。
まだ誤差などがあるようなので、これから調整します。
--------- < 追記 > ---------
○08/05/29
誤差が安定してきたので、処理を大まかに説明。
前回(その②)の各カメラでの、特徴点のスクリーン座標系の位置を取得。
これを、透視投影変換の逆行列を使って、カメラ座標系の位置に変換。
また、その①で求めたカメラ間の変換行列から、カメラのX座標系での距離を取得しておく。
そこで、以下の計算を行う。
1.a = カメラ間のXの距離 / (カメラ1での特徴点のX座標 - カメラ2での特徴点のX座標)
2.カメラ1の特徴点の座標(カメラ座標系)をa倍する。
3.2の結果が、特徴点で示した物体の3次元空間上での座標(カメラ座標系)になる。
4.カメラ1で、マーカーからの変換行列の逆行列を計算しておく
5.2の結果に対し、4の逆行列をかけて、マーカー座標系での特徴物体の座標を計算する。
6.5に対し、VIEW_SCALEFACTORをかけて、OpenGLの長さの単位にする。
このようにして、出た座標を表示すると、最初のような画像になります。
画像では、[マーカー座標系の原点]から[特徴物体の真下]までの線と、そこから[特徴物体]までの線を描画しています。
○08/05/30
まだ微妙な誤差がありましたが、三角測量の倍数の計算で、
X値だけじゃなくY値も入れた距離で計算したら上手くいきました。
前回の特徴物体の位置から、物体までの距離を求めます。
参考にしたのは、以下の動画です。
この方は、他にもARToolKitと物理演算を合わせたりと、かなり高度なことをやっています。
今回は、簡単な三角測量を用いて距離計算を行っています。
簡単なケースでは、2つのカメラの向きを平行にして、Y・Z座標の位置も同じにします。
ちなみに失敗していた理由は、VIEW_SCALEFACTORという値を考えていなかったからでした。
これは、ARToolKitの長さの単位から、OpenGLの単位へ変換するときに必要になります。
まだ誤差などがあるようなので、これから調整します。
--------- < 追記 > ---------
○08/05/29
誤差が安定してきたので、処理を大まかに説明。
前回(その②)の各カメラでの、特徴点のスクリーン座標系の位置を取得。
これを、透視投影変換の逆行列を使って、カメラ座標系の位置に変換。
また、その①で求めたカメラ間の変換行列から、カメラのX座標系での距離を取得しておく。
そこで、以下の計算を行う。
1.a = カメラ間のXの距離 / (カメラ1での特徴点のX座標 - カメラ2での特徴点のX座標)
2.カメラ1の特徴点の座標(カメラ座標系)をa倍する。
3.2の結果が、特徴点で示した物体の3次元空間上での座標(カメラ座標系)になる。
4.カメラ1で、マーカーからの変換行列の逆行列を計算しておく
5.2の結果に対し、4の逆行列をかけて、マーカー座標系での特徴物体の座標を計算する。
6.5に対し、VIEW_SCALEFACTORをかけて、OpenGLの長さの単位にする。
このようにして、出た座標を表示すると、最初のような画像になります。
画像では、[マーカー座標系の原点]から[特徴物体の真下]までの線と、そこから[特徴物体]までの線を描画しています。
○08/05/30
まだ微妙な誤差がありましたが、三角測量の倍数の計算で、
X値だけじゃなくY値も入れた距離で計算したら上手くいきました。
