失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 针孔相机模型 鱼眼相机模型 单目标定

针孔相机模型 鱼眼相机模型 单目标定

时间:2019-03-28 16:35:36

相关推荐

针孔相机模型 鱼眼相机模型 单目标定

单目相机

一、单目相机模型:

1.相机模型:

1.1统一模型:

无论是针孔相机还是鱼眼相机,其实可以归类成一个相机模型(畸变方式有差别而已),模型如下:

首先,看坐标轴,该模型以光心为相机坐标系原点,Z轴就是日常生活中的相机朝向,X和Y轴为垂直相机朝向的平面;其次,看坐标点,PPP 为在相机坐标系下的三维空间中的一点,坐标是(X,Y,Z)(X,Y,Z)(X,Y,Z) ;其余四个坐标点的意思为(可以先不用理解这四个坐标点,后续会解释):

P′(XZ,YZ,1)P^{'}(\frac{X}{Z},\frac{Y}{Z},1)P′(ZX​,ZY​,1) :PPP 投影在归一化平面上的点,坐标有三角形相似推出;

P′′(XZf,YZf,f)P^{''}(\frac{X}{Z}f,\frac{Y}{Z}f,f)P′′(ZX​f,ZY​f,f) :PPP 投影在成像平面上的点,坐标有三角形相似推出;

Pd′P_d^{'}Pd′​ : P′P^{'}P′ 在镜头畸变后的点,d是distortion的缩写;

Pd′′P_d^{''}Pd′′​ : P′′P^{''}P′′ 在镜头畸变后的

最后,看三个平面,归一化平面是相机坐标系下Z=1时的平面,成像平面是Z=f时的成像平面,像素平面是和成像平面重叠的有范围限制的被像素离散了的平面。

需要说明的是,真实相机在物理上,相机成像平面和像素平面本来是再光心后的,但为了便于分析,通常将两个平面对称到图上位置,相机通常会在数字图像处理时会在X和Y轴方向对称处理下,因而下图这样的模型和现实坐标结果一致。

1.2坐标映射流程:

3D世界中的某点PPP 的光通过镜头进入相机,理想情况下,会直线传播依次到达P′P^{'}P′ 和 P′′P^{''}P′′ ;成像平面上点P′′P^{''}P′′ 经传感器采样,转换到左上角为像素坐标原点的图像坐标系中得到uv坐标;

以上过程为理想过程,也就是最简单的针孔相机模型(下式中间矩阵就是内参矩阵KKK):

[uv1]=1Z[fx0Cx0fyCy001][XYZ]\begin{bmatrix} u\\ v\\1\end{bmatrix}=\frac{1}{Z}\begin{bmatrix} f_x & 0 & C_x\\ 0 & f_y & C_y\\ 0 & 0 &1\end{bmatrix} \begin{bmatrix} X\\ Y\\Z\end{bmatrix}⎣⎡​uv1​⎦⎤​=Z1​⎣⎡​fx​00​0fy​0​Cx​Cy​1​⎦⎤​⎣⎡​XYZ​⎦⎤​

然而现实是,PPP到P′P^{'}P′时(也即光从镜头进入相机归一化平面时)会有镜头引起的畸变(具体畸变类型下面有讲),从而导致从P′P^{'}P′变成了Pd′P^{'}_dPd′​,Pd′P^{'}_dPd′​会继续按照之前的映射变成Pd′′P^{''}_dPd′′​,因而可以看出如何计算出从P′P^{'}P′到Pd′P^{'}_dPd′​最重要,这个过程就是畸变模型。

2.畸变模型:

2.1畸变模型概念:

畸变模型是相机模型中的一个子问题,请注意区分。

畸变模型分为两类,径向畸变和切向畸变:

径向畸变是,距离光心距离不同的点的畸变程度不一样

切向畸变,成像平面与小孔平面不平行引起侧倾

桶形失真就是距离图像中心越远,原来的光点就被拉向中心越多,枕形失真相反;

2.2常用的畸变模型:

针孔相机畸变模型: 鱼眼相机畸变模型:

这里的(xn,yn)(x_n,y_n)(xn​,yn​)就是P′P^{'}P′的前两项,(xd,yd)(x_d,y_d)(xd​,yd​)就是P′′P^{''}P′′的前两项,在归一化平面上Z坐标都为1;

2.3去畸变方法:

畸变参数和相机内参都可以通过标定求得,得到畸变参数后,如何进行去畸变呢?

答:根据要求取的像素平面位置uvuvuv,计算对应无畸变的归一化平面图像坐标P′P^{'}P′,找到这个坐标在畸变模型下的位置Pd′P^{'}_dPd′​,进而找到相机模型下转移到当前畸变像素的位置Pd′′P^{''}_dPd′′​和uvduv_duvd​,然后取出来放到真实像素平面(找到uvduv_duvd​可能不是整数,会用到双线性插值)

3.相机使用

在实际相机使用过程中,我们最大的需求是:建立像素坐标uvuvuv和真实3D坐标PPP的对应关系。

一般真实坐标并不是以相机坐标系为坐标系,而是在其他坐标系(如下图的世界坐标系,也可是其他传感器,如IMU等)下的坐标

RcwR_{cw}Rcw​

坐标转换(原理详见视觉SLAM十四讲前几章节):

Xc=[RcwTcw][Xw1]X_c=\begin{bmatrix}R_{cw} & T_{cw}\end{bmatrix}\begin{bmatrix}X_w\\ 1\end{bmatrix}Xc​=[Rcw​​Tcw​​][Xw​1​]

归一化处理:

P′=[Xc(0)Xc(2)Xc(1)Xc(2)1]=[xnyn1]P^{'}=\begin{bmatrix}\frac{X_c(0)}{X_c(2)}\\ \frac{X_c(1)}{X_c(2)}\\ 1\end{bmatrix} = \begin{bmatrix}x_n \\ y_n\\ 1\end{bmatrix}P′=⎣⎢⎡​Xc​(2)Xc​(0)​Xc​(2)Xc​(1)​1​⎦⎥⎤​=⎣⎡​xn​yn​1​⎦⎤​

畸变处理:根据上述畸变模型计算

Pd′=[xdyd1]P^{'}_d=\begin{bmatrix}x_d \\ y_d\\ 1\end{bmatrix}Pd′​=⎣⎡​xd​yd​1​⎦⎤​

内参转换:

(uv1)=(fx0Cx0fyCy001)[xdyd1]\begin{pmatrix}u\\ v\\ 1\end{pmatrix}=\begin{pmatrix}f_x & 0 & C_x\\ 0& f_y & C_y\\ 0&0 &1 \end{pmatrix}\begin{bmatrix}x_d \\ y_d\\ 1\end{bmatrix}⎝⎛​uv1​⎠⎞​=⎝⎛​fx​00​0fy​0​Cx​Cy​1​⎠⎞​⎣⎡​xd​yd​1​⎦⎤​

二、单目相机标定:

1.标定思路:

在不同位置对标定板进行拍照,一个标定板上最少有四个角点;单个标定板图片能计算内参矩阵和外参矩阵的乘积,因而能计算多个乘积;单个标定板图片使用的内参矩阵相同,因而可以结合多个乘积求解内参接矩阵;再求解每个标定板图片对应的外参矩阵;最后求解五个畸变参数;

注:标定时标定板应该尽量在图片四周,才能尽可能估计出准确的畸变参数。

2.标定原理推导:

相机标定之张正友标定法数学原理详解(含python源码)

图像处理–相机标定(Camera calibration)_fengye2two的专栏-CSDN博客_图像标定

3.标定具体实现:

摄像头标定 Python + OpenCV

图像矫正去畸变_雾里_看花的博客-CSDN博客

[图像]图像缩放算法-双线性内插法_祥的专栏-CSDN博客

参考文献:

Camera Calibration Theory - Calcam documentation

鱼眼相机成像模型_sylvester的博客-CSDN博客_鱼眼相机模型

如果觉得《针孔相机模型 鱼眼相机模型 单目标定》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。