当前位置: 主页 > VR

畸变校正-鱼眼镜头 畸变校正ps

发布时间:2023-03-18 10:17   浏览次数:次   作者:佚名

镜头畸变校正

四大坐标系的关系:

实质上就是空间上的一点由世界坐标系转换到摄像机坐标系,然后再将其投影到成像平面坐标系,最后再将成像平面上的数据转化到图形像素坐标系。

鱼眼镜头 畸变校正ps_畸变校正_几何畸变校正

四大坐标系的关系

世界坐标系(Xw,Yw,Zw),相机坐标系(Xc,Yc,Zc),成像平面坐标系(x,y),像素坐标系(u,v)

图像坐标系(x,y)与像素坐标系(u,v)之间的转化:

鱼眼镜头 畸变校正ps_畸变校正_几何畸变校正

图像坐标系与像素坐标系

假设(u0,v0)代表O1在u-v坐标系下的坐标,dx与dy分别表示每个像素在横轴x和纵轴y上的物理尺寸,则图像中的每个像素在u-v坐标系中的坐标和在x-y坐标系中的坐标之间都存在如下的关系:

鱼眼镜头 畸变校正ps_几何畸变校正_畸变校正

u%3Dx%2Fdx%2Bu_0

v%3Dy%2Fdy%2Bv_0

为了使用方便,可将上式用齐次坐标与矩阵形式表示出:

鱼眼镜头 畸变校正ps_几何畸变校正_畸变校正

将普通坐标转换为齐次坐标,通常就是在增加一个维度,这个维度上的数值为1。使得计算更加规整,使得之后的运算更加简便

三大坐标系的关系:

鱼眼镜头 畸变校正ps_几何畸变校正_畸变校正

摄像机坐标系(Xc,Yc,Zc)到图像坐标系(x,y):

畸变校正_几何畸变校正_鱼眼镜头 畸变校正ps

通过三角形的相似,可以得出(f为焦距):

鱼眼镜头 畸变校正ps_畸变校正_几何畸变校正

鱼眼镜头 畸变校正ps_畸变校正_几何畸变校正

注意由于齐次坐标系的伸缩不变性,和表示的是同一点(不会改变其坐标值)

世界坐标系到摄像机坐标系:

二者之间刚体变换的数学表达式:

鱼眼镜头 畸变校正ps_几何畸变校正_畸变校正

对应的齐次表达式:

畸变校正_鱼眼镜头 畸变校正ps_几何畸变校正

其中,R是3×3的正交单位矩阵(即旋转矩阵),t为平移向量,R、t与摄像机无关。

将上式进行合并:

鱼眼镜头 畸变校正ps_几何畸变校正_畸变校正

几何畸变校正_鱼眼镜头 畸变校正ps_畸变校正

镜头畸变:

镜头畸变包括径向畸变和切向畸变两类

径向畸变:径向畸变是沿着透镜半径方向分布的畸变,产生原因是光线在原理透镜中心的地方比靠近中心的地方更加弯曲,这种畸变在普通廉价的镜头中表现更加明显,径向畸变主要包括桶形畸变和枕形畸变两种。

几何畸变校正_鱼眼镜头 畸变校正ps_畸变校正

成像仪光轴中心的畸变为0,沿着镜头半径方向向边缘移动,畸变越来越严重。畸变的数学模型可以用主点(principle point)周围的泰勒级数展开式的前几项进行描述,调节公式为:

几何畸变校正_鱼眼镜头 畸变校正ps_畸变校正

式里(x0畸变校正畸变校正,y0)是畸变点在成像仪上的原始位置,(x,y)是畸变较真后新的位置,下图是距离光心不同距离上的点经过透镜径向畸变后点位的偏移示意图,距离光心越远,径向位移越大,表示畸变也越大,在光心附近,几乎没有偏移。

畸变校正_几何畸变校正_鱼眼镜头 畸变校正ps

切向畸变:切向畸变是由于透镜本身与相机传感器平面(成像平面)或图像平面不平行而产生的,这种情况多是由于透镜被粘贴到镜头模组上的安装偏差导致。畸变模型可以用两个额外的参数p1和p2来描述:

鱼眼镜头 畸变校正ps_几何畸变校正_畸变校正

畸变校正_几何畸变校正_鱼眼镜头 畸变校正ps

大体上畸变位移相对于左下——右上角的连线是对称的,说明该镜头在垂直于该方向上有一个旋转角度。

鱼眼镜头 畸变校正ps_几何畸变校正_畸变校正

根据上述两式,可以得出矫正畸变后的坐标和矫正前的坐标关系为:

几何畸变校正_鱼眼镜头 畸变校正ps_畸变校正

摄像机标定误差包括内参(4个)、畸变参数(径向和切向共5个)、外参(平移和旋转共6个)

摄像机标定过程:简单的可以简单的描述为通过标定板,如下图,可以得到n个对应的世界坐标三维点xi和对应的图像坐标二维点xi,这些三维点到二维点的转换都可以通过上面提到的相机内参K,相机外参R和t,以及畸变参数D,经过一系列的矩阵变换得到。

鱼眼镜头 畸变校正ps_几何畸变校正_畸变校正

假设我们提供K个棋盘图像,每个棋盘有N个角点,于是我们拥有2KN个约束方程。(乘以2是因为每个点都由x和y两个坐标值组成)与此同时,忽略畸变的情况下,我们就需要求解4个内参和6K个外参(内参只与相机内部参数有关,外参却随目标点位置变化而变化),也就是说,只有当2KN>=4+6K的时候,也即K(N-3)>=2时,才能求出内外参矩阵。同时,无论在一张棋盘上检测到多少角点,由于棋盘上角点的规则布置使得真正能利用上的角点只有4个(在四个方向上可延展成不同的矩形),于是有当N=4时,K(4-3)>=2,即K>=2,也就是说,我们至少需要两张棋盘在不同方位的图像才能求解出无畸变条件下的内参和外参。实际上我们往往会在一张棋盘上布置更多的角点,因为这样就可以通过最小二乘法求得最优解了,同样地,我们会需要至少10张以上的棋盘图像,目的是考虑数值稳定性和提高信噪比,得到更高质量的结果。

1、准备标定板

畸变校正_几何畸变校正_鱼眼镜头 畸变校正ps

几何畸变校正_畸变校正_鱼眼镜头 畸变校正ps

2、需要使用findChessboardCorners函数提取角点,这里的角点专指的是标定板上的内角点,这些角点与标定板的边缘不接触。

3、对每一张标定图片,为了提高标定精度,需要在初步提取的角点信息上进一步提取亚像素信息,降低相机标定偏差,常用的方法是cornerSubPix

4、相机标定

获取到棋盘标定图的内角点图像坐标之后,就可以使用calibrateCamera函数进行标定,计算相机内参和外参系数及畸变系数

5、查看标定效果——利用标定结果对棋盘图进行矫正

利用求得的相机的内参和畸变系数,可以对图像进行畸变的矫正,主要有两种方法:

方法一:使用initUndistortRectifyMap和remap两个函数配合实现。

initUndistortRectifyMap用来计算畸变映射,remap把求得的映射应用到图像上。

方法二:使用undistort函数实现(输入内参和畸变系数)

鱼眼镜头 畸变校正ps_畸变校正_几何畸变校正

最终结果