This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English version of the page.

Note: This page has been translated by MathWorks. Click here to see
To view all translated materials including this page, select Country from the country navigator on the bottom of this page.

Plot colored point cloud from Kinect for Windows

This example shows how to plot color point cloud using the Kinect for Windows v2.

Requirements to run this example

1. MATLAB, Image Acquisition Toolbox and Computer Vision System Toolbox.

2. A Kinect for Windows v2 sensor.

3. Minimum PC configuration: Windows 8 64-bit.

Create system objects for the Kinect v2 device

  colorDevice = imaq.VideoDevice('kinect',1)
  depthDevice = imaq.VideoDevice('kinect',2)
colorDevice = 

  imaq.VideoDevice with properties:

                Device: 'Kinect Color Sensor (kinect-1)'
           VideoFormat: 'RGB_640x480'
                   ROI: [1 1 640 480]
    ReturnedColorSpace: 'rgb'
      ReturnedDataType: 'uint8'
      DeviceProperties: [1x1 imaq.internal.DeviceProperties]

depthDevice = 

  imaq.VideoDevice with properties:

                Device: 'Kinect Depth Sensor (kinect-2)'
           VideoFormat: 'Depth_640x480'
                   ROI: [1 1 640 480]
    ReturnedColorSpace: 'grayscale'
      ReturnedDataType: 'uint16'
      DeviceProperties: [1x1 imaq.internal.DeviceProperties]

Initialize the cameras


Grab one frame from the devices

  colorImage = colorDevice();
  depthImage = depthDevice();

Extract the point cloud

depthDevice must be a Kinect depth videoinput object or a Kinect depth imaq.VideoDevice object.

depthImage must be uint16. colorImage must be uint8.

  ptCloud = pcfromkinect(depthDevice, depthImage, colorImage);

% Initialize a player to visualize 3-D point cloud data. The axis is
% set appropriately to visualize the point cloud from Kinect.
  player = pcplayer(ptCloud.XLimits, ptCloud.YLimits, ptCloud.ZLimits,...
              'VerticalAxis', 'y', 'VerticalAxisDir', 'down');

  xlabel(player.Axes, 'X (m)');
  ylabel(player.Axes, 'Y (m)');
  zlabel(player.Axes, 'Z (m)');

  % Acquire and view Kinect point cloud data.
  while isOpen(player)
     colorImage = colorDevice();
     depthImage = depthDevice();

     ptCloud = pcfromkinect(depthDevice, depthImage, colorImage);

     view(player, ptCloud);

Release the devices


More on Kinect Point Clouds

- The origin of a right-handed world coordinate system is at the center of the camera. The X axis of the coordinate system is pointing to the right, the Y axis is pointing downward, and the Z axis is pointing away from the camera.

- Since the Kinect depth camera has limited range, some pixels in the depth image do not have corresponding 3-D coordinates. The values for those pixels are set to NaN in the Location property of ptCloud.

- Since Kinect was designed for gaming, the original images, colorImage and depthImage, from Kinect are mirror images of the scene. The returned point cloud is corrected to match the actual scene.