Reprojected points not matching the checkerboard image

46 views (last 30 days)
I tried to manually visuallize my multi-cam calibration results and I was stuck at the following issue:
I first visualized the imagePoints extracted from detectCheckerboardPoints onto my image. This step was fine (I could tell that the points were located exactly at the checkerboard intersections).
Then I visualized the reprojected points from the result of estimateMultiCameraParameters. I obtained these points in this path:
multiParams.CameraParameters{:}.ReprojectedPoints(:,:,:)
However, I found the reprojectedPoints were not matching the imagePoints well. I found the reprojected points shared the same origin as the detected points, but had a rotational difference (see image belowm, red dots are imagePoints and blue circles are reprojectdPoints). The reprojection error in this calibration is only 0.4 pixel, with less than 1 pixel for all single images.
Can anyone explain this for me. I appreciate your answer.
  6 Comments
Jiajian
Jiajian on 24 Oct 2025 at 21:00
@Matt J, also thank you for your second comment. I'm only showing the path of the reprojected points. For sure if I need to visualize, I will need to specify my index, which means I should replace the ":" with my cam numbers or the image index.
Thanks, Jiajian
Jiajian
Jiajian on 24 Oct 2025 at 21:12
Edited: Jiajian on 24 Oct 2025 at 21:16
@Qu Cao, there are a few more things I've noticed when using estimateMultiCameraParameters:
  1. It does not account for the camera distortion, although I claimed non-zero RadialDistortion in my intrinsics. This is contradictory to the description of its official document: "The function adjusts all image points for distortion according to the lens distortion parameters specified in the intrinsics input."
  2. Its CameraPoses outcome is inconsistent with the stereo calibrator app. From one to the other, their rotation matrices are inversed.
Thanks, Jiajian

Sign in to comment.

Accepted Answer

Qu Cao
Qu Cao ongeveer 3 uur ago
The problem stems from an incorrect rotationVector assignment in estimateMultiCameraParameters. To fix the issue, please change Line 111 in estimateMultiCameraParameters
from
rotationVectors(i, :) = rotmat2vec3d(patternExtrinsics(viewIdx, camIdx).R');
to
rotationVectors(i, :) = rotmat2vec3d(patternExtrinsics(viewIdx, camIdx).R);
Note that the transpose should be removed.

More Answers (0)

Categories

Find more on MATLAB Support Package for USB Webcams in Help Center and File Exchange

Products


Release

R2025a

Community Treasure Hunt

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

Start Hunting!