PC端、vs2013+opencv3.0、摄像头为淘宝购置的鱼眼摄像头外设+iphone6
二、镜头标定
1. 输入畸变的棋盘格图以及棋盘格的size(横纵坐标上的角点个数)
该图片中棋盘格的size为(15,10)
2. 提取棋盘格角点 findChessboardCorners
§ 二值化
将输入的图像从color转化为gray的灰度图。
§ CheckChessboard
判断图片中是否有chessboard。具体方法是将输入图像经过腐蚀Erode和膨胀Dilate操作,分别检测黑色以及
白色正方形格子的数量是否为棋盘格width/2*height/2,如果符合,那么就能简单的确认输入图片是一 张带有棋盘
格的图像。
§ GenerateQuads
生成方格轮廓contour。对于输入图像,先做dilate膨胀操作。之后做findcontour操作,遍历每一个轮廓,如果
该轮廓为方格并且其两个对边的长度都相近,那么将这个方格push到结果中,这些方格即是棋盘格中的小正方形。
§ FindQuadNeighbors
寻找方格的相邻方格。将前一步生成的方格输入,对于每一个方格,都遍历所有的方格,计算相邻的方格定点
的距离,并且找到最近距离的方格,将该方格记做是当前方格的相邻方格。经过了膨胀之后原来相邻的点从一个变
成了两个,现在将这两个点用一个点来替代,这个点就是膨胀之前的两个方格的公共交点。
§ FindConnectedQuads
寻找相互连接的方格。遍历所有的方格,如果该方格有相邻的方格并且它还没有被归类,则将这个方格归在一
个新的group中,之后再考察当前方格的相邻方格,如果相邻方格的相邻方格没有被归类,那么再将新的方格加入
group中,最终,group中包含了所有互相连接的方格。
§ OrderFoundConnectedQuads
将方格排序。将所有的相互连接的方格进行排序,考察每一个方格的相邻方格的个数,并且通过角点的坐标是
否在一直线上,可以考察每一个方格位于哪一列哪一行,返回的方格序列以左上角的为首,顺时针排序。
§ CleanFoundConnectedQuads
剔除多余的方格。如果发现上一步排序后的方格数量超过了我们输入的棋盘格size的width*height,那么就需要
将一些不符合要求的方格剔除。我们需要找到的是最小的方格,如果当前四个角点组成的方格可以用更小的四个角
点组成的方格替代,那就将大的那个方格剔除。一直循环直到方格的数量等于我们提供的棋盘格size中方格的数量。
§ CheckQuadGroup
检查最终的方格。从一个只有一个相邻方格的方格开始检查,将所有的方格相连的角点位置进行一个更加精确
的确定。
§ CheckBoardMonotony
检查方格是否水平平齐。对于每一行和每一列中所有的角点,考察该角点是否投影在该行或者该列的首位点所
形成的线段上,以最终确保棋盘格方格提取的正确性。
§ FindCornerSubPix
找出亚像素角点。对于最终提取出来的方格,找到其亚像素的精确角点,返回这些角点。
上图为标出角点之后的图像
3. 鱼眼标定
鱼眼相机的内参数采用Matx33d保存,具体矩阵形式如下:鱼眼相机的畸变系数是一个四维的向量,用Vec4d保存,具体形式如下:
{k1,k2,k3,k4}
利用calibrate标定函数,即可以将上述的鱼眼相机内参数以及畸变系数都求出来。
标定分为三个步骤:
外部参数标定CalibrateExtrinsics
优化Optimization
确认Validation
§ 外部参数标定CalibrateExtrinsics
首先初始化外部参数值InitExtrinsics,紧接着计算这些外部参数的值ComputeExtrinsicRefine(利用雅克比矩阵
不断迭代运算,最终得到平移矩阵,旋转矩阵和旋转向量)。
§ 优化Optimization
反复调用外部参数标定CalibrateExtrinsics,直到所有的参数都达到最优化。
§ 确认Validation
利用不确定性评估EstimateUncertainties,得到误差参数,如果误差参数控制在一定的范围内,则确认通过。
最终返回Matx33d表示鱼眼相机内参数和Vec4d表示畸变系数。
三、畸变校正
1. 初始化未畸变的校正图initUndistortRectifyMap。
上述公式为透镜畸变前后图像坐标变换的公式。
initUndistortRectifyMap完成了畸变前后的对应关系:
1. 由图像坐标系反变换到相机坐标系中
2. 然后,校正反变换R-1,一般无校正变换的相机,默认为单位矩阵
3. 归一化,并进行相机透镜畸变处理
4. 由相机坐标转换到图像坐标。
由此,得到由图像模型到透镜畸变模型相互变换的对应关系u <->mapx, v <-> mapy。
在相机标定过程中的Matx33d表示鱼眼相机内参数和Vec4d表示畸变系数与公式中对应。
2. 校正remap
利用上一步得到的mapx和mapy的对应关系,将鱼眼畸变图形通过remap校正回正常的图片。
四、校正流程框图
五、校正效果测试
源码链接:https://share.weiyun.com/5YV5eSV