OpenCV
4.10.0
Open Source Computer Vision
|
Prev Tutorial: Canny Edge Detector
Next Tutorial: Hough Circle Transform
Original author | Ana Huamán |
Compatibility | OpenCV >= 3.0 |
In this tutorial you will learn how to:
For Hough Transforms, we will express lines in the Polar system. Hence, a line equation can be written as:
\[y = \left ( -\dfrac{\cos \theta}{\sin \theta} \right ) x + \left ( \dfrac{r}{\sin \theta} \right )\]
Arranging the terms: \(r = x \cos \theta + y \sin \theta\)
In general for each point \((x_{0}, y_{0})\), we can define the family of lines that goes through that point as:
\[r_{\theta} = x_{0} \cdot \cos \theta + y_{0} \cdot \sin \theta\]
Meaning that each pair \((r_{\theta},\theta)\) represents each line that passes by \((x_{0}, y_{0})\).
We consider only points such that \(r > 0\) and \(0< \theta < 2 \pi\).
The three plots intersect in one single point \((0.925, 9.6)\), these coordinates are the parameters ( \(\theta, r\)) or the line in which \((x_{0}, y_{0})\), \((x_{1}, y_{1})\) and \((x_{2}, y_{2})\) lay.
OpenCV implements two kind of Hough Line Transforms:
a. The Standard Hough Transform
b. The Probabilistic Hough Line Transform
Now we will apply the Hough Line Transform. We will explain how to use both OpenCV functions available for this purpose.
First, you apply the Transform:
And then you display the result by drawing the lines.
First you apply the transform:
And then you display the result by drawing the lines.
Using an input image such as a sudoku image. We get the following result by using the Standard Hough Line Transform:
And by using the Probabilistic Hough Line Transform:
You may observe that the number of lines detected vary while you change the threshold. The explanation is sort of evident: If you establish a higher threshold, fewer lines will be detected (since you will need more points to declare a line detected).