三角测量后的输出(MATLAB)不准确

时间:2015-10-16 09:24:25

标签: matlab matlab-cvst coordinate-transformation stereo-3d

我正在使用MATLAB-CVST执行立体摄像机校准。从28张图像(6 X 7个角),获得 stereoParams stereoParams.MeanReprojectionError = 0.3168)。

接下来,我拍了一个棋盘式立体声对( CB_I1 & CB_I2 )。

CB_I1 我应用了以下功能:

  1. undistortImage
  2. detectCheckerboardPoints
  3. generateCheckerboardPoints
  4. extrinsics:这给了我翻译矢量(T)和旋转矩阵(R)
  5. 接下来,对于CB_I1和& CB_I2,我应用以下功能:

    1. undistortImage
    2. detectCheckerboardPoints
    3. triangulate:这给了我 worldPoints
    4. 反向翻译和旋转变换
    5. 这是我的代码:

      CB_I1_undist = undistortImage(CB_I1, stereoParams.CameraParameters1);
      CB_I2_undist = undistortImage(CB_I2, stereoParams.CameraParameters2);
      
      [imagePoints1, ~] = detectCheckerboardPoints(CB_I1_undist);
      [imagePoints, ~] = detectCheckerboardPoints(CB_I2_undist);
      
      worldPoints = triangulate(imagePoints1,imagePoints,stereoParams);
      
      Translated_pnts = zeros(size(worldPoints));
      Translated_pnts(:,1) = worldPoints(:,1) - T(1);
      Translated_pnts(:,2) = worldPoints(:,2) - T(2);
      Translated_pnts(:,3) = worldPoints(:,3) - T(3);
      Rotated_pnts = Translated_pnts * (R');
      
      Transformed_points = Rotated_pnts;
      

      最终, Transformed_points 看起来像这样:

      enter image description here

      等等......获得42分。

      我该如何解释?我希望 Transformed_points 为:

      enter image description here

      因为每个方块尺寸为40mm。

      • 首先,这是一个错误吗?
      • 原因是什么?是因为高重投影错误? (如果是的话,怎样才能最小化?)
      • 如何尽可能减少这种情况?
      • 我希望它尽可能接近理想值。有哪些不同的方法可以提高算法的准确性?

      如果您需要任何其他信息,请与我们联系。

2 个答案:

答案 0 :(得分:2)

你说你的平均重投影误差为0.3~。

如果我计算你的第一点和第二点之间的距离:

sqrt((-0.2006+0.1993)^2+(-1.2843-39.1922)^2+(3.0466-2.0656)^2)
ans >>
      40.4884

这就是你的期望吗?当然,它不是100%准确。

另外,再看看你的观点。它们正是您所期望的。而不是120你有120.06。而不是160,你有159.94。

你错过了大约0.3毫米的分数。 0.3 MILIMETERS 。 拿一把尺子,试着测量0.3毫米!!

  • 这是4次人发!
  • 它或多或少是人眼可以分辨的最小距离!
  • 纸张的3倍!
  • 细菌大小的0.6倍! (变形虫变形虫)

哇,我认为这是一个非常好的错误,不是吗?

无论如何,您可以使用更多校准图像来减少该错误,但是,我会说您已经做得很好。

测量误差的一个好方法是它具有更多意义,就是计算像素误差,而不是真实的物理误差。如果将误差除以像素的长度,则可以知道有多少像素的误差。您会发现在您的情况下,您很可能具有亚像素精度(像素误差<1)。这是非常好的,因为它意味着你的错误小于你可以衡量的,所以,在某种意义上(不是真的,但是是的)你打破了Shanon原则!干得好

随机数据来源:http://www.wolframalpha.com/input/?i=300+micrometres

答案 1 :(得分:1)

对Ander的回答我想补充一点,你应该确保使用卡尺非常精确地测量方形尺寸。如果你可以达到亚毫米级精度,那将对你的重建精度产生影响。另外,请确保不要在图像上使用有损压缩,i。即没有jpeg。 Jpeg工件也会降低您的准确性。