Calibration Procedure
Calibration is to estimate the intrinsic parameters of camera and
projector which we need to reconstruct depth from the camera image and
projector stripe structure. Using the standard calibration board, we
can obtain such information since the object coordinates and its
corresponding image pixel position are exactly known. In our project,
the calibration is seperated into 2 stages: Camera and
Projector calibration:
Camera Calibration:
Take a picture of the standard calibration pattern. Mark its corners
as feature points. Based on these points' coordinates in the object frame
and camera image, we use least square to approxiamate the camera
parameters: fx,fy,cx,cy,k as well as the transformations R, T from
object frame to camera frame.
This is the camera image of our calibration pattern.
Our estimated parameters are:
Rc= [ 0.8825 -0.0164 -0.4700;
-0.4018 0.4930 -0.7717;
0.2443 0.8699 0.4285]
Tc=[-3.4950 8.9413 107.3074]'
fxc=2402.62
fyc=2399.58
k=0.128
cxc=320.1701
cyc=240.1130
In the image, the yellow circles are the points projected in camera
image using these parameters. We can see they are quite closed to the
red cross points which are their real pixel position.
Projector Calibration:
We creat a calibration checker pattern in projector and project it on
the white plane. Take the plane's picture, then we use the known
camera parameters to calculate pattern's position in the object
frame. Once we get this information and we already know its image
position, similarly the projector's parameters can be estimated.
Our checker pattern's picture is right here:
For projector, we estimate the same parameters as camera except the
distortion k. Our results are:
Rp= [ 0.9999 0.0023 -0.0115;
-0.0111 0.4875 -0.8731;
0.0036 0.8731 0.4875]
Tp=[5.8529 19.2327 109.8049]
fxp=1035.01
fyp=1001.98
cxp=319.9998
cyp=239.9998
Final Results:
What we need in the depth reconstruction is the motion transformation
from camera frame to projector frame R and T. We calculate them by:
R=Rp*inv(Rc)= [0.8878 0.0195 0.4598;
-0.0187 0.9998 -0.0062;
-0.4598 -0.0031 0.8880]
T=-Rp*inv(Rc)*Tc+Tp=[58.4648;10.6971;16.1770]
The least square is very sensitive to the initial guess. It doesn't
converge quite well either.