热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

低分辨率和畸变严重的棋盘格角点的自动检测

文章:AutomaticDetectionofCheckerboardsonBlurredandDistortedImages作者:MartinRufl

文章: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)来构建宽视场相机。

51b8cb4ce9b63bcbfdd18839e970296f.png

  图1.左:放置在摄像机上的双镜头。右上角:飞利浦SPC 300。右下角:飞利浦ToUCam Fun。

主要贡献

本文的主要贡献是提出了一种新的启发式算法来检测模糊和高度失真图像中的棋盘格,特别是通过这种启发式方法,标准棋盘格检测算法的检测率从20%提高到80%,使用高质量的摄像机几乎达到100%。

主要内容

我们知道OpenCV是一个开源的计算机视觉库,最初由Intel开发,它具有许多视觉应用的算法,特别是配备了Vladimir Vezhnevets开发的棋盘角提取功能,该函数识别棋盘中的单个黑色棋盘,然后尝试将它们合并回原始图案,作为一种基于区域的方法,它的优点是比基于直线的方法对噪声和模糊图像更具鲁棒性,下面是对该算法重要部分的逐步分析,在本文后续介绍中,我们将根据我们的需要对其进行调整。

A . 算法的步骤

1)算法输入:算法的输入是包含给定大小的黑白棋盘的图像。如果提供彩色图像,则需要进行灰度转换,然后,该算法进行阈值步骤。

2) 自适应阈值:二值化阈值分割非常适合在大多数情况下区分黑白跳棋,该算法支持自适应阈值,根据给定的阈值大小对图像进行局部二值化,并通常为非均匀亮度图像提供更高级别的分割结果,有两种核方法可实现:“均值”和“高斯”核。在最初的方法中,使用了“均值”,这需要相当少的计算能力,因此非常适合从视频流中检测棋盘格,其运算时间也至关重要,由于模糊、噪声或过于粗糙的采样,阈值分割出来的黑白图像中的棋盘格往往连在一起。为了正确识别,需要将它们分开,一般采用腐蚀的方法

3) 腐蚀:使用腐蚀步骤(通过使用3x3“rect”核,见图5)是 Vezhnevets 实现该算法背后的主要创意,通过这种方式,可以在角落处分离棋盘,并获得一组黑色四边形,根据这些四边形的轮廓,然后通过轮廓检测算法很容易找到其轮廓边界,如果在接下来的步骤中没有发现其他棋盘格,则可以假定棋盘格仍然生长在一起。因此,腐蚀逐渐增加,并重复以上步骤。

59c22d34b635c716491dd0d030557cb6.png

c99a8ddb534c4c05b20f237d359948f9.png

6214f66a6ec7f7aa386311cd45af0dba.png

图2.左:在自适应阈值和一此腐蚀步骤后的结果。右:在自适应阈值和两此腐蚀步骤之后的结果。

4) 四边形生成:二进制轮廓检测算法尝试查找闭合轮廓,运行后尝试通过逐渐逼近检测到的多边形或四边形拟合到四边形上,这里请注意,在第一次腐蚀运行(图3左)后,只有两个棋盘格正确分开,因此只找到两个四边形。经过两次腐蚀步骤(图3右侧)后,发现了大部分四边形,但并非所有四边形。通过采用更多的侵蚀步骤,图案开始部分溶解,导致一些(小型)棋盘格无法检测到。

2ad0ca327fb477528875e91a4d895ffd.png

  图3.左:运行一次腐蚀后发现的所有四边形。右图:在第二次腐蚀后,找到了大部分的四边形。

5) 四边形连接:根据以下启发式算法连接四边形:

 •对于每个找到的四边形的每个角点,计算这个点到其他四边形的每个角点的距离,并存储此类最小距离以及相应的角点和四边形ID。

•检查此距离是否小于两个四边形的最小边长度,这是为了确保没有任何四边形连接到太远的四边形上。

• 如果这些测试通过,则将两个角点连接起来,并将提取的角点位置设置为其先前位置的平均值上。

提取的角点最终形成一个棋盘角点,主要通过它们相对于其他角点的位置和邻域关系来描述。

6) 进一步的优化:从所有腐蚀运算中选择找到最多个角点的棋盘,不同腐蚀运算之间不进行信息交换,因此,假设在一次运行中,每个角点在理论上都是可识别的,如果最大的棋盘中具有过多的角点(即由于光导致错误识别的棋盘格),则选择最小凸面的角点。

雷达的强度信息表示激光束返回的能量值,该能量值通常受物体表面反射率的影响,并且对环境光保持不变,当接收到3D点云P时,我们将其投影到圆柱形强度图像I上,I中的每个有效像素都可以与P中的一个点相关联,像素的值由接收点的强度值确定,然后,我们将所有像素值标准化为介于0和255之间,这基本上将强度图像视为灰度图像,使我们能够使用强度图像对其进行处理,没有关联有效点的像素被指定为零值,三维点云的示例如图2(a)所示,其中颜色变化表示强度变化,得到的强度图像如图2(b)所示,其中亮像素和暗像素分别对应于高强度值和低强度值。

B.局限性

OpenCV角点查找算法设计用于常规摄像机的实时标定,重点放在快速运算的效率上,因此在自适应阈值步骤中使用“平均值”而不是“高斯”掩码,此外,如果成功检测到完整的棋盘格,则该算法仅返回一个棋盘,而忽略了一个事实,即出于标定的目的,它通常是可以正确识别重要的角点的。对于低分辨率、模糊和畸变严重图像,该算法都无法正常工作,因此,它在全景相机标定中的用途有限,因此在此类工具箱中的实现也有限。

改进的方案

A.自适应的腐蚀核

与之前使用的核相比,对于大尺寸的特征,腐蚀似乎会均匀地影响所有边界像素,然而,仔细检查后,角点往往会变圆,具体数量取决于棋盘格的方向和使用的核的类型,低分辨率相机拍摄的全向图像通常满足的条件。尽管在最初的实现中使用了尽可能最小的对称腐蚀内核(3x3最大过滤器),但仍然可以实现一些改进:内核大小不能小于3x3,但其形状可以改变,对于对称3x3核,可以构造两种形状,即图5所示的“交叉”和“矩形”,两种形状之间的交替具有保持(小)棋盘格纵横比独立于其方向的效果,即允许均匀“收缩”。

B.一种新的四边形连接启发式算法

在最初的实现中,正确识别的黑色棋盘格被连接到它们的角上,我们发现它适用于高分辨率和大多数未失真的棋盘图像,然而,对于全向相机引入的失真,不一定要将最近的角点与给定的角点匹配,如图6所示。

79e3a3eea1cf3f9898624ec1bf76a0a6.png

  图6.角点连接的新启发式算法:如果两个候选角(红点)位于四条直线的同一侧(即半透明黄色区域内),则它们成功匹配。

能够实现正确的角点匹配至关重要,不能很好匹配的话将会干扰提取棋盘的结构,从而使所有后续步骤无效,所以我们提出的解决该问题的方案是一种增强型启发式算法,即使在严重变形的情况下,也能通过几何验证其有效性:

•对于每个发现的四边形的每个角点,计算到每个其他四边形的每个角点的距离,并检查该距离是否小于该四边形的最短边长,如果为真,则接受这两个角作为候选相邻对。

•对于每个候选对,关注它们所属的四边形,并绘制两条穿过各自四边形边缘中间部分的直线(见图6)

•如果候选角点和源角点位于以这种方式绘制的四条直线中的每一条的同一侧(这对应于图6中的黄色阴影区域),则角点成功匹配。

C.自适应四边形连接距离

如上所述,四边形仅在其角相距小于一定距离时才连接,在最初的实现中,选择了两个相关四边形的最短边长度作为该距离阈值。但是对于低分辨率图像,腐蚀对四边形的整体大小有很大影响,这可能导致最小边缘长度的急剧减少,因此,对距离测量进行了调整,以减小腐蚀的影响:

755fe0e6c102c240ab03f875c7ee171e.png

D.多次腐蚀时的四边形连接

由于全景相机的反射镜头,模糊会在径向上不均匀地扩散,取决于相机的焦距,朝向图像中心或边缘的点都会变得更加模糊。因此并非所有四边形都在同一腐蚀过程中就可以分离出来,其中一些甚至可能在较小的已经完全消失时才开始分离,因此,可能会遇到这样的问题:即使许多四边形在多次迭代中被成功识别,但并非所有四边形都出现在一次腐蚀中,因此,我们试图通过将部分结果合并为完整结果,在不同腐蚀过程中匹配已发现的四边形棋盘格,因此,该算法扩展如下:

选择发现大多数四边形的棋盘作为“参考棋盘”,在第二次腐蚀中,尝试将之前发现的所有腐蚀流程中所有四边形与上述定义的参考图案的边界匹配。成功匹配后,将更新参考图案以包括新的四边形,并重复整个过程,直到不再添加。图7以图像序列的形式显示了该部分内容。

fc43fc5f8cd8f55d6d92393c7750a47d.png

图7.“不同腐蚀过程中的匹配”过程的可视化。顶部:参考图案(浅绿色),很明显,底部的检查器尚未确定。中间:红色四边形表示在另一次腐蚀运行中发现的候选检查器。底部:将其中一些候选对象添加到参考图案(粗体红色四边形)。

E.多边形近似水平的自适应

提取的轮廓被输入到多边形近似器算法中,该近似算法尝试将多边形进行四边形拟合,根据近似多边形偏离真实轮廓的程度(偏差阈值),由于模糊,连接的棋盘格有时被错误地近似为单个四边形,从而再次干扰生成的图案。降低偏差阈值会导致识别数量大大减少的四边形,同时,还减少了误报检测,因此,我们决定在算法的第一部分将轮廓近似限制在保守水平(即选择一个低偏差阈值),实际上以找到的对象数量为代价保证提取正确的四边形。现在较小的参考棋盘随后被引入新的算法中,其中多边形近似阈值再次增加,然后,我们的想法是尝试将腐蚀最严重的运行期间发现的四边形首先匹配到参考模式(即,以相反顺序引入运行),因为分离棋盘格的可能性最高,然而,在参考格子中添加严重腐蚀的四边形会减少角点定位,因此,通过这种自适应,正确的棋盘提取优于角点提取的精度。

F.相对重要性腐蚀核的适应

特别是引入新的连接启发式被认为是最重要的增强算法,它们都处理由全向相机畸变引起的棋盘格模式的变化,同时保持原始实现对规则图像的检测率,其他的改进只会对非常低的分辨率和模糊的图像产生显著的影响。

实验

在本节中,分析了6个测试图像集,每个测试图像集包含10个图像,已经考虑了各种质量的典型摄像机反射镜配置,在原始OpenCV实现和我们提出的方法之间,比较了每幅图像中发现的角点数量和角点定位精度,首先讨论成功提取角点的先决条件。

A.先决条件使用OpenCV和我们的方法提取角点取决于任何合理大小的黑白棋盘(已显示5x6和6x7内角的大小效果良好),其周围的白色边框至少有一个棋盘格宽度(见图8)。

c23036792c04c42d8539a7531ac41bf2.png

图8.7x6棋盘,白色边框恰好为一个棋盘格宽度。

如果计划在极端的背光或高架照明的情况下使用该算法,考虑使用更宽的白色边框的棋盘,此外,使用分辨率尽可能高的相机,尽量减少整体模糊,尤其是在小棋盘格周围,并确保棋盘格没有触及边界或被遮挡。

有关所选测试图像集的概述,请参阅表I。

8791970aea59e9c803c01ba7d1ef39d4.png

第1-3集是用索尼XCDSX910相机(高分辨率)和双曲镜组合拍摄的;

第4组和第5组分别配有飞利浦ToUCam Fun相机(低分辨率、大景深、图1底部),并配有圣诞球和球面镜;

第6组使用飞利浦SPC 300摄像机(低分辨率,窄景深,图1顶部)和球面镜。对于第4组,我们使用了一个圣诞球,以表明我们的方法也适用于其他凹面镜。对于集合1、2、4和5(无模糊),相对于参考提取(手动预选,然后在选定区域中进行Harris角提取)测量角点不准确度。对于第3组和第6组(模糊),仅手动角点选择被定义为参考。描述了显示1号和6号测试集的平均找到角数的图像,以便传达在不同测试条件下两个实现之间的相对性能的感觉(图9和图10)。

542386fdea2f926d34cf5865db5b3d85.png

  图9.最能反映测试集1算法平均性能的标定图像。左:OpenCV。右图:我们的方法。

afbf43366862aff27c46753abc33a38d.png

图10.最能反映测试集算法平均性能的标定 图像 左:OpenCV。右图:我们的方法。

以下两个示例旨在让读者了解棋盘模式提取过程中可能出现的问题。

1) 棋盘周围宽边框的重要性:在明亮光源下拍照时,自适应阈值被干扰,认为白色棋盘边框实际上是黑色的。我们强调足够宽的白色边界的重要性。

2) 低分辨率图像中的小棋盘格:图11属于第5号测试图像集。对匹配过程的仔细检查表明,在一次腐蚀运算后,右下角的棋盘格太小,无法识别为四边形;然而,在下一次腐蚀过程中,它们已经和相邻区域一起生长了。在这种情况下,只有在低分辨率图像中非常小的棋盘格才会出现,相关棋盘格的角点提取失败。

3de7ddd0bb36c6816f0ef522283f771f.png

总结

本文分析了一种现有的在标定图像上识别棋盘格的方法,该方法是在Opencv实现的方法基础上经过调整和改进的方法的起点,对代码的增强大大增加了低分辨率和模糊图像的角点输出,始终返回80%或更多的角点,而现有方法的角点输出仅为20%。在更高分辨率的图像上,获得了近100%的角点识别。

资源

三维点云论文及相关应用分享

【点云论文速读】基于激光雷达的里程计及3D点云地图中的定位方法

3D目标检测:MV3D-Net

三维点云分割综述(上)

3D-MiniNet: 从点云中学习2D表示以实现快速有效的3D LIDAR语义分割(2020)

win下使用QT添加VTK插件实现点云可视化GUI

JSNet:3D点云的联合实例和语义分割

大场景三维点云的语义分割综述

PCL中outofcore模块---基于核外八叉树的大规模点云的显示

基于局部凹凸性进行目标分割

基于三维卷积神经网络的点云标记

点云的超体素(SuperVoxel)

基于超点图的大规模点云分割

更多文章可查看:点云学习历史文章大汇总

SLAM及AR相关分享

【开源方案共享】ORB-SLAM3开源啦!

【论文速读】AVP-SLAM:自动泊车系统中的语义SLAM

【点云论文速读】StructSLAM:结构化线特征SLAM

SLAM和AR综述

常用的3D深度相机

AR设备单目视觉惯导SLAM算法综述与评价

SLAM综述(4)激光与视觉融合SLAM

Kimera实时重建的语义SLAM系统

SLAM综述(3)-视觉与惯导,视觉与深度学习SLAM

易扩展的SLAM框架-OpenVSLAM

高翔:非结构化道路激光SLAM中的挑战

SLAM综述之Lidar SLAM

基于鱼眼相机的SLAM方法介绍

扫描下方微信视频号二维码可查看最新研究成果及相关开源方案的演示:

如果你对本文感兴趣,请后台发送“知识星球”获取二维码,务必按照“姓名+学校/公司+研究方向”备注加入免费知识星球,免费下载pdf文档,和更多热爱分享的小伙伴一起交流吧!

以上内容如有错误请留言评论,欢迎指正交流。如有侵权,请联系删除

扫描二维码

                   关注我们

让我们一起分享一起学习吧!期待有想法,乐于分享的小伙伴加入免费星球注入爱分享的新鲜活力。分享的主题包含但不限于三维视觉,点云,高精地图,自动驾驶,以及机器人等相关的领域。

分享及合作方式:微信“920177957”(需要按要求备注) 联系邮箱:dianyunpcl@163.com,欢迎企业来联系公众号展开合作。

点一下“在看”你会更好看耶

49fa078b51d8a2c2ade467276e12e8e6.gif



推荐阅读
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 探索AI智能机器人自动盈利系统的构建
    用户可通过支付198元押金及30元设备维护费租赁AI智能机器人,推荐他人加入可获得相应佣金。随着推荐人数的增加,用户将逐步解锁更高版本,享受更多收益。 ... [详细]
  • 如何在PHP中安装Xdebug扩展
    本文介绍了如何从PECL下载并编译安装Xdebug扩展,以及如何配置PHP和PHPStorm以启用调试功能。 ... [详细]
  • 本文详细介绍了如何利用 Bootstrap Table 实现数据展示与操作,包括数据加载、表格配置及前后端交互等关键步骤。 ... [详细]
  • Bootstrap Paginator 分页插件详解与应用
    本文深入探讨了Bootstrap Paginator这款流行的JavaScript分页插件,提供了详细的使用指南和示例代码,旨在帮助开发者更好地理解和利用该工具进行高效的数据展示。 ... [详细]
  • 目录预备知识导包构建数据集神经网络结构训练测试精度可视化计算模型精度损失可视化输出网络结构信息训练神经网络定义参数载入数据载入神经网络结构、损失及优化训练及测试损失、精度可视化qu ... [详细]
  • 本文介绍了实现人工智能的多种方法,并重点探讨了当前最热门的技术——通过深度学习训练神经网络。文章通过具体实例详细解释了神经网络的基本原理及其应用。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • 斯坦福大学公开课:利用神经网络技术实现自动驾驶的案例分析
    斯坦福大学的公开课深入探讨了如何利用神经网络技术实现自动驾驶。课程中通过实例展示了汽车如何通过学习算法自主驾驶。具体而言,课程展示了一幅图解,其中左下角显示了汽车前方的实时路况图像,而左上角则呈现了一个水平的菜单栏,用于展示系统处理和决策的过程。这一案例详细解析了神经网络在自动驾驶中的应用,为学生提供了宝贵的实践参考。 ... [详细]
  • 每日学术推荐:异质图神经网络在抽取式文档摘要中的应用研究
    在抽取式文档摘要任务中,学习跨句子关系是至关重要的一步。本文探讨了利用异质图神经网络来捕捉句子间复杂关系的有效方法。通过构建包含不同类型节点和边的图结构,模型能够更准确地识别和提取关键信息,从而生成高质量的摘要。实验结果表明,该方法在多个基准数据集上显著优于传统方法。 ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 中国学者实现 CNN 全程可视化,详尽展示每次卷积、ReLU 和池化过程 ... [详细]
author-avatar
kenyousay
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有