ClassesClassesClassesClasses | | | | Operators

sobel_dirsobel_dirSobelDirsobel_dirSobelDirSobelDir (Operator)

Name

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

Signature

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

Herror sobel_dir(const Hobject Image, Hobject* EdgeAmplitude, Hobject* EdgeDirection, const char* FilterType, const Hlong Size)

Herror T_sobel_dir(const Hobject Image, Hobject* EdgeAmplitude, Hobject* EdgeDirection, const Htuple FilterType, const Htuple Size)

Herror sobel_dir(Hobject Image, Hobject* EdgeAmplitude, Hobject* EdgeDirection, const HTuple& FilterType, const HTuple& Size)

HImage HImage::SobelDir(HImage* EdgeDirection, const HTuple& FilterType, const HTuple& Size) const

HImageArray HImageArray::SobelDir(HImageArray* EdgeDirection, const HTuple& FilterType, const HTuple& Size) const

void SobelDir(const HObject& Image, HObject* EdgeAmplitude, HObject* EdgeDirection, const HTuple& FilterType, const HTuple& Size)

HImage HImage::SobelDir(HImage* EdgeDirection, const HString& FilterType, const HTuple& Size) const

HImage HImage::SobelDir(HImage* EdgeDirection, const HString& FilterType, Hlong Size) const

HImage HImage::SobelDir(HImage* EdgeDirection, const char* FilterType, Hlong Size) const

void HOperatorSetX.SobelDir(
[in] IHUntypedObjectX* Image, [out] IHUntypedObjectX*EdgeAmplitude, [out] IHUntypedObjectX*EdgeDirection, [in] VARIANT FilterType, [in] VARIANT Size)

IHImageX* HImageX.SobelDir(
[out] IHImageX*EdgeDirection, [in] BSTR FilterType, [in] VARIANT Size)

static void HOperatorSet.SobelDir(HObject image, out HObject edgeAmplitude, out HObject edgeDirection, HTuple filterType, HTuple size)

HImage HImage.SobelDir(out HImage edgeDirection, string filterType, HTuple size)

HImage HImage.SobelDir(out HImage edgeDirection, string filterType, int size)

Description

sobel_dirsobel_dirSobelDirsobel_dirSobelDirSobelDir 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 and b denote the results of convolving an image with A and B for one particular pixel.)
For a Sobel operator with size 3x3, the corresponding filters A and B are applied directly, while for larger filter sizes the input image is first smoothed using a Gaussian filter (see gauss_imagegauss_imageGaussImagegauss_imageGaussImageGaussImage) or a binomial filter (see binomial_filterbinomial_filterBinomialFilterbinomial_filterBinomialFilterBinomialFilter) of size SizeSizeSizeSizeSizesize-2. The Gaussian filter is selected for the above values of FilterTypeFilterTypeFilterTypeFilterTypeFilterTypefilterType. Here, SizeSizeSizeSizeSizesize = 5, 7, 9, 11, or 13 must be used. The binomial filter is selected by appending '_binomial'"_binomial""_binomial""_binomial""_binomial""_binomial" to the above values of FilterTypeFilterTypeFilterTypeFilterTypeFilterTypefilterType. Here, SizeSizeSizeSizeSizesize can be selected between 5 and 39. Furthermore, it is possible to select different amounts of smoothing the column and row direction by passing two values in SizeSizeSizeSizeSizesize. Here, the first value of SizeSizeSizeSizeSizesize corresponds to the mask width (smoothing in the column direction), while the second value corresponds to the mask height (smoothing in the row direction) of the binomial filter. The binomial filter can only be used for images of type byte, uint2 and real. 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)

or to

     scale_image(I,F,2,0)
     binomial_filter(F,G,S[0]-2,S[1]-2)
     sobel_dir(G,Amp,Dir,FilterType,3).
The edge directions are returned in EdgeDirectionEdgeDirectionEdgeDirectionEdgeDirectionEdgeDirectionedgeDirection, and are stored in 2-degree steps, i.e., an edge direction of x degrees in mathematically positive sense and 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 denote the image gradient. Then the following edge directions are returned as r/2:
Points with edge amplitude 0 are assigned the edge direction 255 (undefined direction).

sobel_ampsobel_ampSobelAmpsobel_ampSobelAmpSobelAmp can be executed on OpenCL devices. Note that when using gaussian filtering for SizeSizeSizeSizeSizesize > 3, the results can vary from the CPU implementation.

Attention

Note that filter operators may return unexpected results if an image with a reduced domain is used as input. Please refer to the chapter Filters.

Parallelization

Parameters

ImageImageImageImageImageimage (input_object)  (multichannel-)image(-array) objectHImageHImageHImageHImageXHobject (byte / int2 / uint2 / real)

Input image.

EdgeAmplitudeEdgeAmplitudeEdgeAmplitudeEdgeAmplitudeEdgeAmplitudeedgeAmplitude (output_object)  (multichannel-)image(-array) objectHImageHImageHImageHImageXHobject * (byte / int2 / uint2 / real)

Edge amplitude (gradient magnitude) image.

EdgeDirectionEdgeDirectionEdgeDirectionEdgeDirectionEdgeDirectionedgeDirection (output_object)  (multichannel-)image(-array) objectHImageHImageHImageHImageXHobject * (direction)

Edge direction image.

FilterTypeFilterTypeFilterTypeFilterTypeFilterTypefilterType (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Filter type.

Default value: 'sum_abs' "sum_abs" "sum_abs" "sum_abs" "sum_abs" "sum_abs"

List of values: 'sum_abs'"sum_abs""sum_abs""sum_abs""sum_abs""sum_abs", 'sum_abs_binomial'"sum_abs_binomial""sum_abs_binomial""sum_abs_binomial""sum_abs_binomial""sum_abs_binomial", 'sum_sqrt'"sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt", 'sum_sqrt_binomial'"sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial"

List of values (for compute devices): 'sum_abs'"sum_abs""sum_abs""sum_abs""sum_abs""sum_abs", 'sum_sqrt'"sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt", 'sum_abs_binomial'"sum_abs_binomial""sum_abs_binomial""sum_abs_binomial""sum_abs_binomial""sum_abs_binomial", 'sum_sqrt_binomial'"sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial"

SizeSizeSizeSizeSizesize (input_control)  integer(-array) HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Size of filter mask.

Default value: 3

List of values: 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39

Example (HDevelop)

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

Example (C)

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

Example (HDevelop)

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

Example (HDevelop)

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

Example (HDevelop)

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

Example (HDevelop)

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

Result

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

Possible Predecessors

binomial_filterbinomial_filterBinomialFilterbinomial_filterBinomialFilterBinomialFilter, gauss_filtergauss_filterGaussFiltergauss_filterGaussFilterGaussFilter, mean_imagemean_imageMeanImagemean_imageMeanImageMeanImage, anisotropic_diffusionanisotropic_diffusionAnisotropicDiffusionanisotropic_diffusionAnisotropicDiffusionAnisotropicDiffusion, sigma_imagesigma_imageSigmaImagesigma_imageSigmaImageSigmaImage

Possible Successors

nonmax_suppression_dirnonmax_suppression_dirNonmaxSuppressionDirnonmax_suppression_dirNonmaxSuppressionDirNonmaxSuppressionDir, hysteresis_thresholdhysteresis_thresholdHysteresisThresholdhysteresis_thresholdHysteresisThresholdHysteresisThreshold, thresholdthresholdThresholdthresholdThresholdThreshold

Alternatives

edges_imageedges_imageEdgesImageedges_imageEdgesImageEdgesImage, frei_dirfrei_dirFreiDirfrei_dirFreiDirFreiDir, kirsch_dirkirsch_dirKirschDirkirsch_dirKirschDirKirschDir, prewitt_dirprewitt_dirPrewittDirprewitt_dirPrewittDirPrewittDir, robinson_dirrobinson_dirRobinsonDirrobinson_dirRobinsonDirRobinsonDir

See also

robertsrobertsRobertsrobertsRobertsRoberts, laplacelaplaceLaplacelaplaceLaplaceLaplace, highpass_imagehighpass_imageHighpassImagehighpass_imageHighpassImageHighpassImage, bandpass_imagebandpass_imageBandpassImagebandpass_imageBandpassImageBandpassImage

Module

Foundation


ClassesClassesClassesClasses | | | | Operators