查看原文
其他

简析缝隙检测算法新思路

Imagepy 极市平台 2019-03-28

-极市平台是专业的视觉算法开发和分发平台,加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动!

同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流点击文末“阅读原文”立刻申请入群~


本文就经典的缝隙图例简单分析缝隙检测算法的一个新思路,值得思考。


图例


图例特点:比较直,但长度粗细不定,有些地方非常微弱,断断续续。

 

问题分析:

这个问题类似于边缘提取,我们想到经典的canny算子,然而canny算子不保证边缘连续,而且无法给出直线划分,但却给我们一个分析问题的方向。以下思路是在canny算子的基础上进行的:

 

1. 计算各处的梯度向量


2. 梯度方向上进行非最大值抑制


3. 边缘追溯

我们对图像进行边缘追溯,canny算子除了给我们提供了边缘之外,其实还有丰富的局部梯度信息,而我们提取的缝隙都是直线,因而梯度信息是非常宝贵的。


For每个图像中的点:

        If 当前点 == 0:continue

        While 两端还活着:

                试图沿着梯度的垂直方向生长,找下一个点(如果没找到,生命值-1)

                找到后判别目标点的梯度向量是否与当前集合平均一致

                一致则合并,生命恢复,计算新的平均梯度,不一致则生命值-1

                生命减到1,停止生长

 

优势:考虑了梯度方向问题,可以很好的排除非自己所属的边缘

加入生命值的概念,可以在断的时候,继续沿着梯度垂直方向生长,得以延续。

 

4. 直线性判别

所有直线都生长结束后,对每个轮廓进行特征值分解,用较小的特征值进行线性度判定。

 

5. 线段配对

1)两个线段长度相似

2)两个线段质心接近

3)两个线段梯度向量相对立

 


总结:算法基于canny算子,在极大值抑制后,没有进行双阈值,而是保留梯度向量进行线段追溯,追溯过程中加入生命值概念,让直线延续性得以保证,而有梯度和生长方向概念,也不会混入其他点,得到纯净点后进行直线度检验,最后对所有提取出来的直线进行配对,得到结果。


附Imagepy github链接

https://github .com/yxdragon/imagepy.git


*推荐文章*


每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流点击左下角“阅读原文”立刻申请入群~

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

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