Getting real depth from disparity map

user3291650 picture user3291650 · Apr 13, 2014 · Viewed 12k times · Source

I want to get real distance of an object from stereo camera. I am using OpenCV example code as given in Learning OpenCV O'Reilly book. After getting disparity map I want to use the formula:

distance = focal_length * baseline distance / disparity

The problem is :

  1. I am getting negative values of disparities. How to convert these values so that they might be used in actual depth calculation ?

  2. In above formula focal length and baseline distance are in mm (returned by reprojection matrix) whereas disparity will be in pixels. So the result will be in mm^2/pixel. How to convert disparity value from pixel to mm.

Answer

madduci picture madduci · Sep 17, 2019

You need to perform a camera calibration step first, to get a proper parameters, know as camera matrix.

One you have these values, you can perform a proper computation of the disparity map with the corrected values (the one got from the camera calibration step, know as remapping or undistortion) and then, to obtain the real depth (in mm or meters), you can finally do:

depth = baseline * focal / disparity