matlab单双目标定提取相机标定中各张标定图片的重投影误差数据

前言

  我们在使用matlab工具箱进行相机标定时,有时候想得到每张标定图片的重投影误差和opencv-python中的比较一下。然而,该数据在系统里没有直接输出,我们应该如何获取呢?
matlab单双目标定提取相机标定中各张标定图片的重投影误差数据_第1张图片

  参考了 《提取相机标定中各张标定图片的重投影误差数据》中的思路给出单双目代码,直接粘贴使用!
思路如下:
1 、提取角点坐标的像素坐标;
2 、将标定板中角点在世界坐标中的坐标(标定平面为世界坐标系中Z=0所在平面)基于相机参数反计算得到新的像素坐标;
3 、计算两个对应像素坐标的2范数求和并取均值,即可得到该张标定图片的平均投重影误差。


一、单目标定

启动单目标定工具箱

cameraCalibrator

添加照片,选择calibrate,选择export camera parameters,点击确定
matlab单双目标定提取相机标定中各张标定图片的重投影误差数据_第2张图片
然后在主窗口输入以下代码,把图片数量和角点个数改成自己的,就可以得到我们想要的数据了

Error=0;
num=9;     %标定图片的张数
corner=55;  %标定板角点提取的个数
for i=1:num  
    s=0;
    v1=0;
    A=cameraParams.ReprojectionErrors(:,:,i);
    for j=1:corner
        v=[A(j,1),A(j,2)];
        v1=norm(v);
        s=v1+s;
    end
    value=s/corner;    
    fprintf('%f\n', value);
    Error=Error+value;
end

二、双目标定

  启动双目标定工具箱

stereoCameraCalibrator

添加左目和右目照片,选择coefficients和tangential distortion ,点击calibratematlab单双目标定提取相机标定中各张标定图片的重投影误差数据_第3张图片然后选择export camera parameters,点击确定matlab单双目标定提取相机标定中各张标定图片的重投影误差数据_第4张图片
在主界面上就可以看到输出
matlab单双目标定提取相机标定中各张标定图片的重投影误差数据_第5张图片
然后复制代码到下面运行,就可以输出两个相机的参数了,根据识别识别出来的照片数量和你自己棋盘角点修改一下就可以了。

Error1=0;
Error2=0;
num=5;     %标定图片的张数
corner=88;  %标定板角点提取的个数
for i=1:num  
    s1=0;
    v1=0;
    A=stereoParams.CameraParameters1.ReprojectionErrors(:,:,i);
    for j=1:corner
        v1=[A(j,1),A(j,2)];
        v1=norm(v1);
        s1=v1+s1;
    end
    value1=s1/corner;    
    fprintf('%f\n', value1);
    Error1=Error1+value1;
end
fprintf("---------\n");
for i=1:num  
    s2=0;
    v2=0;
    B=stereoParams.CameraParameters2.ReprojectionErrors(:,:,i);
    for j=1:corner
        v2=[B(j,1),B(j,2)];
        v2=norm(v2);
        s2=v2+s2;
    end
    value2=s2/corner;    
    fprintf('%f\n', value2);
    Error2=Error2+value2;
end

结果如下:
matlab单双目标定提取相机标定中各张标定图片的重投影误差数据_第6张图片

你可能感兴趣的:(双目视觉,matlab,计算机视觉,opencv)