相机模型与单目标定

三、单目标定

从之前的
从世界坐标到像素坐标可以得到:

Z c [ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ R T 0 1 ] [ X w Y w Z w 1 ] Zc \left[ \begin{matrix} u\\ v \\ 1 \end{matrix} \right]= \left[ \begin{matrix} \frac{1}{dx} & 0 & u0\\ 0 & \frac{1}{dy} & v0\\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0 \end{matrix} \right] \left[ \begin{matrix} R & T\\ 0 & 1 \end{matrix} \right] \left[ \begin{matrix} Xw\\ Yw\\ Zw\\ 1 \end{matrix} \right]

相机标定也是利用了上面这个公式,等式右边前两个矩阵乘积为相机内参,第三为相机外参(也成为Toc)。

各个参数的含义:dx代表一个像素的宽度(x方向),与x同单位,x/dx表示x轴上有多少个像素,同理y/dy表示y轴上的像素个数,(u0,v0)是图像平面中心。相机模型类似小孔成像模型,自行百度,也可参考前面的坐标转换关系相机坐标系与图像坐标系世界坐标系与相机坐标系

举个实际的例子,相机内参为:

K = [ f d x 0 u 0 0 f d y v 0 0 0 1 ] K = \left[ \begin{matrix} \frac{f}{dx} & 0 & u0\\ 0 & \frac{f}{dy} & v0\\ 0 & 0 & 1 \end{matrix} \right]

1、如何进行标定?(理想情况下无畸变)

单目标定的目的就是为了得到dx,dy,f,R,T这几个参数(暂时不考虑畸变参数)。而最开始接触标定只是按照不同姿势地摆放标定板,前提当然要固定相机位置,为什么要这么做呢。

设有N个角点,K个棋盘,则可以列出2NK个方程,未知参数有4+6K个,所以从理论上来说,方程组数大于未知数个数就能解出未知数,即2NK>=6K+4,即(N-3)K>=2,但对于同一个平面来说,4个角点确定了一个与投影平面共面的四边形,在四个方向同时延伸就可以变成任意四边形,所以N的约束即为4,那么就只有K>=2这个条件,理论上至少需要两个视场列得到的2×4×2=16个方程才能求得4+6×2=16个参数。但是考虑噪声和数值稳定性,图片上的角点可以取多后采用最小二乘法、ransac或其他方法取最优参数。一般标定取10幅7×7或7×8角度不同的图片。到此为止,求出了dx,dy,f,R,T这几个参数。

当然,标定还有另外一种方式,对于eye in hand 这种case,可以固定标定板,相机在机械手上,随着机械手变化位置,去不同的点位拍照,(当硬件结构确定情况下的大批量生产情况采用这种自动标定方式可以节约人力成本,)提前预设好几个位置,让机械手随机在附近进行拍照,完成内外参的标定。

2、实际情况下(有畸变)

理想的针孔模型透过小孔的光线少,导致了相机的曝光时间慢,实际中为了加快图像的生成使用透镜,但同时也引入了畸变。所以畸变发生在相机内部,所需要增加的相应计算多了几个畸变参数(会在下面定义),计算方法参照的方程式仍然是从世界坐标系到像素坐标的转换Tpw,常见的畸变有(1)径向畸变,(2)切向畸变。

不考虑畸变
畸变
世界坐标
相机坐标
理想图像坐标
像素坐标
实际图像坐标

2.1、径向畸变

径向畸变的现象有桶形失真与枕形失真。在成像仪光轴中心的畸变为0,沿着镜头半径方向向边缘移动,径向位移增大,畸变越来越严重。畸变的数学模型用参数k1,k2,k3(或更多)描述,用主点的泰勒级数展开式前三项(或更多)表示:

{ x c o r r e c t = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y c o r r e c t = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) \begin{cases} x_{correct} = x(1+k_1r^2+k_2r^4+k_3r^6)\\ y_{correct} = y(1+k_1r^2+k_2r^4+k_3r^6) \end{cases}

2.2、切向畸变

切向畸变是由于透镜的安装偏差产生,导致透镜本身与相机成像平面不平行。切向畸变模型用参数p1,p2描述:

{ x c o r r e c t = x + [ 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) ] y c o r r e c t = y + [ 2 p 2 x y + p 1 ( r 2 + 2 y 2 ) ] \begin{cases} x_{correct} = x+[2p_1xy+p_2(r^2+2x^2)]\\ y_{correct} = y+[2p_2xy+p_1(r^2+2y^2)] \end{cases}
(r为该点距离成像中心距离)

2.3、总结

综合以上两种畸变,得到畸变矫正前后的坐标对应(理想图像坐标到实际图像坐标)关系:

[ x c y c ] = ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) [ x p y p ] + [ 2 p 1 y + p 2 ( r 2 + 2 x 2 ) 2 p 2 y + p 1 ( r 2 + 2 y 2 ) ] \left[ \begin{matrix} x_c\\ y_c \end{matrix} \right]= (1+k_1r^2+k_2r^4+k_3r^6) \left[ \begin{matrix} x_p\\ y_p\\ \end{matrix} \right] + \left[ \begin{matrix} 2p_1y+p_2(r^2+2x^2)\\ 2p_2y+p_1(r^2+2y^2)\\ \end{matrix} \right]

此时,世界坐标系到像素坐标系的关系就多了一个畸变转换:

Z c [ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ d i s t o r t r a n s f o r m ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ R T 0 1 ] [ X w Y w Z w 1 ] Zc \left[ \begin{matrix} u\\ v \\ 1 \end{matrix} \right]= \left[ \begin{matrix} \frac{1}{dx} & 0 & u0\\ 0 & \frac{1}{dy} & v0\\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} distor transform \end{matrix} \right] \left[ \begin{matrix} f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0 \end{matrix} \right] \left[ \begin{matrix} R & T\\ 0 & 1 \end{matrix} \right] \left[ \begin{matrix} Xw\\ Yw\\ Zw\\ 1 \end{matrix} \right]

畸变转换至少包含五个参数k1,k2,k3,p1,p2,标定需要求得的未知数就有4+5+6K个,所以,为了标定结果的准确性,前面提到的标定取10幅7×7或7×8角度不同的图片是很有必要的。

3、疑问

3.1、标定的世界坐标从何而来

给予标定板的建立世界坐标的xy轴,z轴垂直标定板射出,原点位置定义为标定板的圆孔的第一个点。

3.2、一张图像也能得到标定结果

N的约束4还要保留吗?

一张图片确实可以得到标定结果,会有很多解。

4、自动标定

由于标定过程比较繁杂,无非就是尽可能多的在工作平面附近拍摄标定板的图片进行计算。使用机械手自动走点位进行拍照的方法较为节省人力成本。

本次分析参考:自动标定分析

eye in hand

原始位置:
r T o = r T t t T c c T o ^rT_o = ^rT_t \cdot ^tT_c \cdot ^cT_o
新位置:
r T o = r T t t T c c T o ^rT_o = ^rT_t^{'} \cdot ^tT_c \cdot ^cT_o^{'}

c T o = c T o T ^cT_o^{'} = ^cT_o \cdot T

结合以上两个公式,移项化简得:
r T t = r T o T 1 o T t ^rT_t^{'} = ^rT_o \cdot T^{-1} \cdot ^oT_t

eye to hand

与eye in hand同理
原始位置:
r T c = r T t t T o o T c ^rT_c = ^rT_t \cdot ^tT_o \cdot ^oT_c
新位置:
r T c = r T t t T o o T c ^rT_c = ^rT_t^{'} \cdot ^tT_o \cdot ^oT_c^{'}

o T c = T 1 o T c ^oT_c^{'} = T^{-1} \cdot ^oT_c

结合以上两个公式,移项化简得:
r T t = r T o T o T t ^rT_t^{'} = ^rT_o \cdot T \cdot ^oT_t

以上的T均假设移动的object的偏移量。

发布了6 篇原创文章 · 获赞 0 · 访问量 14

猜你喜欢

转载自blog.csdn.net/qq_33175713/article/details/105520588
今日推荐