Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: C# Kinect SDK
Hi,

I am trying to get the Z coordinate value(depth) for a specified X,Y values on a depthframe/ (even color frame if that's possible) in microsoft SDK for Kinect. My ultimate aim is to detect a coloured object and track the depth value of that object on the screen. Right now what I have is an algorithm to track the coloured object on screen and give back the (x,y) coordinate value from the 320x240 image dynamically using AForge.net library. Next step for me is to use this x,y values and get the z-position with the help of the depth stream. I am using C# to achieve this functionality. Any pointers on how would i do it or links to those who have done similar thing would be much appreciated. FYI, there may not be any human skeleton on the image so skeleton joint tracking is not what I want.

From KinectStudio (the program to record all the Kinect data), if I turn on the View>Depth, I get the image as shown in https://dl.dropboxusercontent.com/u/49447650/depth.png The X,Y and Depth values will be shown where the mouse is pointed at in this at the bottom of the image. This is very similar to what I want as well, but on a colour frame.
Posted 7-May-13 23:26pm
Edited 8-May-13 17:44pm
v2
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

You can do a an Array of Matrixes (NOTE Matrix must be a structure where you save R, G, B)
 
it will look something like this:
 
 
//set them how you wish
int MaxX = 30;
int MaxZ = 30;
int MaxY = 30;
 
public struct ColorM
{
    int R;
    int G;
    int B;
}
 
ColorM[,,] Area = new ColorM[MaxZ,MaxY,MaxX];
 
void Main(string[] args)
{
     Program p = new Program(); 
     for(int z = 0; z < 30; z+)
     {
          for(int y = 0; y < 30; y++)
          {
                for(int y = 0; y < 30; y++)
                {
                    //p.Area[z,y,z]                     
                    
                }
          }   
     }
}
  Permalink  
Comments
narayaru at 8-May-13 22:42pm
   
Hi Dimitrov, thanks for the reply! Sorry, I don't quite understand how to retrieve the Z coordinate value for a specified (X,Y) value from the code you suggested above. Please take a look at the picture that I attached to see what I meant. Btw, I am using c# wpf, its not important though.
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 2

I figured out the basic method. thanks to: http://www.i-programmer.info/ebooks/practical-windows-kinect-in-c/3802-using-the-kinect-depth-sensor.html
 
May be not very accurate in colour frame, but for now I am happy!
 
using (DepthImageFrame dframe = _sensor.DepthStream.OpenNextFrame(0)) 
            {
                if (dframe != null) 
                {
                    short[] pixeldata = new short[dframe.PixelDataLength];
                    dframe.CopyPixelDataTo(pixeldata);
                    int x = **//specify x value here
                    int y = **//specify y value here
                    int d = (ushort)pixeldata[x + y * dframe.Width];
                    d = d >> 3;//this is distance in mm
                } 
            } 
 
  Permalink  

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 OriginalGriff 587
1 Sergey Alexandrovich Kryukov 479
2 Maciej Los 305
3 BillWoodruff 220
4 Mathew Soji 195
0 OriginalGriff 7,356
1 Sergey Alexandrovich Kryukov 6,817
2 DamithSL 5,461
3 Manas Bhardwaj 4,946
4 Maciej Los 4,475


Advertise | Privacy | Mobile
Web03 | 2.8.1411023.1 | Last Updated 9 May 2013
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100