sobel_dir ( Image : EdgeAmplitude, EdgeDirection : FilterType, Size : )

Detect edges (amplitude and direction) using the Sobel operator.

sobel_dir calculates first derivative of an image and is used as an edge detector. The filter is based on the following filter masks:

  A =
           1       2       1
           0       0       0
          -1      -2      -1

  B =
           1       0      -1
           2       0      -2
           1       0      -1
These masks are used differently, according to the selected filter type. (In the following, a und b denote the results of convolving an image with A und B for one particular pixel.)
     'sum_sqrt'              sqrt(a^2 + b^2) / 4
     'sum_abs'               (|a| + |b|) / 4
For a Sobel operator with size 3x3, the corresponding filters A and B are applied directly, while for larger filter sizes (Size = 5,7,9 and 11) the input image is first smoothed using a Gaussian filter of size Size-2. Since smoothing reduces the edge amplitudes, in this case the edge amplitudes are multiplied by a factor of 2 to prevent information loss. Therefore,
     sobel_dir(I,Amp,Dir,FilterType,S)

for Size > 3 is conceptually equivalent to

     scale_image(I,F,2,0)
     gauss_image(F,G,S-2)
     sobel_dir(G,Amp,Dir,FilterType,3).
The edge directions are returned in EdgeDirection, and are stored in 2-degree steps, i.e., an edge direction of x degrees with respect to the horizontal axis is stored as x / 2 in the edge direction image. Furthermore, the direction of the change of intensity is taken into account. Let [Ex,Ey] denote the image gradient. Then the following edge directions are returned as r/2:
intensity increase                     Ex / Ey        edge direction r

from bottom to top                      0 / +         0
from lower right to upper left          + / -         ]0,90[
from right to left                      + / 0         90 
from upper right to lower left          + / +         ]90,180[
from top to bottom                      0 / +         180 
from upper left to lower right          - / +         ]180,270[
from left to right                      + / 0         270
from lower left to upper right          - / -         ]270,360[.
Points with edge amplitude 0 are assigned the edge direction 255 (undefined direction).


Parameters

Image (input_object)
(multichannel-)image(-array) -> object : byte / int2 / uint2
Input image.

EdgeAmplitude (output_object)
(multichannel-)image(-array) -> object : byte / int2 / uint2
Edge amplitude (gradient magnitude) image.

EdgeDirection (output_object)
(multichannel-)image(-array) -> object : direction
Edge direction image.

FilterType (input_control)
string -> string
Filter type.
Default value: 'sum_abs'
List of values: 'sum_abs', 'sum_sqrt'

Size (input_control)
integer -> integer
Size of filter mask.
Default value: 3
List of values: 3, 5, 7, 9, 11, 13


Example
read_image(Image,'fabrik') 
sobel_dir(Image,Amp,Dir,'sum_abs',3) 
threshold(Amp,Edg,128,255).

Result

sobel_dir returns 2 (H_MSG_TRUE) if all parameters are correct. If the input is empty the behaviour can be set via set_system('no_object_result',<Result>). If necessary, an exception handling is raised.


Parallelization Information

sobel_dir is reentrant and automatically parallelized (on tuple level, channel level).


Possible Predecessors

gauss_image, mean_image, anisotropic_diffusion, sigma_image


Possible Successors

nonmax_suppression_dir, hysteresis_threshold, threshold


Alternatives

edges_image, frei_dir, kirsch_dir, prewitt_dir, robinson_dir


See also

roberts, laplace, highpass_image, bandpass_image


Module

Foundation



Copyright © 1996-2008 MVTec Software GmbH