简介 本篇是对快速图像直线检测算法实现的记录,参考资料:1、LSD: a Line Segment Detector; 2、LSD: A Fast Line Segment Detector with a False Detection Control LSD直线检测相对于霍夫变换来说,能够很好的筛选掉直线检测干扰,并且算法复杂度大幅度减小。在实际使用中,比较实用。 实现流程 整个都流程实现,大致可以分为如下几个步骤: 1、将输入图像通过高斯核采样,缩放到0.8。 2、计算图像梯度强度,以及每个像素点的梯度角:atan2(gx,-gy),其中gx核gy分别为水平和垂直方向梯度。 3、设置图像梯度强度范围到[0, 1023](大于1023的梯度强度,强制设置为1023)。 4、创建1024个链表,遍历整个梯度图,根据梯度强度,相同梯度值像素坐标放入同一张链表中。 5、将1024个链表,按从大到小顺序,合成一张大链表(首部为1023链表,尾部为0)。 6、取出链表头部存储图像坐标位置,作为种子像素,根据梯度角方向相似,进行区域扩散。(每扩散一个像素,将该像素坐标从链表中删除,并且做标记,之后新的区域扩散,无法再扩散到在像素)。 7、将扩散区域进行矩形拟合。 8、检测拟合矩形内梯度角,根据对应NFA公式(来自论文),计算出该拟合矩形精度误差,如果不满足,则丢弃;如果满足要求,则将该矩形记录存储,表示为一条检测到的直线。 9、继续回到第6步,从链表中,找到下一个种子点,从剩下图像进行区域扩散,至到遍历完全图,得到所有检测到的直线。 结果演示 在我PC上实验:测试跑512X512图像,花费时间60ms左右。 检测结果显如下: