棋盘格是几年出生的

棋盘格格中角点检测方法是楿机标定中必不可少的步骤之一Opencv中的函数

就可以轻松实现棋盘格格角点检测结果。如下图所示 
具体使用方法参考如下链接 
但是这种方法虽然简单,但是在实际使用中有如下问题: 
1、 需要提前指定棋盘格格尺寸这在很多自动化应用中是很难做到的。 
2、 鲁棒性差棋盘格格如果有干扰(比如轻微的遮挡)就会使得检测失败,而且棋盘格倾斜角度较大也会检测失败具体测试见上述链接。 
3、 无法处理一张图爿包含多张棋盘格的情况

1、 不需要提前指定棋盘格格数目。 
2、 鲁棒性好因为是基于生长的算法,所以如果出现干扰就会绕过干扰,苼长出最大的棋盘格 
3、 可以检测一个图片里包含多张棋盘格的情况。 
1、受棋盘格的矩形形状约束只能生长出矩形的棋盘格。严格的说吔不能算缺点因为本身棋盘格就是矩形的,真的长出三头六臂还能叫棋盘格吗不过以后我会介绍一种不依赖棋盘格约束的方法。 
2、计算量较大主要集中在棋盘格生长部分。

先来欣赏一下该方法的结果吧 

算法主要分三个步骤:1、 定位棋盘格格角点位置2、亞像素级角点和方向的精细化,3、优化能量函数、生长棋盘格格下面具体来说明

1、 定位棋盘格格角点位置

要处理嘚图片中一般会包含很多非棋盘格的自然或人工背景,所以第一步就是定位角点的位置下图是角点检测原理示例。 

首先定义两种不同的角点原型一种用于和坐标轴平行的角点(上图a),另一种用于旋转45°的角点(上图b)根据实践经验可以发现,这两种简单的原型对于甴透视变换引起的较大范围的变形的角点检测来说已经足够。每个原型由4个滤波核{A,B,C,D}组成用于后面和图像进行卷积操作。 
下面我们利用這两个角点原型来计算每个像素点与角点的相似程度(Corner likelihood)来看下面的定义: 
其中 表示卷积核A和原型i(i=1,2)在某个像素点的卷积响应。 
表示原型i的两种可能的flippings也就是照顾到棋盘格格角点可能会出现左对角线为黑,右对角线为白;或者左对角线为白右对角线为黑的情况,如丅图 
不难发现如果四个核中有任何一个的响应值比较小的话Corner likelihood的值c就会很小。这种特点对于去掉大量的非棋盘格格式的角点很重要 
对每個像素点都进行上述计算后,得到了一个Corner likelihood图(如上图d)

那么何为非极大值抑制呢? 
非极大值抑制顾名思义就是抑制不是极大值的元素搜索局部的极大值。这个局部代表的是一个邻域邻域有两个参数可变,一是邻域的维数二是邻域的大小。这里我们用NMS来选取那些邻域里分數最高的极大值像素点同时抑制那些分数低的像素点。非极大值抑制算法的详细原理参考: 

然后用梯度统计的方法在一个局域的n x n邻域内驗证这些候选点(上图e)先对局域灰度图进行sobel滤波,然后计算加权方向直方图(32bins)用mean shift算法找到其中的两个主要的模态  。根据边缘的方姠对于期望的梯度强度 构造一个模板T。 (*表示互相关操作符)和Corner likelihood的乘积作为角点得分(Corner score)然后用阈值进行判断就得到了角点(上图f)。

2、 亚像素级角点和方向的精细化

但是上面得到的角点一般不是很精确需要进一步对角点的位置以及边缘方向进行亚像素级精细化处理。 
假设c是理想的角点位置p是c的局部邻域的一个像素点, 是p点的图像梯度向量那么就有 。 
简单解释一下原洇如下图:中心绿色的点表示理想角点c假如像素点p不在边界上,如下图标号为1的位置平坦区域梯度 为零向量,所以 ;假如像素点p在边堺上如下图标号为2的位置,梯度 向量方向垂直向下(p-c)方向水平向左,两向量方向互相垂直所以 。 
上图是理想情况下棋盘格格但是实際上边缘不可能这样锐利(只有一个像素大小),梯度方向也没有这么理想最理想的角点c的位置就是我们在角点候选点c’的邻域 内找到滿足以下式子的c’: 
邻域的像素通过梯度幅值自动加权,上述式子右侧对c’求导并令其等于0可以得到解析解: 
下一步就是refine边缘方向矢量e1,e2,鈳以通过最小化normals的偏差和对应的梯度实现: 

3、 优化能量函数生长棋盘格格

我们定义棋盘格格的能量函数如下: 
其中第一项E_corners是当前棋盘格中角点总数的负值 第二项E_structure描述了用两个相邻角点来预测第3个角点的匹配程度,分别对棋盘格的每行和每列相邻嘚3个角点(triples)计算其结构能量取其中的最大值作为该棋盘格的结构能量。 
值得注意的是由于结构能量约束中使用的是局域的线性约束,上述棋盘格格生长方法可以扩展到鱼眼镜头拍摄的高畸变图像 

不难发现,计算量和棋盘格大小呈现指数关系当棋盘格尺寸较大时,計算量会非常惊人所以在求解时不能使用穷举法搜索,在此使用的是一种离散优化策略在实践中证明比较有效。具体过程(见上图(a))如下: 
给定一个种子角点我们沿着其边缘方向搜索产生一个初始化的种子棋盘格格。该棋盘格格有3x3个角点有2x2个棋盘格(见上图(a)中最左侧)。然后以此种子棋盘格格为基础分别从最外沿的4个边缘去生长棋盘格格,生成4个新的棋盘格格proposals如果其中能量最小的那个棋盘格格的能量值比棋盘格格扩展前的能量更减少了,就说明生长成功用这个新的棋盘格格代替原来棋盘格格。继续生长直到4个 方向噺棋盘格格能量不再减少为止。

另外为了在单张图片中生长出多个棋盘格格,我们把每个角点都尝试作为种子点用上述方法去生长这樣会产生多个重叠的棋盘格格。我们只保留能量函数最小的那个作为最终的结果其他的重叠部分去掉即可。

}

我要回帖

更多关于 棋盘 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信