首页 文章

从Kinect V2 RGB和深度图像创建离线点 Cloud

提问于
浏览
1

我使用Kinect SDK通过Kinect V2捕获了一组保存的数据 . 数据采用RGB图像,深度图像和彩色点 Cloud 的形式 . 我用C#这个 .

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

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

请问任何想法 .

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

1 回答

  • 2

    我已经为我的申请做了同样的事情 . 所以这里简要介绍一下我做了什么:

    Save the data (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);
    

    为了快速节省考虑一个环形缓冲区 .

    ReadIn the data (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 with the SDK

    从Kinect SDK直接获取XYZ的方法非常简单 . 为此,link可以帮助你 . 只需通过kinect sdk获取缓冲区并将rawData与 coordinateMapper 转换为xyz . 然后将其保存到csv或txt,因此很容易在matlab中读取 .

相关问题