derivation for perspective transformation matrix (Q)

Hi,

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:

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 close merge delete

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

Sort by » oldest newest most voted

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:

more