线段检测器与概率霍夫变换
Line Segment Detector vs Probabalistic Hough Transform
在 OpenCV 中,有两种检测直线的方法以端点向量的形式给出相似的结果 - Line Segments Detector (LSD) and the Probabilistic Hough Transform。 (考虑到标准霍夫变换,因为给出的输出是方程式,而不是线端点。)
我没能找到这两种线检测方法及其pros/cons的比较和对比。因此-这两个功能有什么区别?使用一种方法相对于另一种方法有什么特别的好处吗?
此外,是否还有其他鲜为人知的线路检测方法(如 LSD)在某些用例中可能具有优势?
线段检测器 (LSD)
- 将灰度图像作为输入
- 设计为无需任何参数调整即可工作
- 以线性时间运行
- 提供亚像素精确结果
- 对无参数边缘检测很有用
- LSD paper by Grompone Von Gioi et al
- 示例实现:using LSD to detect data matrices
(渐进式)概率霍夫变换
- 将二值图像作为输入
- 有几个调整参数;距离分辨率 (rho),角度分辨率 (theta),一个累加器阈值参数(只有那些有足够票数的是 returned),最小线长度和最大线间隙
- 时间性能取决于参数(但比标准霍夫变换有所改进)
- 由于随机性,多次运行可能会产生不同的结果
- 对于更具体的线路查找很有用;参数允许调整,并且可以选择将线段(通过最大线间隙参数)组合成 return 单个较长的线
- OpenCV 实现是 Progressive Probabilistic Hough Transform (with thanks to Dr. D.'s answer on this question)
其他算法
- EDLines:利用边缘检测器的线性时间线段检测器。据我所知,没有 OpenCV 实现。
(感谢 Micka 的评论指出输入和潜在用途的差异)
在 OpenCV 中,有两种检测直线的方法以端点向量的形式给出相似的结果 - Line Segments Detector (LSD) and the Probabilistic Hough Transform。 (考虑到标准霍夫变换,因为给出的输出是方程式,而不是线端点。)
我没能找到这两种线检测方法及其pros/cons的比较和对比。因此-这两个功能有什么区别?使用一种方法相对于另一种方法有什么特别的好处吗?
此外,是否还有其他鲜为人知的线路检测方法(如 LSD)在某些用例中可能具有优势?
线段检测器 (LSD)
- 将灰度图像作为输入
- 设计为无需任何参数调整即可工作
- 以线性时间运行
- 提供亚像素精确结果
- 对无参数边缘检测很有用
- LSD paper by Grompone Von Gioi et al
- 示例实现:using LSD to detect data matrices
(渐进式)概率霍夫变换
- 将二值图像作为输入
- 有几个调整参数;距离分辨率 (rho),角度分辨率 (theta),一个累加器阈值参数(只有那些有足够票数的是 returned),最小线长度和最大线间隙
- 时间性能取决于参数(但比标准霍夫变换有所改进)
- 由于随机性,多次运行可能会产生不同的结果
- 对于更具体的线路查找很有用;参数允许调整,并且可以选择将线段(通过最大线间隙参数)组合成 return 单个较长的线
- OpenCV 实现是 Progressive Probabilistic Hough Transform (with thanks to Dr. D.'s answer on this question)
其他算法
- EDLines:利用边缘检测器的线性时间线段检测器。据我所知,没有 OpenCV 实现。
(感谢 Micka 的评论指出输入和潜在用途的差异)