Sobel Edge Detection Using the MATLAB edge() Function
In MATLAB, the edge() function from the Image Processing Toolbox performs edge detection on 2D grayscale images. Specifying the 'Sobel' operator directs MATLAB to compute spatial gradients using 3x3 convolution masks and apply thresholding to return a binary edge map.
1. Basic Syntax
% Default Sobel edge detection with automatic thresholding
BW = edge(I, 'Sobel');
% Sobel with a user-specified sensitivity threshold
BW = edge(I, 'Sobel', thresh);
% Sobel with directional filtering ('both', 'horizontal', or 'vertical')
BW = edge(I, 'Sobel', thresh, direction);
% Return both the binary edge map and the computed threshold value
[BW, threshOut] = edge(I, 'Sobel');
2. Complete, Runnable MATLAB Script
This script uses the built-in cameraman.tif sample image to demonstrate automatic, custom threshold, and directional Sobel edge detection.
% 1. Load sample grayscale image
I = imread('cameraman.tif');
% Note: If your image is RGB, convert it first using:
% I = im2gray(I);
% 2. Standard Sobel with automatic thresholding
[BW_auto, threshAuto] = edge(I, 'Sobel');
% 3. Sobel with a custom sensitivity threshold
BW_custom = edge(I, 'Sobel', 0.15);
% 4. Detect only horizontal edges
BW_horizontal = edge(I, 'Sobel', [], 'horizontal');
% 5. Detect only vertical edges
BW_vertical = edge(I, 'Sobel', [], 'vertical');
% 6. Plot and compare the results
figure('Name', 'Sobel Edge Detection Comparison', 'Color', 'w');
subplot(2, 3, 1);
imshow(I);
title('Original Image');
subplot(2, 3, 2);
imshow(BW_auto);
title(['Auto Sobel (Thresh = ', num2str(threshAuto, '%.4f'), ')']);
subplot(2, 3, 3);
imshow(BW_custom);
title('Custom Thresh (0.15)');
subplot(2, 3, 5);
imshow(BW_horizontal);
title('Horizontal Edges');
subplot(2, 3, 6);
imshow(BW_vertical);
title('Vertical Edges');
3. Parameter Reference
| Parameter | Data Type | Description |
|---|---|---|
I |
2D array (uint8, uint16, double) | Input grayscale image. RGB images must be converted via im2gray(). |
'Sobel' |
Character vector / string | Specifies the Sobel gradient operator. |
thresh |
Scalar (0 to 1) or [] |
Sensitivity threshold. Passing [] tells MATLAB to compute the threshold automatically. |
direction |
'both', 'horizontal', 'vertical' |
Orientation of edges to detect. Default is 'both'. |
threshOut |
Scalar | The exact threshold value calculated by the algorithm during automatic mode. |
4. How the Sobel Algorithm Works
The Sobel operator calculates the image gradient at each pixel by convolving the image with two 3x3 integer filters:
- Horizontal Kernel (Gx): Highlights vertical edges by computing derivatives along the horizontal axis.
- Vertical Kernel (Gy): Highlights horizontal edges by computing derivatives along the vertical axis.
Gx = [ -1 0 +1
-2 0 +2
-1 0 +1 ]
Gy = [ +1 +2 +1
0 0 0
-1 -2 -1 ]
The gradient magnitude is computed as G = sqrt(Gx.^2 + Gy.^2). Any pixel whose magnitude exceeds the threshold value is assigned a value of 1 (edge), and all other pixels are assigned 0 (background).
5. Best Practices and Edge Cases
- Pre-filtering Noisy Images: Sobel operators amplify high-frequency noise. Apply Gaussian smoothing before edge detection for cleaner boundaries:
I_clean = imgaussfilt(I, 1.0); BW = edge(I_clean, 'Sobel'); - Choosing Between Sobel and Canny: Sobel is fast and computationally lightweight. For thinner, single-pixel wide, and continuous edge boundaries, consider using
edge(I, 'Canny').