首页 文章

重现相机重投影错误

提问于
浏览
1

我将一些图像加载到相机校准应用程序中,并将生成的相机参数导出到名为“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);

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

1 回答

  • 1

    你得到了不同的重投影错误,因为你没有考虑失真 . 如果在调用 detectCheckrboardPoints 之前调用 undistortImage ,则应获得更接近校准期间计算的重投影错误的值 .

相关问题