我使用Kinect SDK通过Kinect V2捕获了一组已保存的数据。数据采用RGB图像,深度图像和彩色点云的形式。我为此使用了C#。
现在我想仅使用保存的颜色和深度图像分别创建点云,但是在Matlab中。
pcfromkinect Matlab函数需要一个实时Kinect。但我想生成没有连接Kinect的点云。
请知道。
我发现了以下相关问题,但没有一个有明确的线索。
答案 0 :(得分:2)
我为我的申请做了同样的事情。所以这里简要概述了我所做的:
保存数据(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)。
要获取cameramatrix K,您需要校准相机(matlab calibration app)或从Kinect-SDK(var cI= kinectSensor.CoordinateMapper.GetDepthCameraIntrinsics();
)获取相机参数。
coordinateMapper
:
直接从Kinect SDK获取XYZ的方法非常简单。为此,link可以帮助你。只需通过kinect sdk获取缓冲区,并将带有coordinateMapper
的rawData转换为xyz。然后将其保存到csv或txt,这样便于在matlab中阅读。