前言
棋盘格中角点检测方法是相机标定中必不可少的步骤之一。Opencv中的函数
bool findChessboardCorners(InputArray image, Size patternSize, OutputArray corners, int flags=CALIB_CB_ADAPTIVE_THRESH+CALIB_CB_NORMALIZE_IMAGE )
就可以轻松实现棋盘格角点检测结果。如下图所示
具体使用方法参考如下链接
http://blog.csdn.net/u011651743/article/details/51099543
但是,这种方法虽然简单,但是在实际使用中有如下问题:
1、 需要提前指定棋盘格尺寸。这在很多自动化应用中是很难做到的。
2、 鲁棒性差。棋盘格如果有干扰(比如轻微的遮挡)就会使得检测失败,而且棋盘倾斜角度较大也会检测失败。具体测试见上述链接。
3、 无法处理一张图片包含多张棋盘的情况。
基于此,今天介绍的是一种新的检测方法。主要参考论文《Automatic Camera and Range Sensor Calibration using a single Shot》。可以针对性地解决上述问题。
优点:
1、 不需要提前指定棋盘格数目。
2、 鲁棒性好。因为是基于生长的算法,所以如果出现干扰,就会绕过干扰,生长出最大的棋盘。
3、 可以检测一个图片里包含多张棋盘的情况。
缺点:
1、受棋盘的矩形形状约束,只能生长出矩形的棋盘。严格的说也不能算缺点,因为本身棋盘就是矩形的,真的长出三头六臂还能叫棋盘吗。不过以后我会介绍一种不依赖棋盘约束的方法。
2、计算量较大。主要集中在棋盘生长部分。
先来欣赏一下该方法的结果吧
算法原理介绍
算法主要分三个步骤&