大家好,又见面了,我是你们的朋友全栈君。
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账号...