直线段检测法(LSD)

直线段检测法(LSD)直线段检测法(LSD)1简介2算法介绍3.算法简述感谢观看:)本文仅用于个人学习/复习1简介LSD是一种线段检测算法,该方法号称是能在线性时间(linear-time)内得到亚像素级准确度的直线段检测算法。LSD的目标在于检测图像中局部的直的轮廓,这也是我们称之为直线分割的原因。2算法介绍LSD直线检测方法首先计算每个像素点的水平线(level-Line)角度,从而形成了一个水平线场,即单位矢量场,这里像素点的水平线角度就是该点梯度方向的垂直角度,如下图所示,而水平线场就是一个与图像中的点一一对应

大家好,又见面了,我是你们的朋友全栈君。

1简介

LSD是一种线段检测算法,该方法号称是能在线性时间(linear-time)内得到亚像素级准确度的直线段检测算法。LSD的目标在于检测图像中局部的直的轮廓,这也是我们称之为直线分割的原因。

2算法介绍

LSD直线检测方法首先计算每个像素点的水平线(level-Line)角度,从而形成了一个水平线场,即单位矢量场,这里像素点的水平线角度就是该点梯度方向的垂直角度,如下图所示,而水平线场就是一个与图像中的点一一对应的矩阵,矩阵中元素的值即为对应到图像中点的水平线角度。

在这里插入图片描述
算法首先计算每个像素的水平线角度,以构成一个水平线场。该场被分割为连通的若干个部分,它们方向近似相同并且在容忍度τ内,这样可以得到一系列区域,这些区域被称为 line support regions(支持域)。如下图所示:

在这里插入图片描述如图绿色、蓝色、橙色区域各是一个线支持区域。

每一个line support region(支持域)其实就是一组像素,它也是直线段(line segment)的候选。同时,对于这个line support region(支持域),我们可以观察它的最小外接矩形。直观上来讲,当一组像素构成的区域,特别细长时,那么这组像素更加可能是直线段。line support region(支持域)的一个主惯性轴作为矩形的主方向,矩形的大小选择为覆盖整个区域。

在这里插入图片描述
矩形中的像素的level-line angle(水平线角度)与最小外接矩形的主方向的角度差在容忍(tolerance)τ内的话,那么这个点被称作”aligned point”(同性点或者是对齐点)。

通过统计最小外接矩形内的所有像素数n和其内的alinedg points个数k,用来判定这个line support region是否是一个直线段。

在这里插入图片描述

矩形的验证方法是基于Desolneux, Moisan, and Morel提出的contrario方法和Helmholtz法则,所谓的亥姆霍兹原理指出,不应在噪声图像上产生感知(或检测),因此,相反的方法提出定义噪声或相反的模型H0,其中不存在期望的结构。在含有线段的情况下,我们对对齐点的数量感兴趣,因此考虑噪声模型中的虚警线段具有与所观测的真实线段一样多或更多对齐点的事件。给定图像i和矩形r,定义 k(r,i) 表示矩形r中对齐点的数量,n(r )表示矩形 r中像素点的总数,这样上述事件发生的次数即为:

在这里插入图片描述也就是说这种事件发生即表示产生一个直线段检测的虚警。其中Ntest表示被考虑到的矩形总数,PH0表示一个矩形对应的噪声模型中对齐点数量不小于实际模型中对齐点数量的概率。I是模型H0对应的噪声图像,即为一个各个元素独立同分布的的矩阵,其尺寸与真实图像i一致,每一个元素是在 [0,2π ]上服从均匀分布的独立随机变量。

任意一个像素点属于对齐点的概率为P:

在这里插入图片描述于是矩形对应的噪声模型中对其点数量不小于实际模型中对齐点数量的概率为:

在这里插入图片描述
设图像的尺寸为M×N,矩形的宽度最大为(MN)1/2,因此所有可能的矩形个数为(NM)5/2,考虑到后续对于P值还有其他的测试值而不仅仅是τ/π,设为γ个,因此测试矩形总数Ntest为:

在这里插入图片描述最后定义虚警的个数(the Number of False Alarms)为
在这里插入图片描述设置一个阈值ε,若NFA(r,i)≤ε,那么就可以将其保留为一个直线段的检测结果。

3.算法简述

整体算法的过程图如图所示:

在这里插入图片描述

4.应用示例

在这里插入图片描述
在这里插入图片描述

感谢观看 ?

本文仅用于个人学习/复习用途

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132355.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • UDP协议解析

    UDP协议解析????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????UDP协议简介UDP是UserDatagramProtocol的简称,中文名是用户数据报协议,是OSI(OpenSystemInt

  • 查询数据库隔离级别「建议收藏」

    查询数据库隔离级别「建议收藏」查询数据库当前隔离级别select@@tx_isolation;修改隔离级别settx_isolation=‘READ-UNCOMMITTED’;隔离级别有READ-UNCOMMITTED(读取未提交内容),READ-COMMITTED(读取提交内容),REPEATABLE-READ(可重读),SERIALIZABLE(可串行化)…

  • IDEA安装阿里代码规范插件

    IDEA安装阿里代码规范插件要养成一个好的编码习惯从自己编码开始,对自己代码的合理化命名,编码不仅对自己有好处,而且别人也容易读懂你的代码。所以下载阿里的代码规范插件来约束自己凌乱的代码。阿里规范插件GitHub地址:https://github.com/alibaba/p3cIDEA安装该插件步骤:1.打开IDEA,File->Setteings->Plugins->BrowseRepositorie…

  • java中session的使用[通俗易懂]

    java中session的使用[通俗易懂]1、创建session:2、jsp读取session3、java后台读取session的值

  • 圆周率的前十万亿位_圆周率算到60万亿位

    圆周率的前十万亿位_圆周率算到60万亿位3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644…

  • getchar()函数的使用方法

    getchar()函数的使用方法getchar()函数的使用方法getchar()函数的功能是一个一个地读取你所输入的字符。例如,你从键盘输入‘aabb’这四个字符,然后按回车,问题来了,getchar()不是一个一个读取吗,你输入一串是什么意思?其实,你按了回车之后,这四个字符会被存储到键盘缓冲区,这个时候你使用getchar()函数,他会从键盘缓冲区里一个一个去读取字符。还有一个问题需要注意getchar()函数的返…

    2022年10月18日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号