The Image Processing Toolbox™ supports functions that enable you to use the Hough transform to detect lines in an image.

The `hough`

function implements the Standard
Hough Transform (SHT). The Hough transform is designed to detect lines,
using the parametric representation of a line:

rho = x*cos(theta) + y*sin(theta)

The variable `rho`

is the distance from the
origin to the line along a vector perpendicular to the line. `theta`

is
the angle between the x-axis and this vector. The `hough`

function
generates a parameter space matrix whose rows and columns correspond
to these `rho`

and `theta`

values,
respectively.

After you compute the Hough transform, you can use the `houghpeaks`

function
to find peak values in the parameter space. These peaks represent
potential lines in the input image.

After you identify the peaks in the Hough transform, you can
use the `houghlines`

function to find the endpoints
of the line segments corresponding to peaks in the Hough transform.
This function automatically fills in small gaps in the line segments.

This example shows how to detect lines in an image using the `hough`

function.

Read an image into the workspace and, to make this example more illustrative, rotate and crop the image using `imcrop`

. Display the image.

I = imread('circuit.tif'); rotI = imrotate(I,33,'crop'); imshow(rotI)

Find the edges in the image using the `edge`

function.

```
BW = edge(rotI,'canny');
imshow(BW);
```

Compute the Hough transform of the binary image returned by `edge`

.

[H,theta,rho] = hough(BW);

Display the transform, `H`

, returned by the `hough`

function.

figure imshow(imadjust(mat2gray(H)),[],... 'XData',theta,... 'YData',rho,... 'InitialMagnification','fit'); xlabel('\theta (degrees)') ylabel('\rho') axis on axis normal hold on colormap(hot)

Find the peaks in the Hough transform matrix, `H`

, using the `houghpeaks`

function.

```
P = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));
```

Superimpose a plot on the image of the transform that identifies the peaks.

x = theta(P(:,2)); y = rho(P(:,1)); plot(x,y,'s','color','black');

Find lines in the image using the `houghlines`

function.

lines = houghlines(BW,theta,rho,P,'FillGap',5,'MinLength',7);

Create a plot that displays the original image with the lines superimposed on it.

figure, imshow(rotI), hold on max_len = 0; for k = 1:length(lines) xy = [lines(k).point1; lines(k).point2]; plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green'); % Plot beginnings and ends of lines plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow'); plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red'); % Determine the endpoints of the longest line segment len = norm(lines(k).point1 - lines(k).point2); if ( len > max_len) max_len = len; xy_long = xy; end end % highlight the longest line segment plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','red');

Was this topic helpful?