我使用Kinect SDK用Kinect V2捕获了一组保存的数据。数据以RGB图像、深度图像和彩色点云的形式出现。我用C#来做这个。
现在我想单独创建点云,只使用保存的颜色和深度图像,但在Matlab中。
pcfromkinect Matlab函数需要一个活动的Kinect。但是我想要生成没有连接Kinect的点云。
请告诉我。
我发现了以下相关问题,但都没有明确的线索。
发布于 2016-06-06 08:05:58
我对我的申请也做了同样的工作。下面简要概述一下我所做的工作:
保存数据(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 ReadIn 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 (公式)。
要获得摄像头K,您需要校准您的相机(matlab校准应用程序)或从Kinect-SDK (var cI= kinectSensor.CoordinateMapper.GetDepthCameraIntrinsics();)获取摄影师参数。
coordinateMapper 和SDK
从Kinect SDK直接获取XYZ的方法非常容易。为此,这个链接可以帮助你。只需通过kinect sdk获取缓冲区,并将带有rawData的coordinateMapper转换为xyz即可。然后将其保存到csv或txt中,便于在matlab中读取。
https://stackoverflow.com/questions/35767794
复制相似问题