fixing intrinsics during stereoCalibration (during R,T refinment)

13 views (last 30 days)
Hi.
So relating to the case in which I want to do Stereo Calibration, in the documentation of the function:
estimateCameraParameters
it said that it has an argument of initial intrinsic matrix (3 x 3 dimnesions).
I don't clearly understand why is there only one, if for exmaple I wish to initialize both initial intrisics of both CameraParameteres.
The more important question for me is:
Can I fix the intrinsics after they calculated by calibrateOneCamera , as it is done in OpenCV with flags like: CALIB_FIX_INTRINSIC and CALIB_USE_INTRINSIC_GUESS.
That way for exmaple I can calibrate each of my two cameras (for better results, especially if they are different) alone and then try to find only R and T without refining the intrinsics. But it will be also sufficient to calibrate them together and speaking openCV language using only the flag CALIB_FIX_INTRINSIC.
In my case I see that without the refinment the intrinsics look better for me ( relying on the scale of the numbers and the real intrinsics of one of the cameras which I know before the callibration).
What I'm asking actually, should I just turn off (comment) the refinment and may I rely on the estimateInitialTranslationAndRotation
in the following matlab peace of code in estimateCameraParameters or can the refinment (refine function below) be done (i.e code modificated somehow) to refine the R and T with fixation of the intrinsics calculated before in the code by calibrateOneCamera:
calibrationParams.shouldComputeErrors = false;
[cameraParameters1, imagesUsed1] = calibrateOneCamera(imagePoints1, ...
worldPoints, imageSize, cameraModel, worldUnits, calibrationParams);
progressBar.update();
[cameraParameters2, imagesUsed2] = calibrateOneCamera(imagePoints2, ...
worldPoints, imageSize, cameraModel, worldUnits, calibrationParams);
progressBar.update();
% Compute the initial estimate of translation and rotation of camera 2
[R, t] = vision.internal.calibration.estimateInitialTranslationAndRotation(...
cameraParameters1, cameraParameters2);
stereoParams = stereoParameters(cameraParameters1, cameraParameters2, R, t);
errors = refine(stereoParams, imagePoints1(:, :, pairsUsed), ...
imagePoints2(:, :, pairsUsed), shouldComputeErrors);
Thank you in advance.

Answers (1)

Birju Patel
Birju Patel on 5 May 2022
You can use the estimateStereoBaseline function to estimate the translation and rotation between two cameras given fixed intrinsics:

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!