Ask Your Question

3D coordinates of a colored tracked object with stereo vision

asked 2015-03-19 13:25:31 -0500

scarlett gravatar image

updated 2015-03-20 08:18:11 -0500

Hello, there is a lot of topics about 2D to 3D but I couldn't find my problem in those.

So I use the stereo_camera_calibration to find the parameters of my cameras. ( I followed this blog : [] ) Then I am using this relation to deduce the 3D coordinates of my object :

result = dot(self.Q, vect)
print "X=", result[0]/result[3]," Y= ",result[1]/result[3]," Z= ", result[2]/result[3]

where x and y are the coordinate on the image and dx is the difference between the x of the 2 cameras and Q the opencv matrix

What I get : X= [-81.16746711] Y= [ 87.00418513] Z= [-826.69658138] I don't understand how to use those results When moving the object coordinates "follows" the increase or the decrases

At the moment I am just focusing on trying to set up the Z.

How can I find a relation between my results and the coordinates of the object in " the world" ?

EDIT : The relation between disparity and real depths are not linear so that explain why just trying to fix a coeficient didn't solved my problem. Is it possible to calculate the absolute distance between the camera and an object? Or maybe I need to use a landmark near my object to deduce the relative distance between the object and the landmark?

edit retag flag offensive close merge delete


You may need to divide your disparity result by 16. Look at the documentation for BM and SGM. Another thing is you will need to adjust you calibration matrices if they were calibrated for a different image resolution then the resolution at which your are performing stereo correspondence. Also, there are built in function to do this for you, reprojectImageTo3D.

Der Luftmensch gravatar imageDer Luftmensch ( 2015-03-20 10:54:54 -0500 )edit

Thank you for your message. ReprojectImageTo3D is usefull but i is more understandable to me to write the calculus in an explicit way ... But because of that I get an error though .

scarlett gravatar imagescarlett ( 2015-03-24 08:16:33 -0500 )edit

1 answer

Sort by ยป oldest newest most voted

answered 2015-03-24 08:13:02 -0500

scarlett gravatar image

OK so it seems a division by 0 were hided somewhere :

I change my calcul with :

dx = float(cx - self.last_left_image_pos[0])
W =  abs(dx * self.Q[3][2]) + self.Q[3][3]
X = (cx+ self.Q[0][3])/(W*self.ratio)
Y = (cy+ self.Q[1][3])/(W*self.ratio)
Z =  self.Q[2][3]/(W*self.ratio)

with self.ratio = 105.32

Then I get some accurate results ...don't ask me about self.ratio, I think it is linked to the resolution because I don't need to change it even if my calibration parameters has changed, but I am still trying to figure it out

edit flag offensive delete link more

Question Tools



Asked: 2015-03-19 13:25:31 -0500

Seen: 1,074 times

Last updated: Mar 24 '15