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 实现的棋盘格检测算法流程:
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 没有被检测出来。
The extracted corners finally form a pattern described through their position and neighborhood relation with respect to the other corners
最终我们把棋盘格找到
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