Matlab 从Kinect V2 RGB和深度图像创建脱机点云
我使用Kinect SDK保存了一组Kinect V2捕获的数据。数据以RGB图像、深度图像和彩色点云的形式存在。我用C#来做这个 现在我想单独创建点云,只使用保存的颜色和深度图像,但使用Matlab Matlab函数需要一个活动的Kinect。但是我想在没有连接的Kinect的情况下生成点云 有什么想法吗 我发现了以下相关问题,但没有一个有明确的线索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
- 我已经为我的申请做了同样的事情。下面是我所做工作的简要概述:
保存数据(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_数据的代码不起作用。缺少大括号有问题。