Reputation: 625
I am using MATLAB- CVST to perform Stereo Camera Calibration. From 28 images (6 X 7 corners), stereoParams are obtained (stereoParams.MeanReprojectionError = 0.3168).
Next, I took took a checkerboard stereo pair (CB_I1 & CB_I2).
To CB_I1 I applied the following functions:
Next, To both CB_I1 & CB_I2, I apply the following functions:
This is my code:
CB_I1_undist = undistortImage(CB_I1, stereoParams.CameraParameters1);
CB_I2_undist = undistortImage(CB_I2, stereoParams.CameraParameters2);
[imagePoints1, ~] = detectCheckerboardPoints(CB_I1_undist);
[imagePoints, ~] = detectCheckerboardPoints(CB_I2_undist);
worldPoints = triangulate(imagePoints1,imagePoints,stereoParams);
Translated_pnts = zeros(size(worldPoints));
Translated_pnts(:,1) = worldPoints(:,1) - T(1);
Translated_pnts(:,2) = worldPoints(:,2) - T(2);
Translated_pnts(:,3) = worldPoints(:,3) - T(3);
Rotated_pnts = Translated_pnts * (R');
Transformed_points = Rotated_pnts;
Ultimately, Transformed_points looks like this:
and so on....for 42 points.
How do I interpret this? I expect Transformed_points to be:
since each square size is 40mm.
Let me know if you need any other information.
Upvotes: 2
Views: 429
Reputation: 39389
To Ander's answer I would just like to add that you should be sure to measure the square size very precisely, using a caliper. If you can get sub-millimeter accuracy on that, that will have an effect on your reconstruction accuracy. Also, please be sure not to use lossy compression on your images, i. e. no jpeg. Jpeg artifacts will also decrease your accuracy.
Upvotes: 1
Reputation: 35525
You say you have a mean re-projection error of 0.3~.
If I calculate the distance between your first and second point:
sqrt((-0.2006+0.1993)^2+(-1.2843-39.1922)^2+(3.0466-2.0656)^2)
ans >>
40.4884
Well thats what you expect right? Its not 100% accurate of course.
Also,look again at your points. They are exactly where you expect them to be. Instead of 120 you have 120.06. Instead of 160, you have 159.94.
you are missing the points by around 0.3 millimeters. 0.3 MILIMETERS. Take a ruler and try to measure 0.3 millimeters!!
WOW, I think thats a quite good error to have, dont you?
Anyway, you can decrease that error using more calibration images, but yeah, I'd say you are doing a good job already.
A good way of measuring the error so it has more meaning is to calculate the pixel error, not the real physical error. If you divide the error by the length of a pixel, you can know how many pixels of error you have. You will see that most likely in your case you are having sub-pixel accuracy (pixel error < 1). This is very good because it means that your error is smaller than what you can measure, so, in some sense (not really, but yeah) you are breaking the Shanon principle! Good job
Source of random data: http://www.wolframalpha.com/input/?i=300+micrometres
Upvotes: 2