The HoughLines
function here is equivalent to HoughLines Standard in
OpenCV. The HoughLines
function is used to detect straight lines in
a binary image. To apply the Hough transform, edge detection
preprocessing is required. The input to the Hough transform is an edge
detected binary image. For each point (xi,yi) in a binary image, we
define a family of lines that go through the point as:
rho= xi cos(theta) + yi sin(theta)
Each pair of (rho,theta) represents a line that passes through the point
(xi,yi). These (rho,theta) pairs of this family of lines passing through
the point form a sinusoidal curve in (rho,theta) plane. If the sinusoids
of N different points intersect in the (rho,theta) plane, then that
intersection (rho1, theta1) represents the line that passes through
these N points. In the HoughLines
function, an accumulator is used
to keep the count (also called voting) of all the intersection points in
the (rho,theta) plane. After voting, the function filters spurious lines
by performing thinning, that is, checking if the center vote value is
greater than the neighborhood votes and threshold, then making that
center vote as valid and other wise making it zero. Finally, the
function returns the desired maximum number of lines (LINESMAX) in
(rho,theta) form as output.
The design assumes the origin at the center of the image i.e at (Floor(COLS/2), Floor(ROWS/2)). The ranges of rho and theta are:
theta = [0, pi)
rho=[-DIAG/2, DIAG/2), where DIAG = cvRound{SquareRoot( (COLS*COLS) + (ROWS*ROWS))}
For ease of use, the input angles THETA, MINTHETA and MAXTHETA are taken in degrees, while the output theta is in radians. The angle resolution THETA is declared as an integer, but treated as a value in Q6.1 format (that is, THETA=3 signifies that the resolution used in the function is 1.5 degrees). When the output (rho, ? theta) is used for drawing lines, you should be aware of the fact that origin is at the center of the image.
API Syntax
template<int RHO, int THETA,int MAXLINES,int DIAG,int MINTHETA,int MAXTHETA,int SRC_T, int ROWS, int COLS,int NPC, int XFCVDEPTH_IN_1 = _XFCVDEPTH_DEFAULT>
void HoughLines(xf::cv::Mat<SRC_T, ROWS, COLS, NPC, XFCVDEPTH_IN_1> & _src_mat,float outputrho[MAXLINES],float outputtheta[MAXLINES],short threshold,short linesmax)
Parameter Descriptions
The following table describes the template and the function parameters.
Parameter | Description |
---|---|
RHO | Distance resolution of the accumulator in pixels. |
THETA | Angle resolution of the accumulator in degrees and Q6.1 format. |
MAXLINES | Maximum number of lines to be detected |
MINTHETA | Minimum angle in degrees to check lines. |
MAXTHETA | Maximum angle in degrees to check lines |
DIAG | Diagonal of the image. It should be cvRound(sqrt(rows*rows + cols*cols)/RHO). |
SRC_T | Input Pixel Type. Only 8-bit, unsigned, 1-channel is supported (XF_8UC1). |
ROWS | Maximum height of input image |
COLS | Maximum width of input image |
NPC | Number of Pixels to be processed per cycle; Only single pixel supported XF_NPPC1. |
XFCVDEPTH_IN | Depth of the input image. |
_src_mat | Input image should be 8-bit, single-channel binary image. |
outputrho | Output array of rho values. rho is the distance from the coordinate origin (center of the image). |
outputthe ta | Output array of theta values. Theta is the line rotation angle in radians. |
threshold | Accumulator threshold parameter. Only those lines are returned that get enough votes (>threshold). |
linesmax | Maximum number of lines. |
Resource Utilization
The table below shows the resource utilization of the kernel for different configurations, generated using Vivado HLS 2019.1 version tool for the Xczu9eg-ffvb1156-1-i-es1 to process a grayscale HD (1080x1920) image for 512 lines.
Name | Resource Utilization |
---|---|
THETA=1, RHO=1 | |
BRAM_18K | 542 |
DSP48E | 10 |
FF | 60648 |
LUT | 56131 |
Performance Estimate
The following table shows the performance of kernel for different configurations, generated using Vivado HLS 2019.1 version tool for the Xczu9eg-ffvb1156-1-i-es1 to process a grayscale HD (1080x1920) image for 512 lines.
Operating Mode | Operating Frequency (MHz) | Latency Estimate |
---|---|---|
Max (ms) | ||
THETA=1, RHO=1 | 300 | 12.5 |