【问题标题】:Offline point cloud creation from Kinect V2 RGB and Depth images从 Kinect V2 RGB 和深度图像创建离线点云
【发布时间】:2016-06-16 12:29:17
【问题描述】:

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

现在我想只使用保存的颜色和深度图像单独创建点云,但在 Matlab 中。

pcfromkinect Matlab 函数需要实时 Kinect。但我想在没有连接 Kinect 的情况下生成点云。

请有什么想法。

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

【问题讨论】:

    标签: matlab kinect point-clouds


    【解决方案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)。

    要获取相机矩阵 K,您需要校准相机 (matlab calibration app) 或从 Kinect-SDK (var cI= kinectSensor.CoordinateMapper.GetDepthCameraIntrinsics();) 获取相机参数。

    coordinateMapper 使用 SDK

    直接从 Kinect SDK 获取 XYZ 的方式相当简单。为此,link 可以帮助您。只需通过 kinect sdk 获取缓冲区并将带有coordinateMapper 的 rawData 转换为 xyz。之后保存为csv或txt,便于matlab阅读。

    【讨论】:

    • 获取z_data的代码不起作用。缺少大括号有问题。
    猜你喜欢
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    相关资源
    最近更新 更多