Automatic Detection of Checkerboards on Blurred and Distorted Images
In Proc. IEEE/RSJ International Conference on Intelligent Robots and Systems, 2008

本文主要介绍了一种棋盘格检测方法,先分析 opencv中 现有算法的问题,然后在此基础上提出改进。

https://mp.weixin.qq.com/s?__biz=Mzg5MzE2NzgwOA==&mid=2247483686&idx=1&sn=9621c4947fa80825126f27698f3cbfb9&chksm=c033b089f744399fb6f05508f947996612c3489c50d8f535cf5740ac1523881f760b5e8b1c8c&mpshare=1&scene=1&srcid=&key=4cf54c0f296f3db421da55af9c0b46f90922aee0270480e21b053bdc35171e3f0685770622c819b1a52067aaaa9d145c6447311bd04f20bc1adaa3ec684d635bfc6831b3eefc2a461421b3eb2f1eea2e&ascene=1&uin=MjQ5NzIzMTczOQ%3D%3D&devicetype=Windows+7&version=62060739&lang=zh_CN&pass_ticket=j0aV2BwcGS0D6Xdx3tqUHUGjh5xYT599tC5iWtcuULaZYeXb20FE6LHHQKUZ3kAc

首先我们来看一下 opencv 中 由 Vladimir Vezhnevets 实现的棋盘格检测算法流程:

  1. 算法输入: 图像中包含一个给定尺寸的黑白棋盘格,如果输入的是彩色图像,那么将彩色图像转换为灰度图像,接着就是二值化步骤。

2)Adaptive Threshold: 自适应二值化, opencv 中有自适应二值化函数,这里的二值化算法是支持自适应二值化的。所谓的自适应二值化就是对给定尺寸的局部区域(given mask size)进行二值化。定义了两个 kernel:“mean” and “Gaussian”,mean 的速度快,Gaussian 的效果更好些。这里的 checkers 就是 棋盘格中的 小黑方块,二值化后这些 checkers 很容易连接在一起,因为 blur, noise and/or
too coarse sampling。为了能正确的识别,我们需要将这些 checkers 分离开来,所以使用了 腐蚀算子 erosion

3)Erosion 腐蚀,主要目的就是将二值化后的 各个黑方块分离开来,定义了一个 3x3 “rect” kernel。这个腐蚀操作可以说是整个算法的精髓所在。只有分离出单个 小黑方块 checker 来,我们才可以一个 binary contour finder 来提取出 这个 quadrangle,如果 没有 pattern(棋盘) 被找到,那么就可以认为 checkers 仍然连接在一起,我们需要继续腐蚀

4) Quadrangle Generation: 四边形的生成,每个 checker 被检测出来,我们使用一个 polygon 来拟合。这里我们每腐蚀一次,就提取一次 checker ,当然有停止条件的。随着腐蚀次数的增加,棋盘会慢慢消失,导致一些小的 checker 没有被检测出来。

  1. Quadrangle Linking: 四边形连接,如何将检测到的四边形连接起来了?我们采用以下策略:
    (1)对于每个四边形的每个角点 corner 计算其到 其他四边形角点的距离,保持最小的距离和对应的角点 corner 以及 四边形的 ID
    (2)检查这个最小距离 是否小于 两个四边形中的最小边长,这一步朱啊哟是确保不让两个距离很远的四边形连接到一起
    (3)如果这些条件满足,那么这两个四边形对应的两个角点就连接到一起去,the extracted corner position is set to the arithmetic
    mean of their former positions,这个提取的角点位置如何计算? 四边形对应的两个角点的算术平均

The extracted corners finally form a pattern described through their position and neighborhood relation with respect to the other corners
最终我们把棋盘格找到

  1. Further Steps: 对于所有腐蚀步骤,算法选择具有最大角点数目的那一次对应的棋盘。不同步骤之间没有联系。这里有个默认就是给定一个腐蚀步骤内,每个 checker 理论上是检测的。对于特殊情况如 最大 pattern 特征有很多角点时, the smallest convex hull 作为输出结果。

B. Limitations opencv 中因为侧重于速度,所有在自适应二值化时选择 mean 作为 mask,但是 Gaussian 的效果更好。另一个就是只有将所有的 checker 找到 才返回一个 pattern, 但是对于标定来说,经常使用部分角点就满足要求了。上述算法在某些情况下就停止工作:any combination of low resolution (VGA), blurred, and distorted images

III. IMPROVEMENTS TO THE CODE 代码的改进

A. Adaptation of Erosion Kernels
这里我们定义了 两个kernal “cross” and “rect” 用于交替腐蚀,得到 uniform “shrinking”,为什么需要改变 kernal 的形状了?(尺寸大小不能改变,已经是最小了)对于大尺寸的特征 我们使用 “rect” kernal 腐蚀,腐蚀会对所有的边界像素产生均匀影响。但是对于 corner 附近的像素产生的影响会有所不同,它依赖于checker 方向和 kernal 类型。
corners tend to get rounded, the exact amount depending on the orientation of the checker and the type of kernel used.

B. New Heuristic for Quadrangle Linking
广角相机造成的畸变导致 上面的 Quadrangle Linking 不能正常工作。新的连接策略如下:
(1)对每个找到的 四边形 quadrangle 的每个角点 计算其到 其他四边形的角点的距离,检查这个距离是否小于 两个对应四边形最短边的边
长。如果小于,那么将这两个角点看做一个 candidate neighbor pair
(2)对每个 candidate neighbor pair,在每个四边形上画两条中心线
(3)如果这一对角点 都位于四边形中心线的一侧,那么这对角点就是 匹配成功。

C. Adaptive Quadrangle Linking Distance 四边形连接距离阈值的自适应
这里的阈值自适应主要是考虑腐蚀的影响 incorporate the effect of erosion
d_limit = shortest_edge_length + 2*erosion

D. Linking of Quadrangles over Multiple Erosion Runs
连接 不同腐蚀步骤的四边形,就是将其他腐蚀步骤检测到的四边形 加入到目前腐蚀步骤的四边形检测结果中。互通有无

E. Adaptation of the Polygonal Approximation Level
提取到的轮廓用于多边形拟合,基于轮廓拟合出一个四边形。 在四边形拟合时 有一个控制阈值:deviation threshold。降低这个阈值可以拟合出更小的四边形,同时误检也会出现。 所以我们希望算法的初始拟合出来的四边形是稳定可靠的。在算法的第二步中我们通过改变这个阈值将不稳定的四边形拟合出来。然后我们将这些不稳定的四边形融入到 稳定的四边形 构建最终的棋盘 pattern。

F. Relative Importance
这里讨论了一下 上述的改进措施哪些作用较大,哪些措施适合 very low resolution and blurred images

11

棋盘格检测--Automatic Detection of Checkerboards on Blurred and Distorted Images相关推荐

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

    Automatic camera and range sensor calibration using a single shot Robotics and Automation (ICRA), IE ...

  2. P.Laguna / AUTOMATIC DETECTION OF WAVE BOUNDARIES IN MULTILEAD ECG SIGNALS VALIDATION WITH THE CSE

    AUTOMATIC DETECTION OF WAVE BOUNDARIES IN MULTILEAD ECG SIGNALS:  VALIDATION WITH THE CSE DATABASE b ...

  3. 【论文阅读】Automatic Detection of Various Malicious Traffic Using Side Channel Features on TCP Packets

    原文标题:Automatic Detection of Various Malicious Traffic Using Side Channel Features on TCP Packets 原文作 ...

  4. 6、相机标定中的特殊棋盘格检测方法(真是啥需求都会有)

    摘要 1. 需求 2. 算法的步骤 3. 实现的效果 4. 部分代码 5. 非常感谢您的阅读! 6 期待您加入 1. 需求 我目前在做自动驾驶车辆上的各类传感器的标定问题.很容易理解,各类传感器就相当 ...

  5. 行人检测(Pedestrian Detection)资源

    行人检测(Pedestrian Detection)资源 原文链接 http://hi.baidu.com/susongzhi/item/085983081b006311eafe38e7 一.论文 C ...

  6. [caffe]深度学习之CNN检测object detection方法摘要介绍

    [caffe]深度学习之CNN检测object detection方法摘要介绍  2015-08-17 17:44 3276人阅读 评论(1) 收藏 举报 一两年cnn在检测这块的发展突飞猛进,下面详 ...

  7. Python编程基础:第三十节 文件检测File Detection

    第三十节 文件检测File Detection 前言 实践 前言 我们通常会涉及到文件相关的操作,例如检测.读写.复制.删除等等.本节我们一起来学习文件检测相关知识,即检测指定路径下是否存在该文件. ...

  8. CV之OD:计算机视觉之目标检测(Object Detection)方向的简介、使用方法、案例应用之详细攻略

    CV之OD:计算机视觉之目标检测(Object Detection)方向的简介.使用方法.案例应用之详细攻略 目录 OD目标检测的简介 1.Selective Search for Object Re ...

  9. OpenCV方形检测Square Detection的实例(附完整代码)

    OpenCV方形检测Square Detection的实例 OpenCV方形检测Square Detection的实例 OpenCV方形检测Square Detection的实例 #include & ...

最新文章

  1. linux 更改ctime_linux常用命令
  2. mysql 报错ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executin
  3. C#.NET 大型企业信息化系统 - 防黑客攻击 - SSO系统加固优化经验分享
  4. C语言程序练习-L1-011 A-B (20分)
  5. 三条Windows 7小技巧
  6. 关于禁止程序重复启动的另一种需要与实现《转》
  7. 关于未捕获异常的处理(WPF)
  8. Tensorflow新手通过PlayGround可视化初识神经网络
  9. redux工作原理简单入门
  10. WinEdt中xelatex.exe等exe did not succeed问题
  11. java digester map_Tomcat7启动分析(三)Digester的使用(转载)
  12. 18个Windows应该有却没有具有的服从(2)
  13. jupyter notebook修改黑色背景和字体大小
  14. Android Studio kotlin编程实现图片滑动浏览 stepbystep
  15. 《当程序员的那些狗日日子》四
  16. qlv转mp4只有声音没有画面了 只要声音 没有视频
  17. Lucene学习——IKAnalyzer中文分词(二)
  18. pip安装OpenCV教程(简单步骤)基于python
  19. ANTS | 报错:Could not find ANTS program N4BiasFieldCorrection; please check installation
  20. 2021-1-9 吴恩达-C5 序列模型-w2 自然语言处理与词嵌(课后编程1-Operations on word vectors 词向量运算-含UnicodeDecodeError解决)

热门文章

  1. 在需求评审,测试需要关注的四类问题
  2. docker镜像的分层理解,大白话跟你讲
  3. OSChina 娱乐弹弹弹——凉风有信,秋月无边
  4. Android中的进程间通信(IPC机制)
  5. 骂人的到底是些什么人
  6. 机器学习的数学基础1:集合、关系、元组
  7. 计算机属性的Java代码_java - 学计算机的人绝不认输 - 博客园
  8. CMT2300A 是一款超低功耗,高性能,适用于各种 127 至 1020 MHz 无线应用
  9. NB-iot网络架构组成简介
  10. pytorch中的reshape()、view()、nn.flatten()和flatten()