5

赤外線ビューと深度ビューを使用して Kinect プロジェクトに取り組んでいます。赤外線ビューでは、CVBlob ライブラリを使用して、関心のある 2D ポイントをいくつか抽出できます。これらの2Dポイントの深さを見つけたいです。だから私は、次のような深度ビューを直接使用できると考えました:

coordinates3D[0] = coordinates2D[0];
coordinates3D[1] = coordinates2D[1];
coordinates3D[2] = (USHORT*)(LockedRect.pBits)
[(int)coordinates2D[1] * Width + (int)coordinates2D[0]] >> 3;

これは深さを得る正しい式ではないと思います。深度ビューで 2D の関心点を視覚化できます。赤外線ビューで点 (x, y) を取得した場合、(x, y) の深度ビューで赤い点として描画します。
赤い点が、(オブジェクト上で) 期待する場所にないことに気付きました。 )。それらの位置には体系的なエラーがあります。

カラービューと深度ビューの対応とは異なり、深度ビューと赤外線ビューは 1 対 1 で対応しているという意見でした。
これは本当に本当ですか、それとも赤外線ビューと深度ビューの間にずれがありますか? オフセットがある場合、どうにかして正しい深度値を取得できますか?

4

4 に答える 4

3

Depth ストリームと Color ストリームは同じポイントから取得されていないため、互いに完全には対応していません。また、FOV(視野)も異なります。

  1. カメラ

    • IR/深度 FOV 58.5° x 45.6°
    • カラー FOV 62.0° x 48.6°
    • カメラ間の距離 25mm
  2. 両方のストリームの 640x480 解像度の修正

    if (valid depth)
     {
     ax=(((x+10-xs2)*241)>>8)+xs2;
     ay=(((y+30-ys2)*240)>>8)+ys2;
     }
    
    • x,y深度画像の座標にあります
    • ax,ayカラー画像でコーディネートを出している
    • xs,ys = 640,480
    • xs2,ys2 = 320,240

    ご覧のとおり、私のkinectには奇妙な y オフセットもあります (x オフセットよりもさらに大きい)。2 m私の変換は、それ以上測定しなかったまでの範囲でうまく機能しますが、それでも機能するはずです

  3. 深さと深さの画像座標から空間座標を修正することを忘れないでください

    pz=0.8+(float(rawdepth-6576)*0.00012115165336374002280501710376283);
    px=-sin(58.5*deg*float(x-xs2)/float(xs))*pz;
    py=+sin(45.6*deg*float(y-ys2)/float(ys))*pz;
    pz=-pz;
    
    • kinectpx,py,pzを基準とした空間の [m] 単位のポイント座標はどこですか

    Z方向が反対のカメラの座標系を使用するため、符号の否定

PS。私は古いモデル 1414 を持っているので、新しいモデルはおそらく異なるキャリブレーション パラメータを持っています。

于 2013-11-11T11:58:56.947 に答える
2

「IR ビュー」と「深度ビュー」の間にオフセットはありません。主にそれらは同じものだからです。

Kinect には 2 つのカメラがあります。RGB カラー カメラと深度カメラ。IR ブラスターを使用して、データの処理時に使用されるフィールド ライト フィールドを生成します。これらは、カラー ビデオ ストリームと深度データ ストリームを提供します。深度データとは別の「IR ビュー」はありません。

ここに画像の説明を入力

アップデート:

それらは実際には同じものです。「深度ビュー」と呼んでいるものは、単に「IR ビュー」のカラー バージョンです。白黒画像は「生」データですが、カラー画像は同じデータの処理済みバージョンです。

Kinect for Windows Toolkitで、プロジェクトを確認しKinectWpfViewersます (例をインストールしたKinectExplorer-WPF場合は、そこにあるはずです)。KinectDepthViewerDepthColorizerクラスがあります。色付きの「深度ビュー」がどのように作成されるかを示します。

更新 2:

私が上で言ったことの下のコメントごとに、ほぼ完全にがらくたです。近い将来、編集するか、回答を完全に削除する可能性がありますが、それまでは、何がどこから来たのかについてのかつての無効な信念の証となります.

とにかく...別の可能な解決策としてCoordinateMapperクラスを見てください。リンクをクリックすると、マネージ コードのドキュメント (私がよく知っているもの) に移動します。C++ のドキュメントを調べて、同等のドキュメントを見つけられるかどうかを確認しています。

これを使用して、標準の色と深度のビューをマッピングしました。IR ビューも同じようにマッピングされる可能性があります (そうでない理由はわかりません) が、100% 確信があるわけではありません。

于 2013-06-05T22:15:17.987 に答える
1

IR ビューと Depth ビューを示すブログを作成しました。

http://aparajithsairamkinect.blogspot.com/2013/06/kinect-infrared-and-depth-views_6.html

IR および深度ビュー

于 2013-06-06T14:24:14.730 に答える
0

このコードは、Kinect のトラッカーの多くの位置で機能します。

coordinates3D[0] = coordinates2D[0];
coordinates3D[1] = coordinates2D[1];
coordinates3D[2] = (USHORT*)(LockedRect.pBits)
[(int)(coordinates2D[1] + 23) * Width + (int)coordinates2D[0]] >> 3;
于 2013-06-06T19:34:37.617 に答える