从Kinect V2 RGB和深度图像

时间:2016-03-03 09:15:53

标签: matlab kinect point-clouds

我使用Kinect SDK通过Kinect V2捕获了一组已保存的数据。数据采用RGB图像,深度图像和彩色点云的形式。我为此使用了C#。

现在我想仅使用保存的颜色和深度图像分别创建点云,但是在Matlab中。

pcfromkinect Matlab函数需要一个实时Kinect。但我想生成没有连接Kinect的点云。

请知道。

我发现了以下相关问题,但没有一个有明确的线索。

1 个答案:

答案 0 :(得分:2)

我为我的申请做了同样的事情。所以这里简要概述了我所做的:

保存数据(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();)获取相机参数。

带有SDK的

coordinateMapper

直接从Kinect SDK获取XYZ的方法非常简单。为此,link可以帮助你。只需通过kinect sdk获取缓冲区,并将带有coordinateMapper的rawData转换为xyz。然后将其保存到csv或txt,这样便于在matlab中阅读。