From 24e916059fd45123c7e5c93dbbb6060853e0a088 Mon Sep 17 00:00:00 2001 From: Daniel Angelov Date: Sat, 31 Aug 2013 13:46:10 +0300 Subject: [PATCH] Added LineSegmentDetector documentation and an output image. --- modules/imgproc/doc/feature_detection.rst | 106 ++++++++++++++++++++++ modules/imgproc/doc/pics/building_lsd.png | Bin 0 -> 50285 bytes 2 files changed, 106 insertions(+) create mode 100644 modules/imgproc/doc/pics/building_lsd.png diff --git a/modules/imgproc/doc/feature_detection.rst b/modules/imgproc/doc/feature_detection.rst index 1c5d29c16d..b23675171b 100644 --- a/modules/imgproc/doc/feature_detection.rst +++ b/modules/imgproc/doc/feature_detection.rst @@ -496,6 +496,110 @@ And this is the output of the above program in case of the probabilistic Hough t .. image:: pics/houghp.png +.. seealso:: + + :ocv:class:`LineSegmentDetector` + + + +LineSegmentDetector +------------------- +Line segment detector class, following the algorithm described at [Rafael12]_. + +.. ocv:class:: LineSegmentDetector : public Algorithm + + +createLineSegmentDetectorPtr +---------------------------- +Creates a smart pointer to a LineSegmentDetector object and initializes it. + +.. ocv:function:: Ptr createLineSegmentDetectorPtr(int _refine = LSD_REFINE_STD, double _scale = 0.8, double _sigma_scale = 0.6, double _quant = 2.0, double _ang_th = 22.5, double _log_eps = 0, double _density_th = 0.7, int _n_bins = 1024) + + :param _refine: The way found lines will be refined: + + * **LSD_REFINE_NONE** - No refinement applied. + + * **LSD_REFINE_STD** - Standard refinement is applied. E.g. breaking arches into smaller straighter line approximations. + + * **LSD_REFINE_ADV** - Advanced refinement. Number of false alarms is calculated, lines are refined through increase of precision, decrement in size, etc. + + :param scale: The scale of the image that will be used to find the lines. Range (0..1]. + + :param sigma_scale: Sigma for Gaussian filter. It is computed as sigma = _sigma_scale/_scale. + + :param quant: Bound to the quantization error on the gradient norm. + + :param ang_th: Gradient angle tolerance in degrees. + + :param log_eps: Detection threshold: -log10(NFA) > log_eps. Used only when advancent refinement is chosen. + + :param density_th: Minimal density of aligned region points in the enclosing rectangle. + + :param n_bins: Number of bins in pseudo-ordering of gradient modulus. + +The LineSegmentDetector algorithm is defined using the standard values. Only advanced users may want to edit those, as to tailor it for their own application. + + +LineSegmentDetector::detect +--------------------------- +Finds lines in the input image. See the lsd_lines.cpp sample for possible usage. + +.. ocv:function:: void LineSegmentDetector::detect(const InputArray _image, OutputArray _lines, OutputArray width = noArray(), OutputArray prec = noArray(), OutputArray nfa = noArray()) + + :param _image A grayscale (CV_8UC1) input image. + If only a roi needs to be selected, use :: + lsd_ptr->detect(image(roi), lines, ...); + lines += Scalar(roi.x, roi.y, roi.x, roi.y); + + :param lines: A vector of Vec4i elements specifying the beginning and ending point of a line. Where Vec4i is (x1, y1, x2, y2), point 1 is the start, point 2 - end. Returned lines are strictly oriented depending on the gradient. + + :param width: Vector of widths of the regions, where the lines are found. E.g. Width of line. + + :param prec: Vector of precisions with which the lines are found. + + :param nfa: Vector containing number of false alarms in the line region, with precision of 10%. The bigger the value, logarithmically better the detection. + + * -1 corresponds to 10 mean false alarms + + * 0 corresponds to 1 mean false alarm + + * 1 corresponds to 0.1 mean false alarms + + This vector will be calculated only when the objects type is LSD_REFINE_ADV. + +This is the output of the default parameters of the algorithm on the above shown image. + +.. image:: pics/building_lsd.png + +.. note:: + + * An example using the LineSegmentDetector can be found at opencv_source_code/samples/cpp/lsd_lines.cpp + +LineSegmentDetector::drawSegments +--------------------------------- +Draws the line segments on a given image. + +.. ocv:function:: void LineSegmentDetector::drawSegments(InputOutputArray _image, const InputArray lines) + + :param image: The image, where the liens will be drawn. Should be bigger or equal to the image, where the lines were found. + + :param lines: A vector of the lines that needed to be drawn. + + +LineSegmentDetector::compareSegments +------------------------------------ +Draws two groups of lines in blue and red, counting the non overlapping (mismatching) pixels. + +.. ocv:function:: int LineSegmentDetector::compareSegments(const Size& size, const InputArray lines1, const InputArray lines2, InputOutputArray _image = noArray()) + + :param size: The size of the image, where lines1 and lines2 were found. + + :param lines1: The first group of lines that needs to be drawn. It is visualized in blue color. + + :param lines2: The second group of lines. They visualized in red color. + + :param image: Optional image, where the lines will be drawn. The image is converted to grayscale before displaying, leaving lines1 and lines2 in the above mentioned colors. + preCornerDetect @@ -542,3 +646,5 @@ The corners can be found as local maximums of the functions, as shown below: :: .. [Shi94] J. Shi and C. Tomasi. *Good Features to Track*. Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 593-600, June 1994. .. [Yuen90] Yuen, H. K. and Princen, J. and Illingworth, J. and Kittler, J., *Comparative study of Hough transform methods for circle finding*. Image Vision Comput. 8 1, pp 71–77 (1990) + +.. [Rafael12] Rafael Grompone von Gioi, Jérémie Jakubowicz, Jean-Michel Morel, and Gregory Randall, LSD: a Line Segment Detector, Image Processing On Line, vol. 2012. http://dx.doi.org/10.5201/ipol.2012.gjmr-lsd diff --git a/modules/imgproc/doc/pics/building_lsd.png b/modules/imgproc/doc/pics/building_lsd.png new file mode 100644 index 0000000000000000000000000000000000000000..747029a65d914ac2a4e05621b45587a13c7b3947 GIT binary patch literal 50285 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 LA8-G~lfV7{