Kinect と OpenCV を使用してフィンターチップの座標を Flash にエクスポートし、ゲームやその他のプログラムで使用するプロジェクトに取り組んでいます。現在、セットアップは色に基づいて機能し、指先のポイントを (x、y、z) 形式で Flash にエクスポートします。x と y はピクセル単位、z はミリメートル単位です。
ただし、Flash 内の z 深度値を使用して、これらの (x, y) 座標をミリメートルなどの「実世界」の値にマップする必要があります。
私が理解しているように、Kinect 3D の深度は、X 軸をカメラの水平方向に、Y 軸をカメラの垂直方向に、Z 軸をカメラのレンズから直接前方に投影することによって得られます。深度値は、任意のオブジェクトから XY 平面に引いた垂線の長さです。以下のリンクの写真を参照してください (Microsoft の Web サイトから取得)。
また、Kinect の水平視野は 117 度の角度で投影されることがわかっています。
この情報を使用して、任意の点の深度値を x=0、y=0 の線に投影し、その点で XY 平面に平行でカメラの視野と交差する水平線を引くことができると考えました。問題のオブジェクトの深さの高さで、半分に分割された三角形になります。次に、少し三角法を使用して視野の幅を解くことができます。私の方程式は次のとおりです。
W = tan(シータ / 2) * h * 2
どこ:
- W = 視野幅
- theta = 水平視野角 (117 度)
- h = 深度値
(写真は載せられないので、できれば載せます)
ここで、深さの値 1000mm (1 メートル) を解くと、約 3264mm の値が得られます。
しかし、生成されたカメラ画像を実際に見ると、異なる値が得られます。つまり、カメラから 1 メートル離れた場所にメーター スティックを置いたところ、フレームの幅が計算で推定された 3.264 メートルではなく、最大で 1.6 メートルであることに気付きました。
私がここに欠けているものはありますか?どんな助けでも大歓迎です。