点击“计算机视觉life”关注,置顶更快接收消息!
什么是相机标定?我们为什么需要相机标定?
相机标定就是确定相机内参和外参的过程,其结果精度会直接影响视觉系统后续工作的准确性。
相机标定涉及到了四大坐标系,分别为:
像素坐标系 ( u , v ) (u,v) (u,v)
图像物理坐标系 ( x , y ) (x,y) (x,y)
相机坐标系 ( x c , y c , z c ) ({x_c},{y_c},{z_c}) (xc,yc,zc)
世界坐标系 ( x w , y w , z w ) ({x_w},{y_w},{z_w}) (xw,yw,zw)
为了进行相机标定,必须已知世界坐标系中足够多的三维空间点坐标,找到这些空间点在图像中投影点的二维图像坐标,并建立对应关系。世界坐标系中某个给定点投影到图像坐标系中被分为两个步骤:
机器视觉中常用的有两种不同类型的镜头:普通镜头和远心镜头。使用普通镜头时,世界坐标系到图像坐标系为透视投影;使用远心镜头时为平行投影。
相机标定方法有:传统相机标定法、主动视觉相机标定法、相机自标定法。
标定方法 | 优点 | 缺点 | 常用方法 |
---|---|---|---|
传统相机标定法 | 可使用于任意的相机模型、 精度高 | 需要标定物、算法复杂 | Tsai两步法、张氏标定法 |
主动视觉相机标定法 | 不需要标定物、算法简单、鲁棒性高 | 成本高、设备昂贵 | 主动系统控制相机做特定运动 |
相机自标定法 | 灵活性强、可在线标定 | 精度低、鲁棒性差 | 分层逐步标定、基于Kruppa方程 |
MATLAB自带相机标定应用程序,有camera calibrator和stereo camera calibrator两类相机标定应用程序。其操作简单、直观,能够获得相机的内、外参数以及畸变参数等。
其中,camera calibrator用于单目相机标定;stereo camera calibrator用于双目相机标定。两者操作方式相同,唯一区别在于stereo camera calibrator添加图片时会弹出添加两个相机图片的操作框。
平面标定板具有以下几个优点:
使用MATLAB编程进行棋盘标定板的制作,将图片打印后固定在一块平板上。程序如下:
J = (checkerboard(300,3,4)>0.5); %生成黑白棋盘图像
figure, imshow(J) %显示黑白棋盘图像
imwrite(J,'plate.jpg'); %保存黑白棋盘图像
效果如图:(感觉有点寒酸呀,“但这不重要”,没条件自己创造)
camera calibrator操作界面如下:
对于标定图像数量,位姿越多,标定结果也会越精确,建议在10到20幅之间。按照上图中的1、2、3进行相机标定操作。我们可以选择径向畸变系数以及是否计算切向畸变和倾斜,通过优化选项可以设置内参矩阵以及径向畸变参数的输出形式。
1.添加标定图像后显示界面如下图:
2.相机标定后显示界面会显示相机与标定板之间的位置关系。
3.相机参数输出
camera calibrator应用程序相机标定参数输出如图所示:
高亮:MATLAB相机标定结果中的内参矩阵默认格式为KaTeX parse error: Unknown column alignment: * at position 23: …{\begin{array}{*̲{20}{c}}{{f_x}}…,其中, f x {f_x} fx、 f y {f_y} fy分别为 u {u} u轴和 v {v} v轴的有效焦距; s {s} s为 u {u} u轴和 v {v} v轴的不垂直因子,一般令 s = 0 {s}=0 s=0; ( u 0 , v 0 ) ({u_0},{v_0}) (u0,v0)是光学中心。
注意事项:
相机标定过程中如果标定板放置不适当的话将会导致相机参数中某个参数或某些参数不能得到唯一值。为了得到高准确度的相机参数必须避免这种情况的发生。除了这个影响外,影响相机参数准确度的主要因素就是用于进行相机标定的图像数量。下面显示了用于相机标定的图像数量对参数的影响。
从图中可以看出相机参数的准确度随使用图像数量的增加而明显增加。为什么使用相当多的标定图像可以提高相机标定精度?这主要是因为相机参数之间存在不容忽视的相关性,这些参数只能通过多次无关测量进行求解。为了得到更准确的相机参数,我们需要这样做: