0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

直线检测算法汇总

新机器视觉 来源:新机器视觉 作者:新机器视觉 2022-11-25 17:25 次阅读

1、场景需求

计算机视觉领域,我们经常需要做一些特殊的任务,而这些任务中经常会用到直线检测算法,比如车道线检测、长度测量等。尽管直线检测的任务看起来比较简单,但是在具体的应用过程中,你会发现这里面还是有很大的优化空间,本文对常用的一些比较经典的直线检测算法进行汇总

2、Hough_line直线检测算法

Hough变换是一个比较有名的计算机视觉处理算法,该算法可以用来做很多的任务,常用的任务包括直线检测、圆检测、椭圆检测等,下面我们将对该算法进行简单的分析并进行代码实战。

2.1 Hough_line实现步骤

步骤1-首先,它创建一个二维数组或累加器(用于保存两个参数的值),并将其初始设置为零;

步骤2-用r来表示行,用θ来表示列;

步骤3-数组的大小取决于你所需要的精度。假设您希望角度的精度为1度,则需要180列(直线的最大度数为180);

步骤4-对于r,可能的最大距离是图像的对角线长度。因此,取一个像素精度,行数可以是图像的对角线长度。

2.2 Hough_line代码实战

829e28d6-6b17-11ed-8abf-dac502259ad0.png

82d93ad4-6b17-11ed-8abf-dac502259ad0.png

2.3 效果展示与分析

830954b2-6b17-11ed-8abf-dac502259ad0.png

上图展示了一些Hough_line算法的直线检测效果。为了验证该算法的有效性,我选择了3个不同的具有挑战性的场景,建筑物、答题卡和门。通过观察上面的结果我们可以知道该算法基本上能够检测出图中的直线,但是检测的结果并不是很好,有很多重复和漏检的情况。除此之外,该算法最大的缺点就是需要根据图片去调节参数,关键的参数是lines = cv2.HoughLines(edges,1,np.pi/180, 200) 中的200,该值设置的越大图片中检测出来的直线数量会越少,你需要根据你自己的测试场景进行调节。

2.4 HoughP_line代码实战

HoughP_line是Hough_line算法的改进版,具有更快的速度和更好的效果。

83406100-6b17-11ed-8abf-dac502259ad0.png

2.5 效果展示与分析

83ecd4c6-6b17-11ed-8abf-dac502259ad0.png

上图展示了一些HoughP_line算法的直线检测效果。上图都是使用lines = cv2.HoughLinesP(edges,1,np.pi/180, 80, 30, 10) 这个固定的参数来计算出结果的,通过观察我们可以发现,HoughLinesP不仅使用起来比较方便,基本上不需要进行调节参数;除此之外,该算法能够获得更好的直线检测效果。因此,当你想用Hough直线检测算法,建议你优先使用HoughP_line算法。

3、LSD直线检测算法

LSD是opencv中集成的一个直线检测算法,该算法的直线检测效果优于Hough算法,而且具有较好的检测速度,推荐使用。

3.1 LSD算法简介

LSD快速直线检测算法是由Rafael Grompone、Jeremie Jackbowicz、Jean-Michel Morel于2010年发表在PAMI上的文献《LSD:a Line Segment Dectctor》中提出的,该算法时间复杂度较霍夫变换低。LSD算法通过对图像局部分析,得出直线的像素点集,再通过假设参数进行验证求解,将像素点集合与误差控制集合合并,进而自适应控制误检的数量 。一般来说,要检测图像中的直线,最基本的思想是检测图像中梯度变化较大的像素点集,LSD算法也正是利用梯度信息和行列线(level-line)来进行直线检测的。

3.2 LSD代码实战

84072df8-6b17-11ed-8abf-dac502259ad0.png

3.3 效果展示与分析

845bb0ee-6b17-11ed-8abf-dac502259ad0.png

上图展示了一些LSD算法的直线检测效果。通过观察上面的结果,我们可以发现该算法的检测结果远远优于Hough和HoughP算法;除此之外,上述的检测结果都是使用LSD算法的默认参数进行执行,如果针对特定的参数进行调节,可以取得更好的结果,这种情况一般是在你的特定需求场景中对默认的一些参数进行微调操作,往往能获得意想不到的结果。

846fa2a2-6b17-11ed-8abf-dac502259ad0.png

上图展示了LSD直线检测算法的一些超参数,具体的细节请看该链接。需要说明的是该算法具有3中不同的模式,具体的模式如下图所示,默认情况下使用模式2(即1),但是经过测试我发现模式1(即0)通常输出的效果会更好一些,具体的情况需要你根据你的场景进行分析。

4、FLD直线检测算法

4.1 FLD算法简介

FLD直线检测算法是在该论文中被引入的,该论文中尝试着使用直线特征来代替原始的SURF点特征进行建筑物识别。与点特征进行相比,线特征具有更容易发现和更好的鲁棒性,线特征基本上不会受到光照、遮挡、视角变化的影响。下面展示了该算法的直线检测效果,从图中我们可以看出,线特征比点特征更好一些。

4.2 FLD算法代码实战

84c298fe-6b17-11ed-8abf-dac502259ad0.png

85007d68-6b17-11ed-8abf-dac502259ad0.png

上图展示了FLD直线检测算法的检测效果。通过观察我们可以发现该算法具有很好的检测效果,基本上可以检测出图中所有的直线,和LSD的性能类似,具体使用哪种算法需要你根据自己的应用场景去进行选择。

5、EDlines直线检测算法

5.1 EDlines算法简介

EDlines直线检测算法是在该论文中提出的。本文提出了一个快速、无参数的线段检测器,命名为EDLines (Akinlar and Topal, 2011),它产生强大的和准确的结果,比最快的已知线段检测器速度更快,达到11倍;换句话说,the LSD by Grompone von Gioi et al. (2008a,b, 2010). 我们的探测器还包括一个线的验证步骤定于亥姆霍兹原理Helmholtz principle (Desolneux et al., 2008),这让它控制错误检测的数量。EDLines得到的结果,我们看到的是,LSD非常相似,有所有主要的线段检测,并有极少数误报。此外, EDLines运行实时以炫目的速度为9.45毫秒,约10倍的速度比LSD对给定的图像。

5.2 EDlines算法实现步骤

步骤1-首先,给定一个灰度图像,运行新的边缘检测、边缘绘制(ED)算法,产生一套干净的,像素相邻的链,我们称之为边缘。边缘线段直观地反应对象的边界。

步骤2-然后,利用直线度准则,即最小二乘直线拟合法,从生成的像素链中提取线段。

步骤3-最后,线的验证步骤定于亥姆霍兹原理Helmholtz principle (Desolneux et al., 2008; Grompone von Gioi et al.,2008a)是用来消除虚假线段的检测。

855dad6c-6b17-11ed-8abf-dac502259ad0.png

上图展示了EDlines直线检测算法的检测效果。通过上面的观察,我们可以发现:1)该算法能获得和LSD类似的检测结果;2)该算法抑制了一部分小的误检的直线;3)该算法具有更快的运行速度,是LSD的10倍左右。

6、LSWMS直线检测算法

6.1 LSWMS算法简介

LSWMS是一个直线检测算法。本文介绍了一种精确且实时的直线检测方法。以前的直线检测方法都没有使用到图像场景的先验知识,因而不需要对输入的参数进行微调。该算法在检测精度和检测速度之间进行了折中,文中使用了一个高效的采样方法来进行加速处理,然后,文中使用一种快速的直线增长算法基于bresenham算法用改进的mean-shift算法提供精确的线段,同时保持稳健对抗噪音。测试了该策略的性能对于各种各样的图像,将其结果与流行的最新线段检测方法。结果表明,我们的建议优于这些工作同时考虑了结果和处理速度。

上图展示的是LSWMS论文中的结果。由于作者提供的代码需要在Ubuntu下编译,我没有去做这个工作,如果你感兴趣你可以去运行在本文的3张测试图片上面的效果。

7、CannyLines直线检测算法

7.1 CannyLines算法简介

CannyLines算法在该论文中被提出。本文提出了一种鲁棒的线段检测算法,有效地检测出输入图像中的线段。首先,提出了一种无参数canny算子cannypf,通过自适应地设置传统canny算子的低阈值和高阈值,从输入图像中稳健地提取边缘映射。其次,提出了直接从边缘地图中提取共线点簇的有效像素连接和分割技术,并基于最小二乘法对初始线段进行拟合。第三,通过有效的扩展和合并,生成更长、更完整的线段。最后,根据helmholtz原理对检测到的所有线段进行了验证,该原理同时考虑了梯度方向和幅度信息。在一组有代表性的图像上的实验结果表明,与常用的两种线段检测器lsd和edline相比,我们提出的cannyline线段检测器能够提取出更有意义的线段,特别是在人造场景中。

85efc422-6b17-11ed-8abf-dac502259ad0.png

上图展示了CannyLines直线检测算法的检测效果。通过观察上图我们可以发现该算法能够获得更加准确的检测结果,具有更少的误检。该算法主要是提高了边缘检测的效果,具体的效果如下所示:

8、MCMLSD直线检测算法

8.1 MCMLSD算法简介

MCMLSD算法出自于该论文。论文中提出了一个融合两者优点的概率算法。在第一阶段,使用全局概率hough方法。在第二阶段,在图像域中分析每个检测到的行,以定位在霍夫图中生成峰值的线段。通过将搜索限制在一条直线上,线段的分布线上的点序列可以被建模为马尔可夫链和概率最优标签使用标准动态规划算法精确计算,在线性时间内。马尔可夫假设同时也产生了一种直观的排名方法,它使用估计期望值的边际后验概率线段上正确标记的点的数目。评估由此产生的马尔可夫链边缘线段检测器(mcmlsd)我们开发并应用了一种新的定量方法控制分段不足和分段过量的评估方法。在YorkUrbanDB数据集的评价结果表明,所提出的MCMLSD方法优于以相当大的优势达到最先进水平。

8654384e-6b17-11ed-8abf-dac502259ad0.png

上图展示了MCMLSD算法的检测效果。通过上面的观察,我们可以发现该算法取得了很好的检测效果,但是美中不足的是该算法的运行速度比较慢,可能也和matlab代码有关吧。

9、LSM直线检测算法

9.1 LSM算法简介

LSM算法不仅仅是一个直线检测算法,同时也是一个直线合并算法。论文中提出了一种合并这些断开的线段的算法,以恢复原始的感知准确的线段。该算法根据角度和空间接近度对线段进行分组。然后将每组中满足新的自适应合并准则的线段对依次合并成一条线段。重复此过程,直到不再合并行段。我们还提出了一种定量比较线段检测算法的方法。在york-urban数据集上的结果表明,与最新的线段检测算法相比,我们的合并线段更接近人类标记的地面真线段。

上图展示了直线检测算法LSM的检测效果。左边一列表示的是LSD的检测结果,右边一列表示的是LSM算法的优化效果,图中不同的颜色表示不同的直线。通过上面的观察,我们可以发现LSM可以将一些间断的直线合并成一条更长的直线,这在现实场景中具有很大的用处,但是我们也会发现LSM算法会错误的将一些直线进行合并,会造成一些误差。

10、总结

本文对比较经典的直线检测算法进行了总结和分析。对于直线检测这个任务而言,它在现实场景中具有很多的应用,对于一个具体的场景,你可以根据自己的需要从本文中选择出一个合适的直线检测算法进行应用,如果你的场景比较简单,HoughP_line算法可能就可以满足你的要求;如果你同时对速度和精度有要求,可以选择使用EDlines等;如果你需要获得尽可能长的直线,那么建议你使用LSM直线检测算法。总而言之,最适合你的场景的算法才是最好的算法。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4587

    浏览量

    92487
  • HOUGH
    +关注

    关注

    0

    文章

    8

    浏览量

    9355
  • 直线检测
    +关注

    关注

    0

    文章

    4

    浏览量

    1689

原文标题:直线检测算法汇总

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    有没有专门测量圆钢直线度偏差的工具?

    圆钢直线度是指圆钢轴线在长度方向上的弯曲程度。它是衡量圆钢质量的一个重要几何形状指标。直观地说,如果把圆钢放在一个平面上,看它是否是笔直的,偏离笔直状态的程度就是直线度。而直线度测量仪就是检测
    发表于 11-06 14:10

    bq2750x系列中的Impedance Track™电池电量监测算法的理论及实现

    电子发烧友网站提供《bq2750x系列中的Impedance Track™电池电量监测算法的理论及实现.pdf》资料免费下载
    发表于 08-30 10:21 0次下载
    bq2750x系列中的Impedance Track™电池电量监<b class='flag-5'>测算法</b>的理论及实现

    案例 | 生产制造中的直线度测量

    关键词:直线度测量仪,直线度 生产中不仅需要评价产品的外观尺寸,还需要对直线度(弯曲度)等尺寸加以测量。作为一种评价产品直度的重要指标——直线度,能够对其进行
    发表于 08-20 17:32

    旗晟机器人环境检测算法有哪些?

    硬件支撑,更离不开强大的算法库作为软件核心,二者相辅相成,缺一不可。今天就来了解旗晟机器人环境检测算法。 1、设施异常监测 通过集成高精度传感器与智能图像识别技术。它不仅能检测A字梯是否存在变形,还能精确评估梯脚
    的头像 发表于 07-19 17:54 490次阅读
    旗晟机器人环境<b class='flag-5'>检测算法</b>有哪些?

    慧视小目标识别算法 解决目标检测中的老大难问题

    随着深度学习和人工智能技术的兴起与技术成熟,一大批如FasterR-CNN、RetinaNet、YOLO等可以在工业界使用的目标检测算法已逐步成熟并进入实际应用,大多数场景下的目标检测问题都能
    的头像 发表于 07-17 08:29 355次阅读
    慧视小目标识别<b class='flag-5'>算法</b>   解决目标<b class='flag-5'>检测</b>中的老大难问题

    图像识别算法都有哪些方法

    传统方法和基于深度学习的方法。 传统图像识别算法 1.1 边缘检测 边缘检测是图像识别的基础,它用于检测图像中的边缘信息。边缘是图像中亮度变化最明显的区域,通常表示物体的边界。常用的边
    的头像 发表于 07-16 11:14 4902次阅读

    opencv图像识别有什么算法

    图像识别算法: 边缘检测 :边缘检测是图像识别中的基本步骤之一,用于识别图像中的边缘。常见的边缘检测算法有Canny边缘检测器、Sobel边
    的头像 发表于 07-16 10:40 736次阅读

    口罩佩戴检测算法

    口罩佩戴检测算法基于YOLOv5在图像识别检测领域的优异性能,本文研究基于基于YOLOv5的口罩佩自动戴检测方法。首先从网络和真实生活中中寻找并采集不同场景人群口罩佩戴的图片约500张并自建数据集
    的头像 发表于 07-01 20:20 271次阅读
    口罩佩戴<b class='flag-5'>检测算法</b>

    人员跌倒识别检测算法

    人员跌倒识别检测算法是基于视频的检测方法,通过对目标人体监测,当目标人体出现突然倒地行为时,自动监测并触发报警。人员跌倒识别检测算法基于计算机识别技术,配合现场摄像头,自动识别如地铁手扶梯/楼梯
    的头像 发表于 06-30 11:47 397次阅读
    人员跌倒识别<b class='flag-5'>检测算法</b>

    安全帽佩戴检测算法

    安全帽佩戴监控是铁路工程施工人员安全管理中的重点和难点,它对检测算法的准确 率与检测速度都有较高的要求。本文提出一种基于神经网络架构搜索的安全帽佩戴检测算法 NAS-YOLO。该神经网络架构由上
    的头像 发表于 06-26 22:22 345次阅读
    安全帽佩戴<b class='flag-5'>检测算法</b>

    基于FPGA的实时边缘检测系统设计,Sobel图像边缘检测,FPGA图像处理

    ,所以先扩大系数近似为整数再运算。此处扩大256 倍后取整,将运算结果右移 8 位,提取 Y 分量即可得到灰度图像,即 3 边缘检测算法设计 如图4所示为待处理的3×3 像素点,使用 Sobel
    发表于 05-24 07:45

    柔性印刷线路板缺陷检测方法指南

    现有的FPC缺陷检测算法多衍生于PCB检测算法,但受本身独特性限制,FPC板缺陷要求更高,检测样板尺寸更大,样板成像易变形,使得针对PCB板的缺陷检测算法不能直接套用FPC板的
    发表于 11-30 15:29 466次阅读

    精密机床导轨直线度的常用检查方法

    导轨直线度是精密机床精度的基础精度,导轨直线度对精密机床精度都有着直接的影响,其检测仪器和检测方法较多也较为复杂,并应根据不同情况采取不同的检测
    的头像 发表于 11-27 17:46 796次阅读
    精密机床导轨<b class='flag-5'>直线</b>度的常用检查方法

    一种可靠的峰值和起始点检测算法

    电子发烧友网站提供《一种可靠的峰值和起始点检测算法.pdf》资料免费下载
    发表于 11-22 10:27 0次下载
    一种可靠的峰值和起始点<b class='flag-5'>检测算法</b>

    FPGA图像处理之Canny边缘检测

    在边缘检测算法里面Sobel是比较简单的一个算法,但是其检测出来的边缘往往是比较粗的,效果不是很好,因为我们最理想的边缘肯定就是一个宽度为1的细线。
    的头像 发表于 11-17 09:10 1433次阅读
    FPGA图像处理之Canny边缘<b class='flag-5'>检测</b>