重现相机重投影错误

时间:2015-08-10 10:08:57

标签: matlab image-processing computer-vision camera-calibration matlab-cvst

我将一些图像加载到相机校准应用程序中,并将生成的相机参数导出到名为" oldCameraParams"的结构中。我现在要做的是重现校准期间使用的图像之一的重投影错误。 我的目标是这样做:

I = imread(imagePath);
[imagePoints,boardSize] = detectCheckerboardPoints(I);
worldPoints = generateCheckerboardPoints(boardSize, squareSize);
squareSize = 30; 
camMatrix = cameraMatrix(oldCameraParams,oldCameraParams.RotationMatrices(:,:,1),oldCameraParams.TranslationVectors(1,:));
projectedPoints = [worldPoints zeros(size(worldPoints,1),1) ones(size(worldPoints,1),1)] * camMatrix;
projectedPoints = bsxfun(@rdivide,    projectedPoints(:,1:2),projectedPoints(:,3));
euclideanDistances = sqrt(sum((imagePoints - projectedPoints) .^2, 2));
meanReprojErrors(ii) = mean(euclideanDistances);

我应该使用完全相同的参数(相机内在函数,旋转矩阵和平移向量)但仍然我的投影点与校准期间创建的不同,因此我的meanReprojErrors更高。知道为什么吗?

1 个答案:

答案 0 :(得分:1)

您遇到了不同的重投影错误,因为您没有考虑失真。如果您在致电undistortImage之前致电detectCheckrboardPoints,那么您应该获得更接近校准期间计算出的重投影错误的值。