鱼眼标定方式

鱼眼作用

人单眼水平视角最大可达156度,垂直方向150度。为了增加可视范围,摄像头可以通过畸变参数扩大视野,一般100度到200度的fov。所以鱼眼是为了看的视野更大,注意在一定分辨率下,fov边缘的像素点稀疏,所以对于识别或是求解世界坐标误差会大点。

内参矩阵K:
    [fx   0    cx]
K = [0    fy   cy] 
    [0    0     1]

内参矩阵K是3X3的矩阵。其中,fx和fy是焦距(focal length)参数。cx和cy是图像平面原点(principal point)的坐标。

畸变参数 D = [k1 k2 p1 p2 k3]

畸变参数矩阵D是1x5的矩阵
其中, k1、k2、k3 是径向畸变系数(radial distortion coefficients) p1、p2 是切向畸变系数(tangential distortion coefficients)

标定原理

成像的过程实质上是几个坐标系的转换。首先空间中的一点由世界坐标系转换到摄像机坐标系 ,然后再将其投影到成像平面图像物理坐标系,最后再将成像平面上的数据转换到图像平面图像像素坐标系。
通过棋盘格标定方式可以确定内参与畸变参数。
定义坐标系:
世界坐标:坐标表示为(X, Y, Z),以摄像头为原点,右手螺旋法则,Z为指向棋盘格的方向,四个手指指向右边为X,正向下为Y。
像素坐标:坐标表示为(U, V),其中图像的左上方为原点O, 向右为U,与世界坐标系的X轴平行;向下为V,与世界坐标系的Y轴平行。
根据棋盘格的角点,小孔成型原理,PNP算法,可以建立多元线性方程,其实就是求解该方程。
推理过程详解参考

代码实现

opencv提供算法接口,直接输入棋盘格的角点个数就可以了,比如 9行* 12列,那就输入8,11既可。关键接口 cv2.findChessboardCorners, cv2.fisheye.calibrate。具体看代码!标定的照片至少30张,越多越好,如果标定的参数不准确,那么矫正后的图片像素坐标会浮动很大。
鱼眼标定代码

你可能感兴趣的:(视觉AI,棋盘格,相机标定内参畸变系数,视觉算法,张正友标定)