Camera calibration and 3D reconstruction1(Camera calibration With OpenCV)

径向畸变

  • 原因:透镜形状影响光线的传播,导致光线在远离透镜中心的地方比靠近中心的地方更加弯曲。
  • 主要包含 桶形畸变枕形畸变
    Camera calibration and 3D reconstruction1(Camera calibration With OpenCV)
    桶形畸变:图像放大率随着离光轴的距离增加而减小。
    枕形畸变:图像放大率随着离光轴的距离减小而增加。
  • 该类畸变可以用和距中心距离有关的二次及高次多项式函数进行纠正:
    {xcorrected=x(1+k1r2+k2r4+k3r6)ycorrected=y(1+k1r2+k2r4+k3r6),r=x2+y2(5.8)

式 (5.8) 中的 [x,y]T 是未矫正的点的坐标, [xcorrected,ycorrected]T 是矫正后的点的坐标,它们都是上的点。k1,k2 分别作用于畸变较小的中心区域,畸变较大的边缘区域,这两个系数适用于普通摄像头,而对于畸变很大的摄像头(比如鱼眼)可以加入 k3

切向畸变

  • 原因:相机装配误差使得透镜和成像面不完全平行。
    Camera calibration and 3D reconstruction1(Camera calibration With OpenCV)
    (ps: 引自视觉SLAM十四讲 图5-4 切向畸变来源示意图)
    使用另外两个参数 p1,p2
来进行矫正:
{xcorrected=x+2p1xy+p2(r2+2x2)ycorrected=y+2p2xy+p1(r2+2y2)(5.9)

畸变校正

  • 视觉 SLAM 一般选择 先对整张图像进行去畸变,再去讨论此图像上的点的空间位置。
  • 步骤:
    • 将三维空间点投影到归一化图像平面,其归一化坐标为 [x,y]T

对归一化平面上的点进行径向畸变和切向畸变校正(这里使用 5 个畸变项):
{xcorrected=x(1+k1r2+k2r4+k3r6)+2p1xy+p2(r2+2x2)ycorrected=y(1+k1r2+k2r4+k3r6)+2p2xy+p1(r2+2y2)(5.10)

将校正后的点变换到图像像素坐标系下,得到该点在图像上的正确位置:
{u=fxxcorrected+cxv=fyycorrected+cy(5.11)
其中的fx,fy,以及cx,cy应均为相机的内参。最后根据相机的外参即可以计算出位于世界坐标系下的物体实际坐标。

切向畸变

  • 原因:相机装配误差使得透镜和成像面不完全平行。
    Camera calibration and 3D reconstruction1(Camera calibration With OpenCV)
    (ps: 引自视觉SLAM十四讲 图5-4 切向畸变来源示意图)
    使用另外两个参数 p1,p2
来进行矫正:
{xcorrected=x+2p1xy+p2(r2+2x2)ycorrected=y+2p2xy+p1(r2+2y2)(5.9)

畸变校正

  • 视觉 SLAM 一般选择 先对整张图像进行去畸变,再去讨论此图像上的点的空间位置。
  • 步骤:
    • 将三维空间点投影到归一化图像平面,其归一化坐标为 [x,y]T

对归一化平面上的点进行径向畸变和切向畸变校正(这里使用 5 个畸变项):
{xcorrected=x(1+k1r2+k2r4+k3r6)+2p1xy+p2(r2+2x2)ycorrected=y(1+k1r2+k2r4+k3r6)+2p2xy+p1(r2+2y2)(5.10)

将校正后的点变换到图像像素坐标系下,得到该点在图像上的正确位置:
{u=fxxcorrected+cxv=fyycorrected+cy(5.11)
其中的fx,fy,以及cx,cy应均为相机的内参。最后根据相机的外参即可以计算出位于世界坐标系下的物体实际坐标。