0
votes

I want to transform 3D points to 2D points in the image space. According to hartley and zisserman book Multiview Geometry, we only need 6 points to calculate the camera projective matrix with DLT and i did it. With the matrix i am able to reproject the points accurately.

Although the projection matrix is working properly but the intrinsic parameters extract from it are not and it's off by few mm everytime.

Below is the example of Intrinsic Parameter i able to extract

10502.9 , -257.128 , 1831.12 

0      ,  10425.8  ,  -390.996

0      ,   0     , 1        

The sensor size/pixel of my camera is 1.85um, so my focal length calculated with the intrinsic param is about 19mm but according to the vendor specification it is around 16mm.

I would like to clear some doubt about

  1. Is the calculation on my focal length correct and why are some value in the intrinsic parameters are negative.

  2. Is 6 points really sufficient to create the camera model? Even though my camera projection matrix is working, why is the intrinsic parameters extracted is still incorrect.

Thank you.

1

1 Answers

0
votes

Your calculation of the focal length is a first-order approximation, since it neglects the non-linear distortion. Also your result have a quite large off-diagonal value (-257.1, or ~ 2.5% of the focal length), which looks suspicious.

Six points are just the minimum. You normally follow a calibration procedure that automatically detects and matches a much larger number of points in the image on a calibration target (a.k.a. "rig") of known geometry, for example a planar checkerboard. Doing so has the effect of "averaging away" errors in the least squares sense. The calibration optimizer will also normally use a robustifier to (attempt to) remove or downweight erroneous point detection/matches ("outliers"). The procedure fits a lens model that normally includes nonlinear distortion terms.

You may want to check this other answer for more details on an appropriate procedure.