Matlab 从Kinect V2 RGB和深度图像创建脱机点云

Matlab 从Kinect V2 RGB和深度图像创建脱机点云,matlab,kinect,point-clouds,Matlab,Kinect,Point Clouds,我使用Kinect SDK保存了一组Kinect V2捕获的数据。数据以RGB图像、深度图像和彩色点云的形式存在。我用C#来做这个 现在我想单独创建点云,只使用保存的颜色和深度图像,但使用Matlab Matlab函数需要一个活动的Kinect。但是我想在没有连接的Kinect的情况下生成点云 有什么想法吗 我发现了以下相关问题,但没有一个有明确的线索 我已经为我的申请做了同样的事情。下面是我所做工作的简要概述: 保存数据(C#/Kinect SDK): 如何保存深度图像: Mu

我使用Kinect SDK保存了一组Kinect V2捕获的数据。数据以RGB图像、深度图像和彩色点云的形式存在。我用C#来做这个

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

Matlab函数需要一个活动的Kinect。但是我想在没有连接的Kinect的情况下生成点云

有什么想法吗

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


    • 我已经为我的申请做了同样的事情。下面是我所做工作的简要概述:

      保存数据(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);
      
      要快速保存,请考虑使用ringbuffer

      读取数据(Matlab)

      如何获取z_数据:

      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的针孔模型公式 ()

      要获取cameramatrix K,您需要校准相机()或从Kinect SDK获取cameraparameters(
      var cI=kinectSensor.CoordinateMapper.GetDepthCameraIntrinsics();

      与SDK的协调映射


      直接从Kinect SDK获取XYZ的方法非常简单。这对你有帮助。只需通过kinect sdk获取缓冲区,并使用
      coordinateMapper
      将原始数据转换为xyz即可。然后将其保存到csv或txt,以便在matlab中阅读。

      获取z_数据的代码不起作用。缺少大括号有问题。