Depth map of a static scene varying over time in OpenNI2



I’m using the sensor with a Mac OS X computer and OpenNI2 v2.2. When I point the sensor into a static scene (e.g. a wall), without moving the sensor, and analyze the depth of a point in the image over time, I get varying values. Not just noise, it seems that the depth is converging to some value. If I print the depth of such point into the terminal, I can see that it can vary more than 5cm in 1 minute. It starts in a given value, and then slowly decreases until it reaches the new value. If it started, for instance, at 1900mm, it would end approximately at 1960mm.

Is there any type of filtering/estimation algorithm in the device that can produce this behavior? If that is the case, can I disable it? I’m programming an application where it is very important to always get the same depth value for a given static point (with an error below 1 or 2 cm).

This behavior if more visible for image points that are far away from the image center. I think you should be able to replicate the error by modifying the main.cpp file in the SimpleRead sample. Just change the line “int middleIndex = (frame.getHeight()+1)*frame.getWidth()/2;” into “int middleIndex = 25664;” for instance.

Thanks in advance.


I believe the sensor has a warm up time. Are you seeing this drift from a cold start only?

I would unplug the sensor and let it cool for 10 minutes, then run your tests. Then compare those results with restarting the program after its been running for a while.

I’d be curious to know what your results are.


@cesar Also, you should have a look at the following page to get an idea of the precision of the Structure Sensor at various distances:

At about 2 m (roughly 1900mm), the precision of the Sensor is within .6%. That means that at 2000 mm the precision of the measurements might be off by 12 mm or so. Take into account that the accuracy of the sensor is anywhere between 1-2% for individuals who are experienced with using the Structure Sensor, which means you should see 10-20 mm deviance in measurements at 1m.

Let us know if this information helps!


Sorry but .6% of 2000 mm is 12 mm, not 120 mm


@anthony.monaco I’m having depth variations on the order of 3%, which is much larger than the expected 0.6%.

@Treo The behavior of the sensor is the same if I run the program after a cold start or after having the program running for a while.

If anyone can run the SimpleRead sample with the small modification I mentioned (changing the line “int middleIndex = (frame.getHeight()+1)*frame.getWidth()/2;” into “int middleIndex = 25664;” and analyzing the depth values that are printed into the screen) I think you’d see the same behavior I observe.


Ahh, you are correct! I should have double checked my mental math before posting.



That is the precision of the Structure Sensor and not the accuracy. The accuracy is closer to 2% at .5 - 1 m distance, and more than that if you are scanning at larger distances than that. Since 2 meters is double the recommended distance, the accuracy will be less. This seems to correlate to your depth variation at 3%.

@cesar Could you try to run the SimpleRead Sample at .5-1 m distance to see what kind of accuracy you are getting? Thanks!

I am going to be running the SimpleRead sample this week with the modifications you mentioned, so I’ll let you know what I find out.

Edited: details and added information about accuracy at certain distances.


I think that the variations that I observe fall within the scope of the precision of the sensor. In other words, my observations would mean that the precision of the sensor is 3% at 2m, which is not in accordance with the 0.6% in the precision plot.

I have run the SimpleRead Sample (with the modifications that I mentioned) for a static scene, and observed the depth of a static point at approximately 0.7 m. I plotted the results, and as you can see, there is clearly a transient in the depth of the static point. It starts at 737 mm, reaches its maximum at 742 mm, and then decreases to 731 mm. The maximum variation is 13 mm. If we try to (visually) filter out the noise to get a smooth curve, we get a variation of approximately 7 mm (from 738 to 731 mm), which is ~1% (much higher than the expected ~0.3%).


Hi Anthony, did you reach any conclusion regarding this issue?


The precision of the Structure Sensor is .3% at a distance of .5 to 1 m away. However, the quality of results will vary widely depending on software used. That is for precision and not accuracy.

We find that with some of our software and from what we have seen working with professionals in the field is that, most measurements are within 1-2% when verified against a manual tape measure or existing blueprints.

It seems to me that the variation you are seeing in your depth measurements might be from OpenNI 2 and not the Structure Sensor itself.

If you’d like to use the Stgructure Sensor in the most accurate enviornment available, I would recommend using our Structure SDK found here:

Hope this helps!


I am jumping late on this thread, the only issue with this is that the SDK is only for ios… I would be interested in knowing the format of the raw data from the sensor as well as the transformation algorithm used to obtain and filter the point cloud. Will there be a port of the SDK to windows and android?