文章:Automatic Detection of Checkerboards on Blurred and Distorted Images
作者:Martin Rufli, Davide Scaramuzza, and Roland Siegwart Autonomous System Lab, ETH Zurich, Switzerland
编译:点云PCL
本文仅做学术分享,如有侵权,请联系删除。欢迎各位加入免费知识星球,获取PDF论文,欢迎转发朋友圈。内容如有错误欢迎评论留言,未经允许请勿转载!
公众号致力于分享点云处理,SLAM,三维视觉,高精地图相关的文章与技术,欢迎各位加入我们,一起每交流一起进步,有兴趣的可联系微信:920177957。本文来自点云PCL博主的分享,未经作者允许请勿转载,欢迎各位同学积极分享和交流。
摘要
大多数现有的相机标定工具箱需要用户在不同位置和方向上捕获棋盘格数据,因为角度的问题可能角点检测不一定鲁棒,本文则提出了一种棋盘格的自动检测算法,该算法可以在模糊和严重失真的大广角相机获取的图像中提取棋盘格角点的位置和排列顺序,该方法适用于透视相机和全向相机,本文对现有的角点检测方法进行了评价,分析了其在检测模糊和畸变严重图像集中角点方面的优缺点,从分析结果开始,提出、实施和测试了几项改进,实验表明,该算法能够在低至VGA分辨率的全向图像上一致性地识别80%的角点,并且在更高分辨率下接近100%的角点正确提取,显著优于现有的实现,该方法的性能在多个不同分辨率、失真和模糊的测试图像集上得到了验证,这些测试图像集使用了不同类型的相机获取得到。
介绍
相机可以以有限的视野(即透视摄像机)或宽视野出现,可通过使用鱼眼镜头(如尼康或西格玛)或通过将标准透视相机与成形镜相结合(如折反射全向相机,图1)来构建宽视场相机。
图1.左:放置在摄像机上的双镜头。右上角:飞利浦SPC 300。右下角:飞利浦ToUCam Fun。
主要贡献
本文的主要贡献是提出了一种新的启发式算法来检测模糊和高度失真图像中的棋盘格,特别是通过这种启发式方法,标准棋盘格检测算法的检测率从20%提高到80%,使用高质量的摄像机几乎达到100%。
主要内容
我们知道OpenCV是一个开源的计算机视觉库,最初由Intel开发,它具有许多视觉应用的算法,特别是配备了Vladimir Vezhnevets开发的棋盘角提取功能,该函数识别棋盘中的单个黑色棋盘,然后尝试将它们合并回原始图案,作为一种基于区域的方法,它的优点是比基于直线的方法对噪声和模糊图像更具鲁棒性,下面是对该算法重要部分的逐步分析,在本文后续介绍中,我们将根据我们的需要对其进行调整。
A . 算法的步骤
1)算法输入:算法的输入是包含给定大小的黑白棋盘的图像。如果提供彩色图像,则需要进行灰度转换,然后,该算法进行阈值步骤。
2) 自适应阈值:二值化阈值分割非常适合在大多数情况下区分黑白跳棋,该算法支持自适应阈值,根据给定的阈值大小对图像进行局部二值化,并通常为非均匀亮度图像提供更高级别的分割结果,有两种核方法可实现:“均值”和“高斯”核。在最初的方法中,使用了“均值”,这需要相当少的计算能力,因此非常适合从视频流中检测棋盘格,其运算时间也至关重要,由于模糊、噪声或过于粗糙的采样,阈值分割出来的黑白图像中的棋盘格往往连在一起。为了正确识别,需要将它们分开,一般采用腐蚀的方法
3) 腐蚀:使用腐蚀步骤(通过使用3x3“rect”核,见图5)是 Vezhnevets 实现该算法背后的主要创意,通过这种方式,可以在角落处分离棋盘,并获得一组黑色四边形,根据这些四边形的轮廓,然后通过轮廓检测算法很容易找到其轮廓边界,如果在接下来的步骤中没有发现其他棋盘格,则可以假定棋盘格仍然生长在一起。因此,腐蚀逐渐增加,并重复以上步骤。
图2.左:在自适应阈值和一此腐蚀步骤后的结果。右:在自适应阈值和两此腐蚀步骤之后的结果。
4) 四边形生成:二进制轮廓检测算法尝试查找闭合轮廓,运行后尝试通过逐渐逼近检测到的多边形或四边形拟合到四边形上,这里请注意,在第一次腐蚀运行(图3左)后,只有两个棋盘格正确分开,因此只找到两个四边形。经过两次腐蚀步骤(图3右侧)后,发现了大部分四边形,但并非所有四边形。通过采用更多的侵蚀步骤,图案开始部分溶解,导致一些(小型)棋盘格无法检测到。
图3.左:运行一次腐蚀后发现的所有四边形。右图:在第二次腐蚀后,找到了大部分的四边形。
5) 四边形连接:根据以下启发式算法连接四边形:
•对于每个找到的四边形的每个角点,计算这个点到其他四边形的每个角点的距离,并存储此类最小距离以及相应的角点和四边形ID。
•检查此距离是否小于两个四边形的最小边长度,这是为了确保没有任何四边形连接到太远的四边形上。
• 如果这些测试通过,则将两个角点连接起来,并将提取的角点位置设置为其先前位置的平均值上。
提取的角点最终形成一个棋盘角点,主要通过它们相对于其他角点的位置和邻域关系来描述。
6) 进一步的优化:从所有腐蚀运算中选择找到最多个角点的棋盘,不同腐蚀运算之间不进行信息交换,因此,假设在一次运行中,每个角点在理论上都是可识别的,如果最大的棋盘中具有过多的角点(即由于光导致错误识别的棋盘格),则选择最小凸面的角点。
雷达的强度信息表示激光束返回的能量值,该能量值通常受物体表面反射率的影响,并且对环境光保持不变,当接收到3D点云P时,我们将其投影到圆柱形强度图像I上,I中的每个有效像素都可以与P中的一个点相关联,像素的值由接收点的强度值确定,然后,我们将所有像素值标准化为介于0和255之间,这基本上将强度图像视为灰度图像,使我们能够使用强度图像对其进行处理,没有关联有效点的像素被指定为零值,三维点云的示例如图2(a)所示,其中颜色变化表示强度变化,得到的强度图像如图2(b)所示,其中亮像素和暗像素分别对应于高强度值和低强度值。
B.局限性
OpenCV角点查找算法设计用于常规摄像机的实时标定,重点放在快速运算的效率上,因此在自适应阈值步骤中使用“平均值”而不是“高斯”掩码,此外,如果成功检测到完整的棋盘格,则该算法仅返回一个棋盘,而忽略了一个事实,即出于标定的目的,它通常是可以正确识别重要的角点的。对于低分辨率、模糊和畸变严重图像,该算法都无法正常工作,因此,它在全景相机标定中的用途有限,因此在此类工具箱中的实现也有限。
改进的方案
A.自适应的腐蚀核
与之前使用的核相比,对于大尺寸的特征,腐蚀似乎会均匀地影响所有边界像素,然而,仔细检查后,角点往往会变圆,具体数量取决于棋盘格的方向和使用的核的类型,低分辨率相机拍摄的全向图像通常满足的条件。尽管在最初的实现中使用了尽可能最小的对称腐蚀内核(3x3最大过滤器),但仍然可以实现一些改进:内核大小不能小于3x3,但其形状可以改变,对于对称3x3核,可以构造两种形状,即图5所示的“交叉”和“矩形”,两种形状之间的交替具有保持(小)棋盘格纵横比独立于其方向的效果,即允许均匀“收缩”。
B.一种新的四边形连接启发式算法
在最初的实现中,正确识别的黑色棋盘格被连接到它们的角上,我们发现它适用于高分辨率和大多数未失真的棋盘图像,然而,对于全向相机引入的失真,不一定要将最近的角点与给定的角点匹配,如图6所示。
图6.角点连接的新启发式算法:如果两个候选角(红点)位于四条直线的同一侧(即半透明黄色区域内),则它们成功匹配。
能够实现正确的角点匹配至关重要,不能很好匹配的话将会干扰提取棋盘的结构,从而使所有后续步骤无效,所以我们提出的解决该问题的方案是一种增强型启发式算法,即使在严重变形的情况下,也能通过几何验证其有效性:
•对于每个发现的四边形的每个角点,计算到每个其他四边形的每个角点的距离,并检查该距离是否小于该四边形的最短边长,如果为真,则接受这两个角作为候选相邻对。
•对于每个候选对,关注它们所属的四边形,并绘制两条穿过各自四边形边缘中间部分的直线(见图6)
•如果候选角点和源角点位于以这种方式绘制的四条直线中的每一条的同一侧(这对应于图6中的黄色阴影区域),则角点成功匹配。
C.自适应四边形连接距离
如上所述,四边形仅在其角相距小于一定距离时才连接,在最初的实现中,选择了两个相关四边形的最短边长度作为该距离阈值。但是对于低分辨率图像,腐蚀对四边形的整体大小有很大影响,这可能导致最小边缘长度的急剧减少,因此,对距离测量进行了调整,以减小腐蚀的影响:
D.多次腐蚀时的四边形连接
由于全景相机的反射镜头,模糊会在径向上不均匀地扩散,取决于相机的焦距,朝向图像中心或边缘的点都会变得更加模糊。因此并非所有四边形都在同一腐蚀过程中就可以分离出来,其中一些甚至可能在较小的已经完全消失时才开始分离,因此,可能会遇到这样的问题:即使许多四边形在多次迭代中被成功识别,但并非所有四边形都出现在一次腐蚀中,因此,我们试图通过将部分结果合并为完整结果,在不同腐蚀过程中匹配已发现的四边形棋盘格,因此,该算法扩展如下:
选择发现大多数四边形的棋盘作为“参考棋盘”,在第二次腐蚀中,尝试将之前发现的所有腐蚀流程中所有四边形与上述定义的参考图案的边界匹配。成功匹配后,将更新参考图案以包括新的四边形,并重复整个过程,直到不再添加。图7以图像序列的形式显示了该部分内容。
图7.“不同腐蚀过程中的匹配”过程的可视化。顶部:参考图案(浅绿色),很明显,底部的检查器尚未确定。中间:红色四边形表示在另一次腐蚀运行中发现的候选检查器。底部:将其中一些候选对象添加到参考图案(粗体红色四边形)。
E.多边形近似水平的自适应
提取的轮廓被输入到多边形近似器算法中,该近似算法尝试将多边形进行四边形拟合,根据近似多边形偏离真实轮廓的程度(偏差阈值),由于模糊,连接的棋盘格有时被错误地近似为单个四边形,从而再次干扰生成的图案。降低偏差阈值会导致识别数量大大减少的四边形,同时,还减少了误报检测,因此,我们决定在算法的第一部分将轮廓近似限制在保守水平(即选择一个低偏差阈值),实际上以找到的对象数量为代价保证提取正确的四边形。现在较小的参考棋盘随后被引入新的算法中,其中多边形近似阈值再次增加,然后,我们的想法是尝试将腐蚀最严重的运行期间发现的四边形首先匹配到参考模式(即,以相反顺序引入运行),因为分离棋盘格的可能性最高,然而,在参考格子中添加严重腐蚀的四边形会减少角点定位,因此,通过这种自适应,正确的棋盘提取优于角点提取的精度。
F.相对重要性腐蚀核的适应
特别是引入新的连接启发式被认为是最重要的增强算法,它们都处理由全向相机畸变引起的棋盘格模式的变化,同时保持原始实现对规则图像的检测率,其他的改进只会对非常低的分辨率和模糊的图像产生显著的影响。
实验
在本节中,分析了6个测试图像集,每个测试图像集包含10个图像,已经考虑了各种质量的典型摄像机反射镜配置,在原始OpenCV实现和我们提出的方法之间,比较了每幅图像中发现的角点数量和角点定位精度,首先讨论成功提取角点的先决条件。
A.先决条件使用OpenCV和我们的方法提取角点取决于任何合理大小的黑白棋盘(已显示5x6和6x7内角的大小效果良好),其周围的白色边框至少有一个棋盘格宽度(见图8)。
图8.7x6棋盘,白色边框恰好为一个棋盘格宽度。
如果计划在极端的背光或高架照明的情况下使用该算法,考虑使用更宽的白色边框的棋盘,此外,使用分辨率尽可能高的相机,尽量减少整体模糊,尤其是在小棋盘格周围,并确保棋盘格没有触及边界或被遮挡。
有关所选测试图像集的概述,请参阅表I。
第1-3集是用索尼XCDSX910相机(高分辨率)和双曲镜组合拍摄的;
第4组和第5组分别配有飞利浦ToUCam Fun相机(低分辨率、大景深、图1底部),并配有圣诞球和球面镜;
第6组使用飞利浦SPC 300摄像机(低分辨率,窄景深,图1顶部)和球面镜。对于第4组,我们使用了一个圣诞球,以表明我们的方法也适用于其他凹面镜。对于集合1、2、4和5(无模糊),相对于参考提取(手动预选,然后在选定区域中进行Harris角提取)测量角点不准确度。对于第3组和第6组(模糊),仅手动角点选择被定义为参考。描述了显示1号和6号测试集的平均找到角数的图像,以便传达在不同测试条件下两个实现之间的相对性能的感觉(图9和图10)。
图9.最能反映测试集1算法平均性能的标定图像。左:OpenCV。右图:我们的方法。
图10.最能反映测试集算法平均性能的标定 图像 左:OpenCV。右图:我们的方法。
以下两个示例旨在让读者了解棋盘模式提取过程中可能出现的问题。
1) 棋盘周围宽边框的重要性:在明亮光源下拍照时,自适应阈值被干扰,认为白色棋盘边框实际上是黑色的。我们强调足够宽的白色边界的重要性。
2) 低分辨率图像中的小棋盘格:图11属于第5号测试图像集。对匹配过程的仔细检查表明,在一次腐蚀运算后,右下角的棋盘格太小,无法识别为四边形;然而,在下一次腐蚀过程中,它们已经和相邻区域一起生长了。在这种情况下,只有在低分辨率图像中非常小的棋盘格才会出现,相关棋盘格的角点提取失败。
总结
本文分析了一种现有的在标定图像上识别棋盘格的方法,该方法是在Opencv实现的方法基础上经过调整和改进的方法的起点,对代码的增强大大增加了低分辨率和模糊图像的角点输出,始终返回80%或更多的角点,而现有方法的角点输出仅为20%。在更高分辨率的图像上,获得了近100%的角点识别。