kinect V2在matlab中从原始深度图像获取真实xyz点,无需VisionKinect中的VisionKinect DepthToSkeleton或depthToPointCloud或pcfromkinect

kinect V2在matlab中从原始深度图像获取真实xyz点,无需VisionKinect中的VisionKinect DepthToSkeleton或depthToPointCloud或pcfromkinect,matlab,kinect,kinect-sdk,openkinect,kinect-v2,Matlab,Kinect,Kinect Sdk,Openkinect,Kinect V2,从原始深度图像获取真实xyz的方法有很多,如vision.internal.visionKinectDepthToSkeleton或depthToPointCloud或pcfromkinect。 问题是这些函数究竟是如何工作的还不清楚。所有这些函数都使用vision.internal.visionKinectDepthToSkeleton,并且visionKinectDepthToSkeleton是一个.p文件并经过加密。 为什么我想知道它们是如何工作的?因为我想为它们编写一个求xyz点的反函数

从原始深度图像获取真实xyz的方法有很多,如vision.internal.visionKinectDepthToSkeleton或depthToPointCloud或pcfromkinect。
问题是这些函数究竟是如何工作的还不清楚。所有这些函数都使用vision.internal.visionKinectDepthToSkeleton,并且visionKinectDepthToSkeleton是一个.p文件并经过加密。
为什么我想知道它们是如何工作的?因为我想为它们编写一个求xyz点的反函数,并将其转换为424*512深度图像
在kinect V1中,有一个将原始深度图像数据转换为xyz的明确公式,但我找不到kinect V2的任何有效解决方案。
对我来说,在matlab环境中工作更好,但可以随意使用任何您想要的工具。

提前谢谢

我有以下代码来完成这项工作。它读取深度图像并将其转换为X、Y、Z值。我可能是从“”论坛上得到的。就内在参数而言,您可以使用我一直使用的值,也可以使用棋盘格模式获得您自己的值

function [Xw, Yw, Zw] = Depth2World_v2(fileName, maxDepth)
% Extrinsic parameters of the depth camera. These values are collected
%from the dicussion forum.
fx=367.286994337726;        % Focal length in X and Y
fy=367.286855347968;
cx=255.165695200749;        % Principle point in X and Y
cy=211.824600345805;
k1=0.0914203770220268;
k2=-0.269349746097515;
k3=0.0925671408453617;
p1=0;
p2=0;

% Read the depth image:
% Ex: fileName = 'depthImg_0018.ppm';
imgPixels = imread(fileName);
% imgPixels = imgPixels (:, end:-1:1);
x3D = zeros(size(imgPixels));
y3D = zeros(size(imgPixels));
z3D = zeros(size(imgPixels));

% Evaluate coordinates from depth image:
[maxR, maxC] = size(imgPixels);
for r=1:maxR
    for c=1:maxC
        % The depth value is equal to intensity. But it is stored in mm.
        d = double(imgPixels(r,c)) / 1000;
        z3D(r,c) = d;
        x3D(r,c) = (c - cx) * z3D(r,c) / fx;
        y3D(r,c) = (r - cy) * z3D(r,c) / fy;
    end
end
下面是一个解释相机模型的例子,根据该模型推导出X、Y和Z的上述方程