![](/img/trans.png)
[英]I created a graph in ZedGraph how can i make the Graph size bigger like 1920X1080?
[英]How can I convert color stream (1920x1080) into depth stream(512x424) in Kinect V2 using matlab or C#
Kinect V2颜色流支持的格式是:1920x1080。 但kinect V2深度流格式为:512x424。 现在,当我为两个传感器开始实时运行时,由于分辨率不同,它们的尺寸也有所不同。 我无法调整它们的大小,因为我需要坐标。 所以当我使用Imresize()调整大小时,坐标不匹配。 我已经阅读过matlab文档,他们说硬件只支持这两种格式,现在我该如何在代码中做到这两个流具有相同的分辨率。 我尝试了两天,但是失败了。此外,我想通过任何方法进行操作,以便拍摄第一张深度图像,并基于此深度分辨率拍摄RGB或彩色图像。
我的项目是从深度图像中提取线条并将其映射到kinect v2的RGB图像上。 但是那里的分辨率不一样。 因此[x,y]坐标发生了变化。 因此,当我将其映射到RGB时,它与深度图像的坐标不匹配。 我该如何解决? 我以为我会改变分辨率,但在kinect V2中无法更改分辨率。现在我该如何在编码中做到这一点。
在c#中,您可以使用CoordinateMapper将点从一个空间映射到另一个空间。 因此,要从深度空间映射到颜色空间,您需要连接到颜色和深度源的MultiSourceFrameArrived事件,并创建一个像这样的处理程序
private void MultiFrameReader_MultiSourceFrameArrived(object sender, MultiSourceFrameArrivedEventArgs e)
{
MultiSourceFrame multiSourceFrame = e.FrameReference.AcquireFrame();
if (multiSourceFrame == null)
{
return;
}
using (ColorFrame colorFrame = multiSourceFrame.ColorFrameReference.AcquireFrame())
{
if (colorFrame == null) return;
using (DepthFrame depthFrame = multiSourceFrame.DepthFrameReference.AcquireFrame())
{
if (colorFrame == null) return;
using (KinectBuffer buffer = depthFrame.LockImageBuffer())
{
ColorSpacePoint[] colorspacePoints = new ColorSpacePoint[depthFrame.FrameDescription.Width * depthFrame.FrameDescription.Height];
kinectSensor.CoordinateMapper.MapDepthFrameToColorSpaceUsingIntPtr(buffer.UnderlyingBuffer, buffer.Size, colorspacePoints);
//A depth point that we want the corresponding color point
DepthSpacePoint depthPoint = new DepthSpacePoint() { X=250, Y=250};
//The corrseponding color point
ColorSpacePoint targetPoint = colorspacePoints[(int)(depthPoint.Y * depthFrame.FrameDescription.Height + depthPoint.X)];
}
}
}
}
colorspacePoints数组为depthFrame中的每个像素包含colorFrame中的对应点。您还应该检查targetPoint是否具有X或Y无穷大,这意味着目标空间中没有对应的像素
对于工作示例,您可以检查VRInteraction 。 我将深度图像映射到RGB图像以建立3D点云。
您想要实现的目标称为注册 。
校准RGB相机以找到RGB相机投影矩阵(使用opencv)
-您可以将深度图像注册为RGB图像:
它映射给定深度图像的相应RGB像素。 最终将获得1920x1080 RGB深度图像的分辨率。 由于深度像素较少,因此并非所有RGB像素都具有深度值。 为此,您需要
使用先前计算的RGB像素坐标找到RGB图像中的匹配像素
-您可以将RGB图像图像注册到深度图像:
这将映射给定RGB图像的相应深度像素。 最终将获得512x424 RGB深度图像的分辨率。 为此,您需要
如果要实时实现这一目标,则需要考虑使用GPU加速。 特别是如果您的“深度”图像包含超过30000个深度点。
我就此事写了硕士论文。 如果您还有其他问题,我们非常乐意为您提供帮助。
您将需要重新取样( imresize
在Matlab)如果要覆盖两个阵列(例如创建RGBD图像)。 注意,视场在深度和颜色上是不同的,即,彩色图像的最右边和最左边不是深度图像的一部分,深度图像的顶部和底部不是彩色图像的一部分。
因此,您应该
imresize
重新采样彩色或深度图像
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.