You are here: Start » AVL.NET » Function Reference » Image » Image Local Transforms » AVL.GradientDirAndPresenceImage

AVL.GradientDirAndPresenceImage

Computes an image of gradient directions mapped to the range from 1 to 255. Zero means "no edge".

Namespace:AvlNet
Assembly:AVL.NET.dll

Syntax

C++
C#
 
public static void GradientDirAndPresenceImage
(
	AvlNet.Image inImage,
	NullableRef<AvlNet.Region> inRoi,
	AvlNet.GradientMaskOperator inOperator,
	float inEdgeThreshold,
	AvlNet.AngleRange inAngleRange,
	AvlNet.Image outDirectionsImage
)

Parameters

Name Type Range Default Description
inImageAvlNet.ImageInput image.
inRoiAvlNet.NullableRef<AvlNet.Region>Range of output pixels to be computed. Default value: atl::NIL.
inOperatorAvlNet.GradientMaskOperatorDefines how the gradient is computed.
inEdgeThresholdfloat<0.01f, INF>10.0fMinimum edge magnitude (other pixels will be set to 0). Default value: 10.0f.
inAngleRangeAvlNet.AngleRange_0_360Range of output angles. Default value: _0_360.
outDirectionsImageAvlNet.Image

Description

The operation computes the angle of the intensity change direction at each pixel of the inImage. Firstly the selected inOperator is used to obtain two-dimensional gradient vector at each pixel. When this vector length exceeds inEdgeThreshold the angle of the vector is calculated, scaled and stored in outDirectionsImage pixel.

This operation always generates a single-channel image with the uint8 pixel type on the output, regardless of the input image format, with following pixel values:

  • When gradient length does not exceed threshold, the value of 0 is stored in pixel.
  • When gradient length exceeds threshold, its angle is scaled to range 0..255 and stored in pixel value.

When a pixel value is non-zero, one can restore the original angle with the formula:

	double angle = value * 360.0 / 255.0;   // if inAngleRange == _0_360
	double angle = value * 180.0 / 255.0;   // if inAngleRange == _0_180
	double angle = value * 90.0 / 255.0;    // if inAngleRange == _0_90

To measure the angular distance between two directions described by two non-zero pixel values, use the following formulas:

    int valueDif = abs(inValue1 - inValue2);
	double angleDif = (valueDif < 128 ? (double)valueDif : (255.0 - valueDif)) * 360.0 / 255.0;  // if inAngleRange == _0_360
	double angleDif = ((double)valueDif) * 180.0 / 255.0;                                        // if inAngleRange == _0_180
	double angleDif = ((double)valueDif) * 90.0 / 255.0;                                         // if inAngleRange == _0_90

Hardware Acceleration

This operation is optimized for SSE41 technology for pixels of type: UINT8.

This operation is optimized for AVX2 technology for pixels of type: UINT8.

This operation is optimized for NEON technology for pixels of type: UINT8.

This operation supports automatic parallelization for multicore and multiprocessor systems.

Hardware acceleration settings may be manipulated with Settings class.

Errors

List of possible exceptions:

Error type Description
DomainError Region exceeds an input image in GradientDirAndPresenceImage.

Function Overrides

See also