2016-03-03 156 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中读取很容易。