Ask Your Question

derivation for perspective transformation matrix (Q)

asked 2018-03-26 11:05:49 -0500

2ros0 gravatar image

updated 2018-03-28 12:22:17 -0500


Opencv uses a perpective transformation matrix Q to convert pixels with disparity value into the corresponding [x, y, z] using the reprojectImageTo3D function. After searching on this site for a bit I found out that the matrix Q is as follows:

Q = |1 0 0 -Cx
    |0 1 0 -Cy
    |0 0 0 f
    |0 0 -1/Tx (Cx - Cx')/Tx

I looked for equations to derive this but couldn't find any. I know about these matrix equations: image description

Is there a way to work back/invert this to get the matrix form of Q or am I missing something?

edit: projection matrices are the follows:

Pright = |F skew Cx F*Tx
         |0 Fy Cy 0
         |0 0 1 0

and a similar one for Pleft without the Tx factor. I guess what I'm looking for is a derivation from the projection matrix Pright to the reprojection matrix Q. I would assume there's an inversion or something to get from one to the other.

Thank you

edit retag flag offensive close merge delete


I thnik you can find your answer here

LBerger gravatar imageLBerger ( 2018-03-26 11:29:00 -0500 )edit

1 answer

Sort by » oldest newest most voted

answered 2018-03-28 15:14:31 -0500

Eduardo gravatar image

Please refer to the following references for more information:

Rectification will make the left and right images fronto-parallel:


Relation between depth of a triangulated point and disparity is the following:


From equation:


you will get [Eq. 1].

In OpenCV notation, depth of a triangulated point is calculated with:


The 4x4 disparity-to-depth mapping matrix Q is:


The relation between 3D point in homogeneous coordinate and disparity is:



Remember that 2D image point expressed in pixel can be converted to meter in the normalized camera frame (Z=1) with:


If left principal point c_x and right principal point c'_x are equals, we get the original equation to compute the depth:


Minus sign should come from if you compute d = (u - u') or d = (u' - u).

As everything is in homogeneous coordinate, 3D point is retrieved with:


edit flag offensive delete link more

Question Tools



Asked: 2018-03-26 11:05:49 -0500

Seen: 5,455 times

Last updated: Mar 28 '18