Click here to Skip to main content
15,883,749 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
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
Updated 8-May-13 16:44pm
v2

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:

C#
//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]                     
                    
                }
          }   
     }
}
 
Share this answer
 
Comments
narayaru 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.
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!

C#
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
                } 
            } 
 
Share this answer
 

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



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900