棋盘格检测--Automatic camera and range sensor calibration using a single shot

2019-05-28 12:10:55 浏览数 (1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1436945

Automatic camera and range sensor calibration using a single shot

Robotics and Automation (ICRA), IEEE, 2012: 3936-3943

2012 IEEE International Conference on.

这里主要介绍一下 Automatic camera and range sensor calibration using a single shot 这篇文献中的棋盘格特征点检测算法

参考了 https://blog.csdn.net/electech6/article/details/52770010

大的思路就是基于模板匹配检测棋盘格角点,首先定义角点的模板,然后使用模板和图像进行卷积得到一个 Corner likelihood 图 C,将卷积响应较大的位置作为棋盘格角点的候选位置,接着使用了非极大值抑制进行过滤,然后用梯度方向信息进行二次过滤,具体就是用梯度统计的方法在一个n x n局部邻域内验证这些候选点。

下面进行详细分析

首先来看看这个 Corner likelihood 图 C 是怎么得到的? 它是 模板和图像进行卷积得到的。需要先定义角点模板,这里我们定义了两组不同的模板(两种角点原型), two different n × n corner prototypes,主要针对两种不同情况,

第一种情况就是针对 axis-aligned corners,如下图所示

我们定义的模板如下图所示

第二种情况就是棋盘有旋转45度的角点,定义的模板如下图所示

每种角点原型定义了 四个 filter kernels {A,B,C,D}

Each prototype is composed of four filter kernels {A,B,C,D}, which are convolved with the input image I

从模板定义图我们可以看出, A,B是互为对角的, C,D 互为对角,

对应一个棋盘格角点,要么 A、B 比 C、D 亮,要么C、D比 A、B 亮。如何将这个特点使用数学公式描述了

上面的 i 表示 prototype类型 s_i_1 ,s_i_2 表示 the likelihood of the two possible flippings for prototype i,即这个 1,2 对应角点翻转的情况,如下图所示就是一个翻转情况, s_i_1 对应下图左边的情况,s_i_2 对应下图右边情况,i=1(白色为255,黑色为0)

µ 表示 使用一类角点原型 4个滤波器核进行图像卷积响应 求和平均,类似计算邻域的均值

每一类角点原型有两种情况(对应翻转),一共有两类角点原型(对应旋转),一共有四种情况,

图像每个位置我们不知道是哪种情况,所以将四种情况都计算一遍,然后以响应值最大的作为输出

所以 c 是求 四种情况中响应最大的那个响应值,

Corner likelihood 图 C 如下所示

Importantly, note that the above definition leads to a low likelihood c, if any of the four filter kernels responds weakly. This is important for removing as many non-checkerboard style corners as possible from the hypotheses space.

注意: 从上面的定义我们知道,如果4个卷积核响应中任意一个比较弱,那么就会得到一个较小的 likelihood c,这对于过滤图像中很多非棋盘格角点的位置很重要。当然这也会导致一些漏检问题,因为图像存在一些畸变、光照等问题,导致 4个卷积核响应中某一个响应可能比较弱,那么就会直接过滤掉了。

To produce a list of corner candidates, we apply conservative non-maxima-suppression (with parameters n_nms and τ_nms ) 18 on C

接下来我们在 C 上进行 非极大值抑制,过滤一些噪声点。

followed by verifying the candidates by their gradient statistics in a local n × n pixel neighborhood,

接着我们在 n × n 邻域 使用梯度方向统计 进行 角点验证,对应棋盘格角点,其邻域梯度方向非零的值基本是两个值中的一个,对应这个邻域中的两条直线,下面就是用方向直方图将这两条直线的角度找出来,使用 mean shift 得到 α1 and α2, 对应这两条直线

We compute a weighted orientation histogram (32 bins) from Sobel filter responses and find the two dominant modes α1 and α2 using mean shift 19

Based on the edge orientations, we construct a template T for the expected gradient strength ||∇I|| 2

基于上面得到的直线方向,我们构建一个模板 T,然后用这个 T 和 梯度幅值 ||∇I|| 2 计算 归一化相关系数 normalized cross-correlation operator

将这个 归一化相关系数 与 corner likelihood 相乘得到最终的 corner score,使用阈值过滤,得到最终的 corner candidates

B. Sub-pixel Corner and Orientation Refinement 亚像素角点和方向优化

角点亚像素精确定位有助于相机标定准确度的提升。这里我们优化角点的位置和方向两个信息。这里的位置和方向优化都是基于方向约束来设计的。

对于角点位置优化来说,假定角点位于 c 点,其邻域有一个图像点 p, 其图像梯度为 g_p, 这个梯度方向应该垂直于 pc 线段的方向,也就是这两个向量相乘为0 即: g_pT(p-c)=0 ,当p点不是边缘点,位于平坦区域,那么其图像梯度 g_p=0, 还是满足 g_pT(p-c)=0

在实际中,平坦区域的图像点的梯度可能不是0,边缘点的梯度方向不一定完全垂直边缘直线方向,可以使用下面的最小化来表示

N_I 是一个位于角点候选位置的 局部 11 × 11 的像素区域,上面这个最小化问题有一个解析解:

接下来优化边缘方向 edge orientation vectors e1 和 e2,we seek to minimize the error in deviation of their normals

with respect to the image gradients,这里我们最小化 图像梯度和他们的法线方向的偏差,即梯度方向和法线方向是垂直的

M_i 是邻域的一些点,这些点位于边缘直线上,neighboring pixels, which are aligned with the gradient

mi = cos(αi )sin(αi)T of mode i

上面最小化问题的解可以通过设置 上式 Lagrangian 的 derivative 为 0,变为一个 eigenvalue problem, ei 对应一个矩阵最小特征值对应的向量,这个矩阵如下所示

棋盘格检测:

这里通过检测到的角点,将属于同一个棋盘的角点连接起来。具体步骤如下:给定一个种子角点,我们沿着它的边缘方向 e1 和 e2 寻找离它最近的角点,我们得到一个 2 × 2 棋盘区域,以及一个对应的 energy value E(X,Y),然后我们向四周扩展这个 2 × 2 棋盘区域,具体往哪里扩展了? 朝使 E(X,Y) 下降最多的那个方向 扩展。最终我们找到一个棋盘格内左右的小方块区域。

Given a seed corner, we search for its closest neighbors in the direction of its edges e 1 and e 2 , yielding an initial

2 × 2 checkerboard hypothesis with an associated energy value E(X,Y). To optimize E(X,Y), we propose expansion

moves on Y, which expand any of the checkerboard borders by a single row or column. Amongst all four possibilities,

we select the proposal, which reduces E(X,Y) the most.

Fig. 3(a) illustrates the expansion moves exemplarily

能量函数定义

11

0 人点赞