查看原文
其他

开源、快速、高精度的椭圆检测—你值得拥有!

52CV君 我爱计算机视觉 2019-06-22

点击我爱计算机视觉标星,更快获取CVML新技术



在很多计算机视觉任务中需要用到形状分析,尤其是直线检测和圆检测用的最多。比如工业检测中检测元器件(OpenCV中有经典的电阻电容识别的例子),生物图像检测圆形细胞核位置,机器人识别圆形导航标志,交通标志检测识别特定形状的标志等。

这个方向在学术界虽然看起来不像通用目标检测那么火,但其在传统图像分析、机器视觉中的应用却非常广泛。因为现实生活和工业生产中,人们感兴趣的目标往往是形状规则的。

提到直线和圆的检测,也许你立刻会想到霍夫变换,但如果要检测的形状是椭圆呢?可能大多数人就没接触过了。但椭圆检测还是很有必要的,一方面现实中存在很多椭圆形物体,另一方面圆形物体如果拍摄角度不正往往图像中就呈现椭圆形,所以椭圆的检测也非常有意义。

椭圆检测较圆检测复杂度更大,表征一个圆形仅需要3个参数,表征一个椭圆则需要5个参数,搜索空间骤增,更易于受到噪声干扰,使得使用类似霍夫变换的方法计算量增加,检测结果也不尽如人意。

现在好了,一篇前几天刚刚投稿模式识别顶级期刊PAMI的文章《High-quality Ellipse Detection Based on Arc-support Line Segments》提出了一种新的算法,并且开源了代码,给出了一个相当漂亮的解决方案。

作者信息:

第一作者Changsheng Lu(卢长胜)目前是东南大学的硕士生。

下图是作者给出的与先前算法检测结果比较示例:

拍摄的是电话座机的圆形按键(因拍摄角度倾斜较大故呈椭圆形),(a)为原图,(b)为Ground Truth,(c)-(g)为其他算法检测结果,(h)为该文提出的算法检测结果,结果还是很不错的,速度也是相当快。

又好又快的算法没理由不火的!


算法原理

作者提出了一种称之为Arc-support Line Segments(也许可以翻译为“弧支撑线段”)的概念,他是椭圆中一小段圆弧两个端点形成的“直线段”,不同于普通直线段,它来自于弧支撑区域,分布像曲线一样变化。它实际上应该是弧的一小段,只是在这里局部近似为直线段。

作者使用LSD算法检测这些Arc-support Line Segments,然后基于此由粗到细构建椭圆检测的筛选机制。

主要流程包括:

1)将检测到的Arc-support Line Segments连接并分组;

2)初始椭圆候选集合生成;

3)椭圆聚类,将可能来自同一个椭圆的候选者合并;

4)候选椭圆验证,剔除质量不高的椭圆。

下图较好地表达了上述过程(点击放大查看更佳):

(a)为原始图像,(b)为提取出的42个Arc-support Line Segments(请注意它们是直线),(c)通过连接得到的20个arc-support组,(d)13个初始生成的椭圆,(e)通过聚类后得到的10个候选椭圆,(f)经过椭圆质量验证最后得到的2个椭圆。


实验结果

作者在三个真实世界数据集上进行了实验,如下图所示:

在所有的precision 、recall、F-measure三种度量指标(9个比较结果)上,该文提出的算法有8个结果是最好的,速度也接近最快的算法的速度。

下面是一些检测结果不同算法对比示例:

作者同时比较了椭圆的定位精度,在三个数据库中有两个定位精度达到最好,在PCB  dataset的精度是第二好。

精确定位结果示例:

重点来啦!


论文地址:

https://arxiv.org/abs/1810.03243

代码地址:

https://github.com/AlanLuSun/High-quality-ellipse-detection

(Matlab实现的)


论文代码下载:

在“我爱计算机视觉”公众号对话界面回复“椭圆检测”,即可收到该文及代码的百度云下载地址。


你觉得本文对你有帮助吗?欢迎留言~


长按关注我爱计算机视觉

【点赞与转发】就是一种鼓励

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存