一、边的提取

在这篇论文中,作者提出了一种新的边缘检测算法,主要优势在于提取出来的线能够保持清晰、连续,在边的提取部分,主要是进行了四步操作:
①滤波
使用高斯滤波器进行处理,过滤噪声并且使图像能够更加平滑。
②梯度的计算
遍历图中的每个像素,计算像素的梯度值,这一部分其实计算的是一个简易的梯度,和真正的梯度计算还是有区别的,这一点会在后面讲到。
③锚的筛选
遍历图中的每个像素,筛选出一部分与相邻元素梯度相差很大的像素,这部分像素称为锚(anchor),这部分像素有很高的可能性是边上的一部分。
④连接锚形成边
这部分主要是从一个锚出发,根据像素的梯度和线的延伸方向,从点开始不断延伸成边。

这张图表示的就是一个边的提取的过程,首先将灰度图作为输入,计算梯度之后也就是完成第二步后,图就变成了图b的形式,之后根据像素的梯度值,提取出锚,也就是图c的样子,在此基础上连接锚,最后形成了图d中的样子,也就是边缘提取的结果。

二、线段的提取

在上一部分中,我们仅仅是完成了边缘的提取,但是这个边缘有可能是连接在一起的,还是上图的例子,边缘提取的结果可能是整个矩形,但是我们要的是四条直线的边,所以就需要对边缘进行分割,得到线段。也就是说,这一步的目标,就是将像素链拆分成一条或者多条的直线段。

主要的方法依然是用遍历,这次是遍历整个边,利用最小二乘法去做筛选,直到错误达到一个阈值。作为函数来说,输入包括一个最短距离、存储边上像素位置的数据结构以及当前的位置,线段的提取函数就会从当前位置,读取最短距离的边,看这个短边是不是符合要求,也就是计算一个合适度,如果符合要求,那么就认为这个短边是一个初始化短边,就在这个的基础上,不断向里面加入新的像素,加入的像素必须与当前的线足够近,从代码来看,这个部分遍历了这条边,对于离线距离较远的点,就记为噪声点,如果连续出现三个噪声点,就停止遍历,直接放弃给当前的初始化短边继续添加,否则就将噪声点记录归零,重新统计。在此基础上,一条边最多进行六次的线段划分。也就是说,论文中所谓的检测角落和方向,本质上就是检测了距离,如果出现了拐角,那么拐角的点到线的距离必然会增加,出现连续三个,就会停止延伸。添加停止之后,就会进行一个检验,如果符合检验就将提取出来的线段存储下来,剩余的线继续进行提取。

三、线段的检测

线段的检测这部分主要还是利用了Helmholtz principle,前面稍微总结过一点:https://blog.csdn.net/weixin_43849505/article/details/122640587?spm=1001.2014.3001.5501
在这里,线段检测的主要方法就是计算NFA值:

其中p表示一个概率值,这个取值与方向的划分有关,在检测时,主要是遍历这条线段,找出与线同向的点,然后用这个公式去计算,结果一般与1进行比较,如果大于1就会被拒绝。

当然,这个计算时很耗费时间的,因为要遍历整个的一条线,论文中也提到了,对于一些长度较长的线,一般并不会在计算NFA的时候被拒绝,被拒绝的一般都是一些短线,所以如果需要节省时间,可以加一个根据长度的判断,如果长度超过一定的值就进行一般的检验,短线则进行NFA的计算。

四、算法参数的设定

这部分论文主要介绍了算法的一些细节,包括参数的设置和计算的内容。

①梯度和方向
前面也提到过,这里的梯度计算实际上是一个简化版,这里就介绍了这里的梯度计算方法:

这里论文使用这种梯度计算,主要是为了减少时间上的开销,从而尽可能多地计算更多像素的信息。

②线检测参数
这个参数指的主要就是方向的划分,一般为了计算的方便,都将180度分为好几份,如果分为8份,那么每份就是22.5°,也就是说只要两个方向的偏差不超过22.5°,我们就认为两个方向是同向的,这个反应到算法里,影响到的主要就是NFA的计算中p的取值,划分为8份,那么p的取值就是八分之一。

③梯度阈值、锚阈值和扫描间隔
梯度阈值主要是在根据梯度图计算锚的时候,一些梯度很小的点由于大概率不会出现在边的上面,所以就不会是锚,所以我们可以直接去掉,从而在检测锚的时候就可以少计算一些点。
锚阈值则更像是为了优中选优,一般来说如果按照的思路去计算梯锚,只要比临近的两个像素的强度大就有可能被筛选为锚,而这里引入锚阈值,要求邻近的像素必须要比当前像素小锚阈值才可以被认为是锚,从而让筛选出来的锚更加具有代表性。
扫描间隔就没什么好说的了,就是在扫描锚的时候,行与行之间的间隔。

④线适应阈值
这个就没什么好说的,本质上就是减少计算的一个快捷方法,主要是利用NFA值要大于1这个条件,对n进行筛选,也就是线段长度,对于一个512×512的图片,如果提取出来的线段长度小于12就根本没有计算的必要,因为一定不会满足NFA的要求。

EDLines: A real-time line segment detector with a false detection control相关推荐

  1. 【文献翻译】LSD: A Fast Line Segment Detector with a False Detection Control

    前言 博主译文水平不好,为了学习,所以进行论文翻译和研究,博文以译文为主.如果有翻译不对之处,还请各位指出,便于我修改. 文献信息 引用格式:Gioi R G V, Jakubowicz J, Mor ...

  2. EDCircles: A real-time circle detector with a false detection control 翻译

    论文名:EDCircles:一个带有错误检测控制的实时圆检测器 摘要 我们提出了一种实时的,无参数的圆检测算法,具有高的检测率,产生准确的结果,并控制错误的圆检测的数量.该算法利用了无参数边缘段检测器 ...

  3. 目标检测之线段检测---lsd line segment detector

    (1)线段检测应用背景 (2)线段检测原理简介 (3)线段检测实例 a line segment detector (4)hough 变换和 lsd 的区别 --------------------- ...

  4. 直线段检测算法(LSD:a Line Segment Detector)

    直线段检测算法(LSD:a Line Segment Detector) 1 简介 LSD是一种线段检测算法,该方法能在较短的时间内获得较高精度的直线段检测结果. LSD直线检测算法首先计算图像中所有 ...

  5. a Line Segment Detector

    FROM:http://blog.csdn.net/polly_yang/article/details/10085401 近来比较忙+生病,没有大段的时间学习PGM,临睡前回顾一篇论文--<L ...

  6. 【转】 LSD(Line Segment Detector) 直线段检测算法学习~

    论文回顾之一 一种新的直线段检测算法---LSD:a Line Segment Detector 原文地址:http://blog.csdn.net/polly_yang/article/detail ...

  7. LSD(Line Segment Detector)直线提取算法

    LSD是2010年发表在ipol上的一篇论文提出的直线提取算法,在较短的时间内可以提取一张灰度图上所有的线段特征. (文中提到了a contrario model 和 Helmoholtz princ ...

  8. 论文笔记-LSD: a Line Segment Detector线特征提取

    备注:关于LSD的原版论文可点击此处,这一篇是原课题组又添加了一点改进的版本. 概要 LSD是一个线性时间的线段检测器,提供亚像素的精确结果.它被设计成可以在任何数字图像上工作而不需要调整参数.它可以 ...

  9. C++line segment intersection线段求交(交点)(附完整源码)

    C++line segment intersection线段求交的实现 C++line segment intersection线段求交实现的完整源码(定义,实现,main函数测试) C++line ...

最新文章

  1. golang beego 配置
  2. 背包问题之我的思考一
  3. Leetcode 532.数组中的K-diff数对
  4. 如何调用Altera FPGA的内嵌乘法器
  5. mysql 查询语句执行顺序_MySQL 查询语句执行过程
  6. 用Delphi写扬声器音乐
  7. m3u8 php防盗链代码,Nginx-accesskey权限模块使用——简单的m3u8防盗链
  8. 详解优酷视频质量评价体系
  9. 【PMP】Head First PMP 学习笔记 第十章 沟通管理
  10. 【重难点】【Java集合 02】Set、List、Map 的区别、常见的线程安全的集合类、Collection 为什么只能在 Iterator 中删除元素
  11. RubikFX:用JavaFX 3D解决魔方难题
  12. Linux终端进程后台运行与前后台切换
  13. 使用ThinkPHP扩展,实现Redis的CURD操作。
  14. jsonp跨域原理(简单粗暴)
  15. 程序员该怎么创业才比较靠谱?
  16. retrofit 解析百度地图api 返回数据_基于百度地图API的城市数据采集方式
  17. 晚清十大武林高手(电视里常引用的真实人物)
  18. 【上课课件整理复习】第六章 网页数据的采集(1)
  19. oracle量子,量子计算
  20. 人民币贬值 ,对普通人、码农的影响

热门文章

  1. Jafka来源分析——文章
  2. C#刀那儿特更清晰讲述什么是事件?
  3. 无法为类型 CuteEditor.Editor 授予有效的许可证。
  4. AbstractQueuedSynchronizer AQS源码分析
  5. 数据结构——数组、单向链表、双向链表
  6. Linux-1:安装忘记密码CRT连接centos 6.5
  7. JS中如何判断null
  8. English Grammar
  9. uva11922(强行用rope替代spaly)
  10. JavaWeb 之 HttpServletResponse