LSD的核心是像素合并于误差控制。利用合并像素来检测直线段并不是什么新鲜的方法,但是合并像素的方法通常运算量较大。LSD号称是能在线性时间(linear-time)内得到亚像素级准确度的直线段检测算法。LSD虽然号称不需人工设置任何参数,但是实际使用时,可以设置采样率和判断俩像素是否合并的方向差。我们知道,检测图像中的直线其实就是寻找图像中梯度变化较大的像素。因此,梯度和图像的level-line是LSD提及的两个基本概念。LSD首先计算每一个像素与level-line的夹角以构成一个level-line场。然后,合并这个场里方向近似相同的像素,这样可以得到一系列regions,这些 regions被称为 line support regions。如下图所示。

LSD(Line Segment Detector) 直线段检测算法

    每一个line support region其实就是一组像素,它也是直线段(line segment)的候选。同时,对于这个line support region,我们可以观察它的最小外接矩形。直观上来讲,当一组像素构成的区域,特别细长时,那么这组像素更加可能是直线段。基于此,作者还统计了line support region的最小外接矩形的主方向。line support region中的一个像素的level-line 角度与最小外接矩形的主方向的角度差在容忍度(tolerance)2τ内的话,那么这个点被称作"aligned point"。作者统计最小外接矩形内的所有像素数和其内的alinedg points数,用来判定这个line support region是否是一个直线段。判定的准则使用的是“a contrario approach”和“Helmholtz principle”方法。在这里,aligned  points的数量是我们感兴趣的信息。因此作者考虑如下假设:aligned points越多,那么region越可能是直线段。对于一副图像i和一个矩形r,记k(i,r)为aligned points的数量,n(r)为矩形r内的总像素数。那么,我们希望能够看到:

LSD(Line Segment Detector) 直线段检测算法

      其中,Ntest是所有要考虑的矩形的数量。PH0是针对 contrario model H0的一个概率。I是在H0模型下的随机图像。在这篇文章中,作者用H0的模型,主要有以下两个属性:

       (1){LLA(j)},其中j是像素,是一由一组随机变量组成;(2)LLA(j)在[0,2π]上均匀分布。

       因此,判断一个像素是不是aligned point可以记作概率:

          p = τ/π

       这样,再通过误差控制,最终的直线段检测算法如下:

LSD(Line Segment Detector) 直线段检测算法

     在上述算法中,还有两个要点我们没有解释。一是line support region具体是怎么得到了,二是怎样进行误差控制的。

    前面我们说过,line support region是通过合并方向近似相同的像素得到。其实在这里,这个合并的过程更多的是依赖于区域生长算法。对于一个level-line 场LLA,种子像素P,和容忍度 τ。我们 可以通过简单的区域生长算法来得到line support region,具体的算法过程参考论文里给出的步骤吧。

LSD(Line Segment Detector) 直线段检测算法

     至于NFA(the number of false alarms)计算,作者使用如下公式计算:

LSD(Line Segment Detector) 直线段检测算法

   其中,N和M是采样过后图像的列和行,B(n,k,p)是一个二项分布。n依旧是矩形内所有像素数,k是矩形内的所有p-aligned point数。此处的p-aligned point是指和矩形的主方向在容忍度pπ下方向相同的像素。如果LSD(Line Segment Detector) 直线段检测算法,那么可以认为结果有效。

         在实际使用作者的源码时,可以调整lsd函数中的scale来调整图像采样率。此外,合并角度代码里默认是22.5度。图像越小,角度越小,得到的结果越少。不过当图像采样不同时,在同一位置可能得到差异特别大的直线段,这个暂时不知道是什么造成的。

       一个比较迷人的结果:

 LSD(Line Segment Detector) 直线段检测算法




LSD:一种直线检测算法简介

原文地址:http://blog.csdn.net/carson2005/article/details/9326847


申明:本文是笔者在阅读了相应的英文文献后,翻译整理所得,原文为:Rafael Grompone von Gioi, LSD: a Line Segment Detector


    LSD是一种直线检测分割算法,它能在线性的时间内得出亚像素级精度的检测结果。该算法被设计成可以在任何数字图像上都无需参数调节。它可以自己控制误检的数量:平均而言,每张图有一个误检。

相关知识介绍

LSD的目标在于检测图像中局部的直的轮廓。这也是我们称之为直线分割的原因。轮廓是图像中的某些特殊区域,在这些区域,图像的灰度从黑到白或者从白到黑的剧烈变化。因此,梯度和level-line是两个重要的感念,如下图所示:


LSD(Line Segment Detector) 直线段检测算法

LSD(Line Segment Detector) 直线段检测算法

LSD(Line Segment Detector) 直线段检测算法

LSD(Line Segment Detector) 直线段检测算法

LSD(Line Segment Detector) 直线段检测算法

LSD(Line Segment Detector) 直线段检测算法

LSD(Line Segment Detector) 直线段检测算法

LSD(Line Segment Detector) 直线段检测算法

LSD(Line Segment Detector) 直线段检测算法

LSD(Line Segment Detector) 直线段检测算法

LSD(Line Segment Detector) 直线段检测算法

相关文章:

  • 2021-05-08
  • 2022-12-23
  • 2021-05-30
  • 2021-07-24
  • 2021-07-27
  • 2021-12-02
  • 2021-04-01
  • 2022-01-02
猜你喜欢
  • 2021-08-29
  • 2022-12-23
  • 2021-04-01
  • 2021-11-10
  • 2021-10-06
  • 2021-07-26
  • 2021-11-19
相关资源
相似解决方案