矩阵乘法就是向量空间映射,N个矩阵左乘向量是在原向量空间下的映射,右乘是在新向量空间下的映射。
在小孔成像模型下,物体与像素坐标系通过以下矩阵关系形成:
- 物体坐标W1通过刚性变换转到镜头坐标系得C1;
- 通过f/(z_C1)得镜头坐标系下投影坐标pt_C1;
- 通过投影和缩放平移变换得到像素坐标
张氏推导:
若不考虑镜头畸变情况:
图片转载自博客:https://www.cnblogs.com/gooutlook/p/15391981.html
上图中不含UVW的3维坐标的W项,是因为设定W=0;Z就是投影的距离比例因子;uv是像素坐标,UVW是世界坐标;θ是表示sersor纵横轴角度因子。
UV是棋盘格坐标,R1(第一列)/R2(第二列)是xy旋转因子,第三列R3因W=0不参与运算省略掉了,T是平移因子。
就是将棋盘格坐标转到镜头坐标系,乘以f/z,再加上纵横轴角度不为90°时的仿射变换。
令UV到uv的齐次矩阵H=A*(R1 R2 T)。
得
u=(H1 @ [U,V,1]) / (H3 @ [U,V,1])
v=(H2 @ [U,V,1]) / (H3 @ [U,V,1])
齐次矩阵H一共8个自有度。每个坐标点提供2个等式,故最少4个坐标点可以解开方程。过定方程用最小二乘法解。得到UV到uv的齐次矩阵。
由 R1 @ R2T = 0, R1@R1T = R2@R2T = 1, R1=A-1H1, R2=A-1H2 (A表示内参矩阵)
可得H1T(A-T A-1 )H2=0; H1T(A-T A-1 )H1 = H2T(A-T A-1 )H2 =1;
B=A-T A-1 是个3*3对称矩阵,因为B是对称矩阵,可得最终等式是关于B和H乘积的6个未知量的式子。
每个标定平面提供2个等式,至少需要3个标定平面可得B,进而得到内参矩阵A的解。进而求得相应平面的外参矩阵。
径向畸变方程:
xdistorted=x(1+k1r2+k2r4+k3r6)
ydistorted=y(1+k1r2+k2r4+k3r6)
畸变参数的一般顺序是k1,k2,p1,p2,k3。一般k1,k2用来处理径向畸变,k3相对而言用的比较少。
对于畸变较小的中心区域,主要是k1起作用,对于畸变较大的边缘,主要是k2起作用。
普通摄像头用这两个系数就能很好地消除畸变了。对于畸变很大的摄像头,如鱼眼相机,可加入k3消除畸变。
切向畸变方程:
xdistorted=x+2p1xy+p2(r2+2x2)
ydistorted=y+2p2 xy+p1(r2+2y2)
利用上面两组式子就可对畸变进行较好的修正。同时对径向、切向畸变消除就是将两组式子合并。
xdistorted=x(1+k1r2+k2r4+k3r6)+2p1xy+p2(r2+2 x2)
ydistorted=y(1+k1r2+k2r4+k3r6)+2p2 xy+p1(r2+2y2)
张氏标定法仅考虑径向畸变。
通过映射矩阵求得的uv和实际的uv,利用上面相应畸变方程可建立二次误差的等式关系。
利用L-M最速下降法求得最小误差的畸变参数。
ps:牛顿法步长=1,高斯牛顿法利用导数设置步长。
L-M用信赖域法,变化过大时用牛顿法,小时用高斯牛顿法,主要为了加快求解。