6
$\begingroup$

I would like to get a rough estimate of the depth accuracy / uncertainty of a stereo camera system. For this I would like to use the basic formula in the attached image. What is still unclear to me is what's a reasonable choice for the disparity error $\Delta$D. Unfortunately, for example this answer (in point "Resolution") describes the assumption of the size of the disparity error only very quickly.

Is a reasonable assumption just the width of one pixel? Why yes, why not?

Formula

$\endgroup$

2 Answers 2

3
$\begingroup$

The answer is that the Disparity error depends on the accuracy of the matching algorithm which matches the points in the two images. Some of these algorithms have an accuracy of one pixel, some achieve even sub-pixel accuracy.

$\endgroup$
1
  • 1
    $\begingroup$ That's right but there is also a consideration to be made with the baseline. As your baseline gets larger the depth error decreases, but the stereo matching becomes noisier and less reliable due to ambiguities. If you are using stereo for high-resolution 3D reconstruction you will want to use multi-view reconstruction because it can achieve very clean and high resolution reconstructions. The downside to doing this (essentially structure from motion) is that there is an assumption that the scene is static. If you have a dynamic scene you can use multiple (>2) cameras instead of using SfM. $\endgroup$
    – Gouda
    Mar 9, 2017 at 11:54
2
$\begingroup$

Disparity error varies greatly with the algorithm you're using to compute stereo. There are a number of benchmarks for evaluating the quality of different stereo algorithms. See, for instance

The KITTI benchmark's rankings are based on what percentage of pixels are outliers, where inliers are defined as being disparity error of < 3px or < 5%. Middlebury has a number of different error criteria, but the default is a similar outlier percentage, with a threshold of 2 px error. By looking through some of the other options for Middlebury error metrics, you can see that most algorithms achieve sub-pixel accuracy for the vast majority of pixels, but there are a few percent (or more) of pixels that don't get correct correspondences, which leads to outliers. The errors of these false correspondences are distributed somewhat randomly, so benchmarks opt for these thresholded metrics to avoid being too sensitive to the outliers.

The choice of an appropriate value will therefore depend on what you're trying to model. If you're interested in the common case of being able to find a good match, you can look at the median error on Middlebury (metric A50), which for the leading algorithms is around half a pixel.

Keep in mind, however, that many of these methods are more computationally expensive than is practical for a lot of robotics applications, with runtimes of several seconds. If you're looking for methods that will run at high frame rates, take a look at the "time" metric. A method like Semi-Global Block Matching (SGBM) can run several times per second, but raises median error to 1.27 for SGBM1.

For any of these methods, the error from outliers can be much higher. You could try to characterize the distribution of the error for a more complete picture, though it will depend on your inputs (are they similar to those in the benchmarks?) as well as the choice of algorithm.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.