棋盘格标定板角点的提取算法(摘取自开源算法PTAMM的相机标定部分)

在机器视觉领域,相机标定是一项很基础的任务。目前我们的经常使用的标定工具有opencv和matlab。


opencv的棋盘格角点提取API需要我们指定棋盘格的横纵点数,才能进行角点的提取。其主要流程是把图片二值化,形态学处理,找到若干个四边形,给各个四边形编号,根据所获取的这一组四边形和设置的横纵点数进行漏掉的四边形补上、多余的剔除。若找失败,则改变二值化和形态学等参数继续这一过程,直到找到或者满足失败退出条件。这是opencv上的找棋盘格角点的算法大致过程。使用中opencv还要求用于标定的图片所采集到的标定板完整,且有一圈白边。想详细了解可以参考opencv源码。


而在Matlab上使用自动找棋盘格角点函数时,不需要设置棋盘格横纵点数就可以提取棋盘格角点,并会返回棋盘格的横纵点数。主要过程未了解过。


PTAMM是一款AR/VR的开源软件,也即是相机姿态估计算法在虚拟现实或现实增强中的应用。其包含有一个相机标定工具。这一款相机标定工具没有使用opencv,而是自己编写有寻找棋盘格角点的算法。该算法不要求图片上的棋盘格完整,不完整的棋盘格的图片也能用于相机标定。


研究其找棋盘格角点源码,其主要过程是:


对图片每个像素的周围选取一个圆环上的像素,判断这一圆环上的像素黑白交换次数是否满足4次、交换间隔是否差不多均和中心点像素值是否和该圆环上所有像素的均值差不多等;由若满的点获取到一系列的棋盘格角点的备选点。接下来在这一堆点中选取一个与图片中心最近的点作为棋盘格的原点,判断该点的X、Y方向以及优化中心点,根据这X,Y方向再在备选点里面找到更多的棋盘格的点,然后优化进一步扩张,直至结束。


其中中心和X,Y方向的优化是使用一个棋盘格角点模板(由迭代初值生成,迭代过程中进行修改)与该点处图片的同样大小邻域的像素进行相识度匹配,匹配误差用于修改中心和X、Y方向。如果迭代几次后该点的匹配度还是比较大,则该点舍弃。


以上只是大致过程。很久以前看到的,目前凭着记忆写了写而已。



你可能感兴趣的:(标定)