ClassesClassesClassesClasses | | | | Operators

frei_dirfrei_dirFreiDirfrei_dirFreiDirFreiDir (Operator)

Name

frei_dirfrei_dirFreiDirfrei_dirFreiDirFreiDir — Detect edges (amplitude and direction) using the Frei-Chen operator.

Signature

frei_dir(Image : ImageEdgeAmp, ImageEdgeDir : : )

Herror frei_dir(const Hobject Image, Hobject* ImageEdgeAmp, Hobject* ImageEdgeDir)

Herror T_frei_dir(const Hobject Image, Hobject* ImageEdgeAmp, Hobject* ImageEdgeDir)

Herror frei_dir(Hobject Image, Hobject* ImageEdgeAmp, Hobject* ImageEdgeDir)

HImage HImage::FreiDir(HImage* ImageEdgeDir) const

HImageArray HImageArray::FreiDir(HImageArray* ImageEdgeDir) const

void FreiDir(const HObject& Image, HObject* ImageEdgeAmp, HObject* ImageEdgeDir)

HImage HImage::FreiDir(HImage* ImageEdgeDir) const

void HOperatorSetX.FreiDir(
[in] IHUntypedObjectX* Image, [out] IHUntypedObjectX*ImageEdgeAmp, [out] IHUntypedObjectX*ImageEdgeDir)

IHImageX* HImageX.FreiDir([out] IHImageX*ImageEdgeDir)

static void HOperatorSet.FreiDir(HObject image, out HObject imageEdgeAmp, out HObject imageEdgeDir)

HImage HImage.FreiDir(out HImage imageEdgeDir)

Description

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

  A =
         1       sqrt(2)        1
         0          0           0
        -1      -sqrt(2)       -1

  B =
         1          0          -1
       sqrt(2)      0       -sqrt(2)
         1          0          -1

The result image contains the maximum response of the masks A and B. The edge directions are returned in ImageEdgeDirImageEdgeDirImageEdgeDirImageEdgeDirImageEdgeDirimageEdgeDir, 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 [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).

Parallelization

Parameters

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

Input image.

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

Edge amplitude (gradient magnitude) image.

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

Edge direction image.

Example (HDevelop)

read_image(Image,'fabrik')
frei_dir(Image,Frei_dirA,Frei_dirD)
threshold(Frei_dirA,Res,128,255)

Example (C)

read_image(&Image,"fabrik");
frei_dir(Image,&Frei_dirA,&Frei_dirD);
threshold(Frei_dirA,&Res,128,255);

Example (HDevelop)

read_image(Image,'fabrik')
frei_dir(Image,Frei_dirA,Frei_dirD)
threshold(Frei_dirA,Res,128,255)

Example (HDevelop)

read_image(Image,'fabrik')
frei_dir(Image,Frei_dirA,Frei_dirD)
threshold(Frei_dirA,Res,128,255)

Example (HDevelop)

read_image(Image,'fabrik')
frei_dir(Image,Frei_dirA,Frei_dirD)
threshold(Frei_dirA,Res,128,255)

Example (HDevelop)

read_image(Image,'fabrik')
frei_dir(Image,Frei_dirA,Frei_dirD)
threshold(Frei_dirA,Res,128,255)

Result

frei_dirfrei_dirFreiDirfrei_dirFreiDirFreiDir always returns 2 (H_MSG_TRUE). If the input is empty the behaviour 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_imagegauss_imageGaussImagegauss_imageGaussImageGaussImage, sigma_imagesigma_imageSigmaImagesigma_imageSigmaImageSigmaImage, median_imagemedian_imageMedianImagemedian_imageMedianImageMedianImage, smooth_imagesmooth_imageSmoothImagesmooth_imageSmoothImageSmoothImage

Possible Successors

hysteresis_thresholdhysteresis_thresholdHysteresisThresholdhysteresis_thresholdHysteresisThresholdHysteresisThreshold, thresholdthresholdThresholdthresholdThresholdThreshold, gray_skeletongray_skeletonGraySkeletongray_skeletonGraySkeletonGraySkeleton, nonmax_suppression_dirnonmax_suppression_dirNonmaxSuppressionDirnonmax_suppression_dirNonmaxSuppressionDirNonmaxSuppressionDir, close_edgesclose_edgesCloseEdgesclose_edgesCloseEdgesCloseEdges, close_edges_lengthclose_edges_lengthCloseEdgesLengthclose_edges_lengthCloseEdgesLengthCloseEdgesLength

Alternatives

edges_imageedges_imageEdgesImageedges_imageEdgesImageEdgesImage, sobel_dirsobel_dirSobelDirsobel_dirSobelDirSobelDir, robinson_dirrobinson_dirRobinsonDirrobinson_dirRobinsonDirRobinsonDir, prewitt_dirprewitt_dirPrewittDirprewitt_dirPrewittDirPrewittDir, kirsch_dirkirsch_dirKirschDirkirsch_dirKirschDirKirschDir

See also

bandpass_imagebandpass_imageBandpassImagebandpass_imageBandpassImageBandpassImage, laplace_of_gausslaplace_of_gaussLaplaceOfGausslaplace_of_gaussLaplaceOfGaussLaplaceOfGauss

Module

Foundation


ClassesClassesClassesClasses | | | | Operators