最近、Kinect のハッキングを始めたので、深度シャドウを削除したいと考えています。影は IR エミッターがカメラの横にわずかに配置されているために発生するため、近くにあるオブジェクトには大きな影が付き、遠くにあるオブジェクトには影がほとんどないか影がなくなります。
影の長さは、影の両側の最も近い点と最も遠い点の間の距離に関連しています。
私の目標は、カラー画像を深度に正しくマッピングできるようにすることです。この図が示すように、これは影を処理しないと機能しません。
深度シャドウは常に黒くなりますか?
その場合、一時的な中央値のような単純な方法を使用して画像の背景を計算し (詳細はこちら: http://www.roborealm.com/help/Temporal_Median.php )、ピクセルが黒の場合はいつでも設定できます。そのピクセル位置の背景値に。
数週間前に、この問題についていくつかの準備作業を行いました。私のコードは深度データではなく WriteableBitmap で直接動作しますが、画像処理のみを行っている場合は動作するはずです。アルゴリズムは完璧ではなく、さらに微調整することでメリットが得られます。コードを更新する場合は、お知らせください。私はあなたが何をしているのか非常に興味があります!
ソースコードは私のブログに掲載されています:
http://richardpianka.com/2011/02/trackingni-depth-correction/
c#でどうなるかはわかりませんが、openni c ++にはxnSetViewPoint()という関数があります。唯一の問題は、変換によって画像データの上位20行程度が失われることです。
その理由は、2つの異なるセンサーを使用しているためです。これらのセンサーは互いに近くに配置されていますが、正確に同じ位置に配置されているわけではありません。
申し訳ありませんが、その影は、推測されたドットが部屋のそのスポットに当たらないように体がブロックしているため、黒いスポットが作成されます...ベースの背景を黒以外の別の色に変更する以外に何もできません目立つ影にはなりません
カラー カメラと kinect 深度カメラは同じ寸法ではなく、赤外線ドットの原点は同じカムからのものではなく、数 cm 離れた IR プロジェクターです (その変位が深度の計算に使用されるため)。
ただし、ここでの解決策は簡単です。シャドウ データは左側にあります。そのため、黒くなる前に最後の既知のカラー データを拡張する必要があります。
それに合わせて、カラーカムデータを右に移動してください。