2013-05-21 30 views

回答

3

您可以輕鬆地將3d座標保存到PLY format。下面是使用ofxKinect一個基本的例子:

void exportPlyCloud(string filename, ofMesh& cloud) { 
    ofFile ply; 
    if (ply.open(filename, ofFile::WriteOnly)) {   
     // write the header 
     ply << "ply" << endl; 
     ply << "format binary_little_endian 1.0" << endl; 
     ply << "element vertex " << cloud.getVertices().size() << endl; 
     ply << "property float x" << endl; 
     ply << "property float y" << endl; 
     ply << "property float z" << endl; 
     ply << "end_header" << endl; 

     // write all the vertices 
     vector<ofVec3f>& surface = cloud.getVertices(); 
     for(int i = 0; i < surface.size(); i++) { 
      if (surface[i].z != 0) { 
       // write the raw data as if it were a stream of bytes 
       ply.write((char*) &surface[i], sizeof(ofVec3f)); 
      } 
     } 
    } 
} 

然後可以使用MeshLab處理/施蒂希PLY文件,然後導出另一種格式像OBJ。與openFrameworks相關的,你可以在這個workshop找到一些方便的例子,包括上面的PLY導出。

保存到PLY將解決問題的一部分,你需要手動stich,這可能是耗時的。您需要SLAM(同時定位和映射)或其他重建算法來幫助將事物縫合在一起。你可以在OpenSLAM找到一個很好的算法集合。

現在取決於您的編碼舒適度水平有幾個選項來幫助。 我還建議看看RGBDemo構建的軟件具有重建功能。這不需要編碼,除非你想(因爲它是開源的)。

通過一些編碼,您還可以使用PointCloudsLibrary(PCL)進行重構。 如果還包括一個implementation of KinectFusion

PCL Kinfu preview 1 PCL Kinfu preview 2

如果您使用的是微軟Kinect SDK,Kinect Fusion被納入Kinect SDK 1.7

KinectFusion in Kinect SDK 1.7

您可能還會發現這個帖子有意思:Kinect Fusion inside AutoCAD

+0

這個人太棒了!真的非常感謝這個解決方案,我一直在尋找類似的東西。 :) – VVZen

0

kinect爲您提供深度圖像。這是一幅具有不同灰色陰影的圖像,用於指示距離傳感器有多遠。
圖像中的任何像素使用深度值的16位或13位(當僅使用13位時,最後3位用於播放器ID)。
您可以將圖像保存爲.bmp,例如...或將其轉換爲您更喜歡的任何其他格式。

我不完全確定你想如何重建你的房間。
該kinect不能一次捕捉整個房間,所以你將不得不至少把你的kinect捕捉整個房間。

你想實現什麼樣的重建? 它只是一個灰度圖像,或者你想要到牆壁和物體的距離以及它們的尺寸嗎?
如果後者是這種情況,你應該處理圖像。
如果前者是這種情況,您可以將單張照片粘貼在一起以形成全景或立方體,無論您喜歡什麼。

我希望你能得到一些有用的信息。隨時詢問有關不確定性。

+0

我試圖通過旋轉kinect重建房間。最後,我想測量我的房間的尺寸。這就是爲什麼我問它是否可以轉換成通用的3D格式。謝謝。 – prgbenz