LSD算法是一个直线提取算法,在opencv 中也有封装,它的主要思想是通过求导得到灰度的梯度,因为灰度梯度的方向的垂直方向就是线条的方向,将有相同方向的向量用矩形圈起来,再将举行精细化,最后就可以得到的一条线段了。
关于它的文章和算法和demo基本上可以在这里找到。
这篇文章里引入了很多名词,切听我一一道来。首先,我们看下图,这里的图片首先根据梯度的垂线构造了一个level-line field,它把和梯度的垂直方向的线叫做level-line,所以这个field就是由这样的线组成的场。有了这个场,因为有直线的区域我们总能够找到,很多方向相同的level-line,这样我们就能得到右边这些颜色区域了,也就是所谓的line support region。
如果把这个区域用举行圈起来的话就得到了如下图所示的矩形,注意这个举行我们是区分方向的。
至于,是根据什么规则生成的矩形,就像之前说的,在直线的区域,自然地level-line(梯度方向的垂线)自然就会比较接近,因此,我们就给定一个阈值\(/tau\),如果这些向量的夹角小于\(/tau\)且在这个区域内满足条件的向量足够多,我们就认为这个区域可能是直线,比如下图中,就只有8个符合条件的level-line,感觉是不足够多的,因此它可能不被看作是一个直线。具体地,这里使用了区域生长算法,即从某个点开始,找其领域内符合条件的点。
但是慢着,你可能会问,怎样才叫足够多?改天再说吧...
原文地址:https://www.cnblogs.com/drunknbeard/p/9986375.html
时间: 2024-10-13 01:31:22