gpt4 book ai didi

Kinect 原始深度到距离(以米为单位)

转载 作者:行者123 更新时间:2023-12-02 06:09:35 24 4
gpt4 key购买 nike

我正在尝试将 Kinect 深度图转换为以米为单位的距离。问题在于,对于深度图值“1080”及其附近,距离太大,因为分母中的项变得非常接近“0”。对于高于“1090”的值,距离为负值。

if (depthValue < 2047) 
{
depthM = 1.0 / (depthValue*-0.0030711016 + 3.3309495161);
}

最佳答案

正确答案实际上是对您的问题的评论。给出的数字实际上是以毫米为单位的距离。要获得此数字,您需要使用骨架关节并调用 DepthImageFrame 的 MapFromSkeletonPoint 或将原始短值右移 DepthImageFrame.PlayerIndexBitmaskWidth。

例如骨架

using (var skeletonFrame= e.OpenSkeletonFrame())
using (var depthFrame = e.OpenDepthImageFrame())
{
skeletonFrame.CopySkeletonDataTo(skeletons);
var skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];

foreach (var skeleton in skeletons)
{
if (skeleton.TrackingState != SkeletonTrackingState.Tracked) continue;

var head = skeleton.Joints[JointType.Head];
if (head.TrackingState == JointTrackingState.NotTracked) continue;

var depthImagePoint = depthFrame.MapFromSkeletonPoint(head.Position);

int depthInMillimeters = depthImagePoint.Depth; // TADA!
}
}

例如转变

using (var depthFrame = e.OpenDepthImageFrame())
{
var depthArray = new short[depthFrame.PixelDataLength];
depthFrame.CopyPixelDataTo(depthArray);

for (int i = 0; i < depthArray.Length; i++) {
int depthInMillimeters =
depthArray[i] >> DepthImageFrame.PlayerIndexBitmaskWidth;
// TADAx2!
}

下面的原始解决方案不再正确:

基于本文的内容 - http://openkinect.org/wiki/Imaging_Information :

if (depthValue <= 2047) {
depthM = 0.1236 * Math.Tan(depthValue / 2842.5 + 1.1863);
}

关于Kinect 原始深度到距离(以米为单位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8824743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com