12,075,542 members (67,269 online)
Rate this:
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 7-May-13 23:26pm
Edited 8-May-13 17:44pm
v2

Rate this:

## 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]

}
}
}
}
```
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.
Rate this:

## 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
}
}
```

Top Experts
Last 24hrsThis month
 OriginalGriff 566 Richard MacCutchan 479 ProgramFOX 160 F-ES Sitecore 145 Dave Kreskowiak 125
 Dave Kreskowiak 2,796 OriginalGriff 2,690 Richard MacCutchan 1,834 CPallini 1,527 CHill60 1,379