win 10+cuda 8.0+vs 2013+kiectv 2+bundlefusionのインストール構成

3859 ワード

設定環境は問題のようです。グラフィックカードはTITAN Xです。
インストールプロセス:
1.設置vs 2013
2.cuda 8.0をインストールする
3.DirectX SDK June 2010をインストールする
4.Kinect SDK 2.0を取り付ける
5.githubからbundlefusionをダウンロードするhttps://github.com/niessner/BundleFusion
6.mLibExtrernalをダウンロードして、bundlefusionと同級のフォルダの下に置く:http://kaldir.vc.in.tum.de/mLib/mLibExternal.zip
7.mLibをダウンロードし、BundeleFusion-master/external/mLibの中に置く:https://github.com/niessner/mLib
8.この時のファイルの位置はこうです。
BundleFusion-master/
  external/
    mLib/ # this is the submodule you replaced
      data/
      src/
      [...]
  FriedLiver/
    [...]
    FriedLiver.sln
    [...]
mLibExternal/ # you downloaded this from Dropbox
  include
  libsWindows
  [...]
9.vs 2013でFriendLiver.slanを開けたら、エラーが出てきます。CUDA 7.0.propsを全部CUDA 8.0.propsに変えたらいいです。修正してプロジェクトを再ロードします。
10.コンパイルを開始します。
オフライン方法を先にコンパイルします。
Global Appstate.hの中でこのように修正します。
//#define KINECT
//#define KINECT_ONE
//#define OPEN_NI
#define BINARY_DUMP_READER
//#define INTEL_SENSOR
//#define REAL_SENSE
//#define STRUCTURE_SENSOR
#define SENSOR_DATA_READER

#define RUN_MULTITHREADED
そしてReleaseでコンパイルして成功しました。
debugでコンパイルしたいなら、mLibExternal/libsWindows/dll 64のFree Image.dllをC:\Windows\System 32とC:\Windows\SysWOW 64に入れてもいいです。
zParameeters Default.txt中のs_をSensorIdxを8に設定し、オフラインモードを使用します。
ダウンロードデータセット:http://graphics.stanford.edu/projects/bundlefusion/
s_をbinaryDumpSensorFile="./data/app 0.sens"あなた自身のデータセットパスに設定します。
プログラムに戻って直接ctrl+f 5で実行すればいいです。注意この時、GPUの原因でプログラムが一時的に終了することがあります。zParameters Default.txtの中の以下のパラメータを調整してみてもいいです。SDFVoxelSize=0.010 fズウ.hashNumSDFBlocks=200000;ドライバを更新します。上記のパラメータ値でオフラインデータを完全に再構成できます。また、最终保存时に最大面数を超えるヒントが出たら、保管モデルの上に穴がたくさんあります。このパラメータを调整できます。marching Cubes MaxNumTriangles=60000; 
Kinect V 2のリアルタイム再構築:
Global Appstate.hの中でこのように修正します。
//#define KINECT
#define KINECT_ONE
//#define OPEN_NI
#define BINARY_DUMP_READER
//#define INTEL_SENSOR
//#define REAL_SENSE
//#define STRUCTURE_SENSOR
#define SENSOR_DATA_READER

#define RUN_MULTITHREADED
そしてDepthSensings.cppに対して以下のように修正します。987行のをください。
bGotDepth = g_CudaImageManager->process()
置換
bool bGotDepth;
while (!(bGotDepth = g_CudaImageManager->process()));
Releaseでコンパイルして成功しました。
zParameeters Default.txt中のs_をsensorIdxを2に設定し、KinectOneを使ってデータ収集を行う。
キンect v 2にアクセスして、プログラムに戻って直接ctrl+f 5で実行すればいいです。
ただし、Kinect V 2のsdkで採集した画像は鏡像であり、私たちの携帯のフロントレンズで撮影した画像のように左右が逆になっていますので、私たちが再構築したシーンモデルも左右逆になっています。
この時、私たちはKinect OneSensore.cppのsetupUnidistortion()関数の中で次のように修正する必要があります。
CameraSpacePoint cameraFrameCorners[4] = //at 1 meter distance. Take into account that depth frame is mirrored
{
  { -principalPointX / focalLengthX, principalPointY / focalLengthY, 1.f }, // LT
  { (1.f - principalPointX) / focalLengthX, principalPointY / focalLengthY, 1.f }, // RT 
  { -principalPointX / focalLengthX, (principalPointY - 1.f) / focalLengthY, 1.f }, // LB
  { (1.f - principalPointX) / focalLengthX, (principalPointY - 1.f) / focalLengthY, 1.f } // RB
};
の各点のx成分を逆に取り、逆のコードを取ると次のようになります。
CameraSpacePoint cameraFrameCorners[4] = //at 1 meter distance. Take into account that depth frame is mirrored
{
  { principalPointX / focalLengthX, principalPointY / focalLengthY, 1.f }, // LT
  { -(1.f - principalPointX) / focalLengthX, principalPointY / focalLengthY, 1.f }, // RT 
  { principalPointX / focalLengthX, (principalPointY - 1.f) / focalLengthY, 1.f }, // LB
  { -(1.f - principalPointX) / focalLengthX, (principalPointY - 1.f) / focalLengthY, 1.f } // RB
};
再運転すると、モデルがミラーリングされません。
成功する
 
 
参考方法:
https://bericht.neopostmodern.com/posts/artist-guide-to-bundlefusion
https://blog.csdn.net/forever__1234/articale/detail/86645567