`
cameraParameters with properties:
Camera Intrinsics
IntrinsicMatrix: \[3×3 double\]
FocalLength: \[1.4133e+03 1.4188e+03\]
PrincipalPoint: \[950.0639 543.3796\]
Skew: 0
RadialDistortion: \[-0.0091 0.0666\]
TangentialDistortion: \[0 0\]
ImageSize: \[1080 1920\]
Camera Extrinsics
RotationMatrices: \[3×3×33 double\]
TranslationVectors: \[33×3 double\]
Accuracy of Estimation
MeanReprojectionError: 0.6450
ReprojectionErrors: \[80×2×33 double\]
ReprojectedPoints: \[80×2×33 double\]
Calibration Settings
NumPatterns: 33
WorldPoints: \[80×2 double\]
WorldUnits: 'millimeters'
EstimateSkew: 0
NumRadialDistortionCoefficients: 2
EstimateTangentialDistortion: 0\`
# **your text**
正如这里所解释的那样
生成校准图像
images = imageDatastore(fullfile(toolboxdir('vision'),'visiondata','calibration','slr'));
使用棋盘作为校准图像。
获取棋盘的角点
[imagePoints,boardSize] = detectCheckerboardPoints(images.Files);
生成坐标系参考
squareSize = 29;
worldPoints = generateCheckerboardPoints(boardSize,squareSize);
I = readimage(images,1);
imageSize = [size(I,1),size(I,2)];
cameraParams = estimateCameraParameters(imagePoints,worldPoints,'ImageSize',imageSize);
将输入图像(而不是校准图像)、您拥有的数据移动到不同的位置
imOrig = imread(fullfile(matlabroot,'toolbox','vision','visiondata','calibration','slr','image9.jpg'));
figure; imshow(imOrig);
title('Input Image');
im = undistortImage(imOrig,cameraParams);
[imagePoints,boardSize] = detectCheckerboardPoints(im);
[rotationMatrix,translationVector] = extrinsics(imagePoints,worldPoints,cameraParams);
P = cameraMatrix(cameraParams,rotationMatrix,translationVector)