Example of edge detection, edge linking, and line segment fitting
% Read the sample image in
im = imread('shapessm.jpg');
% Find edges using the Canny operator with hysteresis thresholds of 0.1
% and 0.2 with smoothing parameter sigma set to 1.
edgeim = edge(im,'canny', [0.1 0.2], 1);
figure(1), imshow(edgeim);
% Link edge pixels together into lists of sequential edge points, one
% list for each edge contour. A contour/edgelist starts/stops at an
% ending or a junction with another contour/edgelist.
% Here we discard contours less than 10 pixels long.
[edgelist, labelededgeim] = edgelink(edgeim, 10);
% Display the edgelists with random colours for each distinct edge
% in figure 2
drawedgelist(edgelist, size(im), 1, 'rand', 2); axis off
% Fit line segments to the edgelists
tol = 2; % Line segments are fitted with maximum deviation from
% original edge of 2 pixels.
seglist = lineseg(edgelist, tol);
% Draw the fitted line segments stored in seglist in figure window 3 with
% a linewidth of 2 and random colours
drawedgelist(seglist, size(im), 2, 'rand', 3); axis off