Open JohnHardy opened 10 years ago
Along with this code:
/// <summary>
/// Returns the depth space coordinates of the specified point in skeleton space.
/// </summary>
/// <param name="lDepthX">The X coordinate of the depth pixel.</param>
/// <param name="lDepthY">The Y coordinate of the depth pixel.</param>
/// <param name="usDepthValue">
/// The depth value (in millimeters) of the depth image pixel, shifted left by three bits. The left
/// shift enables you to pass the value from the depth image directly into this function.
/// </param>
/// <param name="eResolution">
/// A NUI_IMAGE_RESOLUTION value that specifies the resolution of the depth image.
/// </param>
/// <returns>
/// Returns the skeleton space coordinates of the given depth image pixel (in meters).
/// </returns>
inline
Vector4
NuiTransformDepthImageToSkeleton(
_In_ LONG lDepthX,
_In_ LONG lDepthY,
_In_ USHORT usDepthValue,
_In_ NUI_IMAGE_RESOLUTION eResolution
)
{
DWORD width;
DWORD height;
NuiImageResolutionToSize( eResolution, width, height );
//
// Depth is in meters in skeleton space.
// The depth image pixel format has depth in millimeters shifted left by 3.
//
FLOAT fSkeletonZ = static_cast<FLOAT>(usDepthValue >> 3) / 1000.0f;
//
// Center of depth sensor is at (0,0,0) in skeleton space, and
// and (width/2,height/2) in depth image coordinates. Note that positive Y
// is up in skeleton space and down in image coordinates.
//
FLOAT fSkeletonX = (lDepthX - width/2.0f) * (320.0f/width) * NUI_CAMERA_DEPTH_IMAGE_TO_SKELETON_MULTIPLIER_320x240 * fSkeletonZ;
FLOAT fSkeletonY = -(lDepthY - height/2.0f) * (240.0f/height) * NUI_CAMERA_DEPTH_IMAGE_TO_SKELETON_MULTIPLIER_320x240 * fSkeletonZ;
//
// Return the result as a vector.
//
Vector4 v4;
v4.x = fSkeletonX;
v4.y = fSkeletonY;
v4.z = fSkeletonZ;
v4.w = 1.0f;
return v4;
}
Hi there,
This might be helpful for you:
http://stackoverflow.com/questions/16947368/does-kinect-infrared-view-have-an-offset-with-the-kinect-depth-view/19905805#19905805