Skip to content

kirsch_dirKirschDirKirschDirkirsch_dirkirsch_dir🔗

Short description🔗

kirsch_dirKirschDirKirschDirkirsch_dirkirsch_dir — Detect edges (amplitude and direction) using the Kirsch operator.

Signature🔗

kirsch_dir( image Image, out image ImageEdgeAmp, out image ImageEdgeDir )void KirschDir( const HObject& Image, HObject* ImageEdgeAmp, HObject* ImageEdgeDir )static void HOperatorSet.KirschDir( HObject image, out HObject imageEdgeAmp, out HObject imageEdgeDir )def kirsch_dir( image: HObject ) -> Tuple[HObject, HObject]

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

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

HImage HImage::KirschDir( HImage* ImageEdgeDir ) const

HImage HImage.KirschDir( out HImage imageEdgeDir )

Description🔗

kirsch_dirKirschDir 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:

        -3  -3   5       -3   5   5      5   5   5       5   5  -3
        -3   0   5       -3   0   5     -3   0  -3       5   0  -3
        -3  -3   5       -3  -3  -3     -3  -3  -3      -3  -3  -3

         5  -3  -3       -3  -3  -3     -3  -3  -3      -3  -3  -3
         5   0  -3        5   0  -3     -3   0  -3      -3   0   5
         5  -3  -3        5   5  -3      5   5   5      -3   5   5

The result image contains the maximum response of all masks. The edge directions are returned in ImageEdgeDirimageEdgeDirimage_edge_dir, and are stored as \(x / 2\). They correspond to the direction of the mask yielding the maximum response.

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.

Execution information🔗

Execution information
  • Multithreading type: reentrant (runs in parallel with non-exclusive operators).

  • Multithreading scope: global (may be called from any thread).

  • Automatically parallelized on tuple level.

  • Automatically parallelized on channel level.

  • Automatically parallelized on domain level.

Parameters🔗

Imageimageimage (input_object) (multichannel-)image(-array) → object (byte / int2 / uint2)HObject (byte / int2 / uint2)HImage (byte / int2 / uint2)HObject (byte / int2 / uint2)Hobject (byte / int2 / uint2)

Input image.

ImageEdgeAmpimageEdgeAmpimage_edge_amp (output_object) (multichannel-)image(-array) → object (byte / int2 / uint2)HObject (byte / int2 / uint2)HImage (byte / int2 / uint2)HObject (byte / int2 / uint2)Hobject * (byte / int2 / uint2)

Edge amplitude (gradient magnitude) image.

ImageEdgeDirimageEdgeDirimage_edge_dir (output_object) (multichannel-)image(-array) → object (direction)HObject (direction)HImage (direction)HObject (direction)Hobject * (direction)

Edge direction image.

Example🔗

(HDevelop)

read_image(Image,'fabrik')
kirsch_dir(Image,Kirsch_dirA,Kirsch_dirD)
threshold(Kirsch_dirA,Res,128,255)
(C)
read_image(&Image,"fabrik")\;
kirsch_dir(Image,&Kirsch_dirA,&Kirsch_dirD)\;
threshold(Kirsch_dirA,&Res,128,255)\;

Result🔗

kirsch_dirKirschDir always returns 2 (H_MSG_TRUE). If the input is empty the behavior can be set via set_system('no_object_result',<Result>). If necessary, an exception is raised.

Combinations with other operators🔗

Combinations

Possible predecessors

binomial_filterBinomialFilter, gauss_filterGaussFilter, sigma_imageSigmaImage, median_imageMedianImage, smooth_imageSmoothImage

Possible successors

hysteresis_thresholdHysteresisThreshold, thresholdThreshold, gray_skeletonGraySkeleton, nonmax_suppression_dirNonmaxSuppressionDir, close_edgesCloseEdges, close_edges_lengthCloseEdgesLength

Alternatives

edges_imageEdgesImage, sobel_dirSobelDir, robinson_dirRobinsonDir, prewitt_dirPrewittDir, frei_dirFreiDir

See also

bandpass_imageBandpassImage, laplace_of_gaussLaplaceOfGauss

Module🔗

Foundation