I plan on doing stereo calibration for my 2 cameras and I have a few questions:
I’m wondering if using ChArUco board is basically the best option in OpenCV at the moment for calibration (e.g. as compared to the checkerboard_radon in findChessboardCornersSB), especially since charuco would allow the edges to be calibrated more accurately?
Is the most accurate way to calibrate, to do each camera separately first and then CALIB_USE_INTRINSIC_GUESS during stereoCalibrate?
I notice that the sample script for charuco does an initial calibration using calibrateCameraAruco and then recalculates the corners with the camera matrix and distCoeffs found, before throwing them into calibrateCameraCharuco. Why doesn’t it just use calibrateCameraCharuco twice for example?
I’m also wondering where to throw in functions like aruco::refineDetectedMarkers for better accuracy? Or when to set the DetectorParameters e.g. detectorParams->cornerRefinementMethod = cv::aruco::CORNER_REFINE_NONE. I read from this tutorial that
When detecting markers for ChArUco boards, and specially when using homography, it is recommended to disable the corner refinement of markers. The reason of this is that, due to the proximity of the chessboard squares, the subpixel process can produce important deviations in the corner positions and these deviations are propagated to the ChArUco corner interpolation, producing poor results.
so I’m a little confused whether to bother using e.g. refineDetectedMarkers
5. So is the best process thus:
first with each camera:
find corners using (detectMarkers → refineDetectedMarkers? → interpolateCornersCharuco) → calibrateCameraAruco → find more accurate corners using the cameraMatrix and distCoeffs (detectMarkers → refineDetectedMarkers?? → interpolateCornersCharuco) → calibrateCameraCharuco
then with both, using the intrinsics found from before:
(detectMarkers → refineDetectedMarkers? → interpolateCornersCharuco) → stereoCalibrate?