2016-03-03 157 views
1

我使用Kinect SDK通過Kinect V2捕獲了一組保存的數據。數據以RGB圖像,深度圖像和彩色點雲的形式呈現。我爲此使用了C#。從Kinect V2 RGB和深度圖像創建脫機點雲

現在我想單獨使用保存的顏色和深度圖像創建點雲,但在Matlab中。

The pcfromkinect Matlab函數需要一個實時Kinect。但是我想在沒有連接Kinect的情況下生成點雲。

任何想法請。

我發現了以下相關問題,但他們都沒有清楚的線索。

回答

1

我已經做了我的應用程序相同。所以在這裏簡要介紹一下我做了什麼:

保存數據(C#/ Kinect的SDK):

如何保存深度圖像:

MultiSourceFrame mSF = (MultiSourceFrame)reference; 
    var frame = mSF.DepthFrameReference.AcquireFrame(); 

    if (frame != null) 
    { 
     using (KinectBuffer depthBuffer = frame.LockImageBuffer()) 
     { 
      Marshal.Copy(depthBuffer.UnderlyingBuffer, targetBuffer,0, DEPTH_IMAGESIZE); 
     } 

     frame.Dispose(); 
} 

寫緩衝區到文件:

File.WriteAllBytes(filePath + fileName, targetBuffer.Buffer); 

爲了快速節省,想一想環形緩衝器。

看書的數據(Matlab的)

如何獲得z_data:

fid = fopen(fileNameImage,'r'); 
img= fread(fid[IMAGE_WIDTH*IMAGE_HEIGHT,1],'uint16'); 
fclose(fid); 
img= reshape(img,IMAGE_WIDTH,MAGE_HEIGHT); 

如何讓XYZ-數據:

對於想想針孔模型公式將uv座標轉換爲xyz (formula)。

要獲取cameramatrix K,您需要校準相機(matlab calibration app)或從Kinect-SDK(var cI= kinectSensor.CoordinateMapper.GetDepthCameraIntrinsics();)獲取相機參數。

coordinateMapper與SDK

從Kinect的SDK獲得XYZ的方式是直接相當容易。爲此,這link可以幫助你。只需通過kinect sdk獲取緩衝區,並將rawData與coordinateMapper轉換爲xyz。之後將它保存爲csv或txt,因此在matlab中讀取很容易。