我为我的应用程序做了同样的事情。所以这里简要概述一下我做了什么:
保存数据(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阅读。