Herror ::sobel_amp (
    Hobject Image,
    Hobject *EdgeAmplitude,
    const HTuple &FilterType,
    const HTuple &Size
)
HImage HImage::SobelAmp (
    const HTuple &FilterType,
    const HTuple &Size
) const
HImageArray HImageArray::SobelAmp (
    const HTuple &FilterType,
    const HTuple &Size
) const

Detect edges (amplitude) using the Sobel operator.

::sobel_amp 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) 'sum_abs' (|a| + |b|) / 2 'thin_sum_abs' (thin(|a|) + thin(|b|)) / 2 'thin_max_abs' max(thin(|a|),thin(|b|)) 'x' b 'y' a Here, thin(x) is equal to x for a vertical maximum (mask A) and a horizontal maximum (mask B), respectively, and 0 otherwise. Thus, for 'thin_sum_abs' and 'thin_max_abs' the gradient image is thinned. In the case of byte-images for 'x' and 'y' an int1-image is returned as result. 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. Therefore,
     sobel_amp(I:E:FilterType,S)

for Size > 3 is equivalent to

     gauss_image(I:G:S-2) >
     sobel_amp(G:E:FilterType,3).


Parameters

Image (input_object)
(multichannel-)image(-array) -> Hobject: HImage(Array) ( byte / int2 )
Input image.

EdgeAmplitude (output_object)
(multichannel-)image(-array) -> Hobject * : HImage(Array) ( int1 / int2 )
Edge amplitude (gradient magnitude) image.

FilterType (input_control)
multichannel-string -> HTuple.char *
Filter type.
Default value: 'sum_abs'
List of values: 'sum_abs', 'thin_sum_abs', 'thin_max_abs', 'sum_sqrt', 'x', 'y'

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


Example
read_image(&Image,"fabrik");
sobel_amp(Image,&Amp,"sum_abs",3);
threshold(Amp,&Edg,128.0,255.0);

Result

::sobel_amp returns 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.


Possible Predecessors

::gauss_image, ::mean_image, ::anisotrope_diff, ::sigma_image


Possible Successors

::threshold, ::nonmax_suppression_amp, ::gray_skeleton


Alternatives

::frei_amp, ::roberts, ::kirsch_amp, ::prewitt_amp, ::robinson_amp


See also

::laplace, ::highpass_image, ::bandpass_image


Module

Image filters



Copyright © 1996-2002 MVTec Software GmbH