线段检测器与概率霍夫变换

Posted

技术标签:

【中文标题】线段检测器与概率霍夫变换【英文标题】:Line Segment Detector vs Probabalistic Hough Transform 【发布时间】:2017-08-20 09:03:10 【问题描述】:

在 OpenCV 中,有两种检测线的方法可以以端点向量的形式给出相似的结果 - Line Segments Detector (LSD) 和 Probabilistic Hough Transform。 (扣除标准霍夫变换,因为给出的输出是方程,而不是线端点。)

我无法找到这两种线检测方法及其优缺点的比较和对比。因此 - 这两个功能有什么区别?使用一种方法相对于另一种方法有什么特别的好处吗?

此外,是否还有其他鲜为人知的线路检测方法(如 LSD)在某些用例中可能具有优势?

【问题讨论】:

LSD 使用灰度图像作为输入白色 PHough 使用二进制(黑白)图像。所以他们是完全不同的。我喜欢 LSD,因为它非常无参数,更像是边缘检测,而 PHough 可以找到单个更长的线。 @Micka 您本可以将其作为答案提及。我想这就足够了。还是谢谢!!!! @Micka 同意,如果您想将其详细说明为答案,那就太好了! (否则我想我会在某个时候将我所知道的内容纳入答案,并将这些点归功于您。) atm 没有时间写一个好的答案,我的评论有点基于意见(除了二进制输入与灰度输入的差异)。随意自己开始回答并保持最新。我对不同的意见和提示感兴趣 :) Line Segment Detector 因许可证冲突已被移除,建议大家给这个问题点个赞! “恢复 LineSegmentDetector LSD 并避免许可证冲突”:github.com/opencv/opencv_contrib/issues/2524#issue-615242133 【参考方案1】:

线段检测器 (LSD)

以灰度图像作为输入 设计为无需任何参数调整即可工作 以线性时间运行 提供亚像素准确的结果 对于无参数边缘检测很有用 LSD paper by Grompone Von Gioi et al 示例实现:using LSD to detect data matrices

(渐进式)概率霍夫变换

以二值图像作为输入 有几个调整参数;距离分辨率(rho)、角度分辨率(theta)、累加器阈值参数(仅返回具有足够票数的参数)、最小线长和最大线间距 时间性能取决于参数(但比标准霍夫变换有所改进) 由于随机性,多次运行可能会产生不同的结果 有助于更具体的线查找;参数允许调整,并且可以选择组合段(通过最大线间隙参数)以返回单个较长的线 OpenCV 实现是Progressive Probabilistic Hough Transform(感谢Dr. D.'s answer on this question)

其他算法

EDLines:使用边缘检测器的线性时间线段检测器。据我所知,没有 OpenCV 实现。

(感谢 Micka 的评论指出输入和潜在用途的差异)

【讨论】:

以上是关于线段检测器与概率霍夫变换的主要内容,如果未能解决你的问题,请参考以下文章

HoughLinesP(霍夫变换直线检测)

MATLAB中用霍夫变换检测出了直线之后怎么求斜率

OpenCV实战(14)——图像线条提取

霍夫线变换,霍夫圆变换

20opencv入门霍夫变换:霍夫线变换,霍夫圆变换合辑

标准霍夫变换识别粗直线