Canny edge detection is a popular image processing technique for extracting stable and thin image edges. In this tutorial, we will describe how to extract object outlines from photos and pictures.
The Canny edge detector is an edge detection operator that uses a multi-stage algorithm to detect a wide range of edges in images. It was developed by John F. Canny in 1986. Canny also produced a computational theory of edge detection explaining why the technique works.
Wikipedia
How to develop a Canny algorithm
The Canny algorithm is a multi-stage filter that produces stable image edges. As a result, the dominant objects in the scene receive well-connected contours. The next few points provide details on how to develop a Canny edge detector.
Typically, the algorithm works on gray-scale images. Therefore, at first we can use color space conversion to transform RGB image to grayscale.
The following steps describe how to find stable image edges using the Canny operator:
Step 1: Reduce image noise
This is an important step, since edge detection is sensitive to image noise. The classical Canny algorithm relies on Gaussian blur for image denoising.
Alternative methods for image filtering are described into our lesson on Symmetric Nearest Neighbor filter and 2D Median filtering.
Step 2: Select a suitable edge detector
The classic Canny algorithm uses the Sobel edge detector for image contours extraction. However, the algorithm can also work well with other gradient detectors. Some popular alternatives are:
Alternatives to Sobel operator
- Prewitt edge detector
- Schaar operator
Note that together with the edges we need to extract the parameters of the image gradients. In this way we will have preliminary information to help us in the further processing steps.
Step 3: Edge thinning
Typically, edge detectors result in thick contour lines, which can make further processing difficult. To improve the border detection result, the Canny algorithm applies an edge thinning procedure by non-maximum suppression.
Step 4: Hysteresis trsholding (Double threshold)
An important step in the Canny operator is hysteresis thresholding. This operation finds “weak” edges that have a connection to “strong”.
The hysteresis threshold uses two limit values – low and high and therefore we can also meet it as a double threshold. A strong pixel is one that has a value greater than the upper limit, while a weak pixel is one that is between the low and high ranges. Pixels that have no connection to a strong pixel are assumed to be noise and therefore discarded.
With the implementation of this phase we get a list of connected contour lines of the objects in the scene.
How the edge tracing works?
To implement a Canny edge detector, we need a decent edge tracking algorithm. The brute force edge tracing is too expensive for online machine vision. Fortunately, there is an elegant smart edge tracing algorithm.
This section provides an overview of how to retrieve lists of pixels that belong only to strong contour lines in an image. The following steps describe how it works.
- Define two threshold values (the hysteresis)
- Scan the picture to find the appearance of a “strong” edge pixel.
- Mark this pixel as visited one and add it to the edge list.
- From its 8-neighbors find a pixel that is bigger than the low limit value.
- Keep track of the direction from point 4 and move to the new pixel
- Use the same direction to search for the next contour pixel and repeat point 3 – 6
- The result list contains the current edge line and we can repeat point 2 – 5 for the next one
- We can throw out the contour lines that are below a certain length.
Source Code
- Image edge detection with simple JavaScript
- Fast edge detection with OpenGL/WebGL
- Gaussian blur by OpenGL
Useful Resources
- Contour thinning by non-maximal suppression
- Image Gradients Overview
- Canny edge detector – Wikipedia
Online Tools
The Free Online Image Applications section contains various edge detection tools and utilities.
WEB APPLET
See how it works in the browser!
Conclusion
The Canny operator is a multi stage image processing algorithm for edge detection. This blog post gives an overview of what the Canny’s edge detection is and how to use it to extract a list of objects contours. The article discusses how to reduce image noise using Gaussian blur and how to make thin edges using non-maximal suppression.
In case you found this article helpful, you can read more about computer graphics and programming tutorials in the blog here.