棋盘格角点提取

参考资料

1、论文
Geiger A, Moosmann F, Car Ö, et al. Automatic camera and range sensor calibration using a single shot[C]//Robotics and Automation (ICRA), 2012 IEEE International Conference on. IEEE, 2012: 3936-3943.
2、代码网站
http://www.cvlibs.net/software/libcbdetect/

算法原理介绍

1. 棋盘格角点粗提取

使用两种滤波器,对图片做滤波处理,建议使用高斯滤波器

Imatest SFR棋盘格刀口自动提取_算法


对于第i个模型中的A高斯核对图像做卷积有Imatest SFR棋盘格刀口自动提取_角点_02 (例如 :有1*11的高斯核可以看成左上,右上,左下,右下角有数字,其他位置填0)

Imatest SFR棋盘格刀口自动提取_角点_03

对于所有的像素点我们可以获得c(Corner likelihood)值
其中:

Imatest SFR棋盘格刀口自动提取_算法_04


上述两张图片代表角点的两种情况,假设该点定义角点 ,左上角图像在Imatest SFR棋盘格刀口自动提取_角点_02Imatest SFR棋盘格刀口自动提取_特征值_06 像素值大于 Imatest SFR棋盘格刀口自动提取_计算机视觉_07,Imatest SFR棋盘格刀口自动提取_算法_08

因此,min(Imatest SFR棋盘格刀口自动提取_角点_02,Imatest SFR棋盘格刀口自动提取_特征值_06) - Imatest SFR棋盘格刀口自动提取_算法_11 等同于像素值大的值减去4个格子的均值,该值大于0。

Imatest SFR棋盘格刀口自动提取_算法_11 -min(Imatest SFR棋盘格刀口自动提取_计算机视觉_07,Imatest SFR棋盘格刀口自动提取_算法_08) 等同于减去4个格子的均值像素值小的值,该值大于0。

取两种值最小的作为结果。

Imatest SFR棋盘格刀口自动提取_特征值_15所示:

Imatest SFR棋盘格刀口自动提取_角点_16


对于右边图片使用公式Imatest SFR棋盘格刀口自动提取_特征值_15,就会出现min(Imatest SFR棋盘格刀口自动提取_角点_02,Imatest SFR棋盘格刀口自动提取_特征值_06) - Imatest SFR棋盘格刀口自动提取_算法_11Imatest SFR棋盘格刀口自动提取_算法_11 -min(Imatest SFR棋盘格刀口自动提取_计算机视觉_07,Imatest SFR棋盘格刀口自动提取_算法_08) 都负值,后期通过阈值过滤时就会被滤除,故引出了Imatest SFR棋盘格刀口自动提取_计算机视觉_24的公式,综合两种情况寻找角点。下图为原图片和根据c值生成的图片。

Imatest SFR棋盘格刀口自动提取_角点_25


Imatest SFR棋盘格刀口自动提取_算法_26


获取到角点位置以后,在Cornerlikelihood图片里使用非极大值抑制算法,去除干扰点。

代码中对于NMS算法首先搜索NN区域中的最大值,确定最大值位置,在该位置NN区域中确定该点是否为最大值,确定则保留该点否为继续下一次循环。

利用Soble计算出X,Y方向的梯度,角度和权重。

Imatest SFR棋盘格刀口自动提取_角点_27


首先我们将粗提取的角点周围N*N窗口内所有的梯度方向映射到一个32bin的直方图里(180°分成了32份),用梯度幅值(权重)作为加权值,使用找到最大的两个幅值作为模态a1,a2(直方图做一个高斯平滑,使用meanshift找到两个极大值)对应模态a1,a2的角度为Imatest SFR棋盘格刀口自动提取_机器学习_28,Imatest SFR棋盘格刀口自动提取_算法_29,变成m1(Cos(Imatest SFR棋盘格刀口自动提取_机器学习_28),Sin(Imatest SFR棋盘格刀口自动提取_机器学习_28)),作为方向。

Imatest SFR棋盘格刀口自动提取_机器学习_32


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

对于亚像素角点的提取,论文分成两个部分,一个是优化角点的位置,第二个是优化角点的边缘方向

2.1 精细化角点位置

Imatest SFR棋盘格刀口自动提取_计算机视觉_33


该方程属于典型的最小二乘问题,对于所有的AX=b问题,通过最小二乘法,可以变成

Imatest SFR棋盘格刀口自动提取_特征值_34


因此就可以将上述问题变成:

Imatest SFR棋盘格刀口自动提取_机器学习_35


可以根据图像梯度获得一下方程:

Imatest SFR棋盘格刀口自动提取_机器学习_36


2.2 精细化角点方向对于精细化方向论文中提出了三个公式:

Imatest SFR棋盘格刀口自动提取_算法_37


Imatest SFR棋盘格刀口自动提取_算法_38


思想是最小化图像梯度和他们的法线方向的偏差,即梯度方向和法线方向是垂直的。原文中提出了该方程使用SVD分解出最小特征值和最小特征向量,取最小特征值地下的特征向量最小角点的精细化方向。

该方法可以理解为求解AX=0 且 ||X||=1问题。即解Imatest SFR棋盘格刀口自动提取_算法_39的最小特征值对应的特征向量。

就此所有角点的精细化完成。