OpenCV自学笔记29. lsd直线检测算法(未完)
2017-10-07 20:05
1211 查看
lsd直线检测算法
LSD是一种直线检测分割算法,它能在线性的时间内得出亚像素级精度的检测结果。该算法被设计成可以在任何数字图像上都无需参数调节。参考:http://blog.csdn.net/lien0906/article/details/38417191
1、lsd算法的步骤(未完)
LSD算法的步骤如下:1、图像缩放
2、梯度计算
3、梯度排序
4、阈值检测
5、区域增长
6、矩形近似
下面分别介绍每一个步骤:
1、图像缩放
2、梯度计算
3、梯度排序
4、阈值检测
5、区域增长
计算每个像素点8-邻域内level-line的角度,如果某个像素点的level-line角度与区域内平均的level-line角度相近(小于22.5°),则将该像素点加入到区域中,并重新计算区域内的平均level-line角度。
如下图所示:LSD算法将线段看做一小段图像区域,在这个区域中,图像的灰度发生剧烈变化,灰度变化的方向为梯度方向(Gradient),与梯度方向垂直的方向为线段方向(Level-Line)。
6、矩形近似
使用矩形覆盖区域,区域的质心就是矩形的中心。
2、lsd源码分析
3、实例
这个Demo用到的测试图像是:下面的代码,部分参考自:OpenCV官网
lsd_lines.cpp
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { string path = "images/test3.jpg"; Mat image = imread(path, IMREAD_GRAYSCALE); blur(image, image, Size(3,3)); // 使用3x3内核来降噪 Canny(image, image, 50, 200, 3); // Apply canny edge // Create and LSD detector with standard /* LSD_REFINE_NONE,没有改良的方式; LSD_REFINE_STD,标准改良方式,将带弧度的线(拱线)拆成多个可以逼近原线段的直线度; LSD_REFINE_ADV,进一步改良方式,计算出错误警告数量,通过增加精度,减少尺寸进一步精确直线。 */ Ptr<LineSegmentDetector> ls = createLineSegmentDetector(LSD_REFINE_STD); double start = double(getTickCount()); vector<Vec4f> lines_std; // Detect the lines ls->detect(image, lines_std); // Show found lines Mat drawnLines(image); ls->drawSegments(drawnLines, lines_std); Mat only_lines(image.size(), image.type()); ls->drawSegments(only_lines, lines_std); imshow("【lsd直线检测】", drawnLines); imshow("【仅仅是直线】", only_lines); waitKey(0); return 0; }
结果图分析
程序首先对源图像滤波降噪,然后使用canny边缘检测算法,提取图像中的边缘。接着创建LineSegmentDetector对象的智能指针并初始化,用于直线检测。
最后,将检测到的直线绘制出来。
createLineSegmentDetector的函数说明如下:
相关文章推荐
- OpenCV自学笔记27. Hough变换:检测直线和圆
- OpenCV自学笔记31. Android 上使用jni和opencv 实现边缘检测和直线检测
- OpenCV自学笔记5:Hough变换检测直线和圆
- OpenCV 人脸检测自学笔记(8)_读trainCascade的训练结果的代码笔记
- OpenCV自学笔记14:Harris角点检测实例
- opencv开发笔记(十五):特征检测十大方法之SURF算法
- 自学笔记:用python和opencv进行摄像头的人脸检测
- opencv笔记:检测轮廓,直线,圆以及直线拟合
- 直线检测算法 LSD 的相关介绍及其在 OpenCV 和 MATLAB 中的可视化
- OpenCV自学笔记7:人脸检测 之 静态图像中的人脸检测
- opencv直线检测直线提取算法与总结
- OpenCV自学笔记14:Harris角点检测实例
- OpenCV自学笔记4:轮廓检测
- 我的OpenCV学习笔记(19):检测轮廓,直线,圆以及直线拟合
- Opencv学习笔记-----霍夫变换直线检测及原理理解
- Python下opencv使用笔记(十一)(详解hough变换检测直线与圆)
- OpenCV笔记11:霍夫变换检测直线
- OpenCV2编程手册笔记之 7.3使用霍夫变换检测直线
- OpenCV学习笔记(29)KAZE 算法原理与源码分析(三)特征检测与描述
- OpenCV学习笔记(29)KAZE 算法原理与源码分析(三)特征检测与描述