detect_edge_segmentsT_detect_edge_segmentsDetectEdgeSegmentsDetectEdgeSegmentsdetect_edge_segments (Operator)

Name

detect_edge_segmentsT_detect_edge_segmentsDetectEdgeSegmentsDetectEdgeSegmentsdetect_edge_segments — Detect straight edge segments.

Signature

detect_edge_segments(Image : : SobelSize, MinAmplitude, MaxDistance, MinLength : BeginRow, BeginCol, EndRow, EndCol)

Herror T_detect_edge_segments(const Hobject Image, const Htuple SobelSize, const Htuple MinAmplitude, const Htuple MaxDistance, const Htuple MinLength, Htuple* BeginRow, Htuple* BeginCol, Htuple* EndRow, Htuple* EndCol)

void DetectEdgeSegments(const HObject& Image, const HTuple& SobelSize, const HTuple& MinAmplitude, const HTuple& MaxDistance, const HTuple& MinLength, HTuple* BeginRow, HTuple* BeginCol, HTuple* EndRow, HTuple* EndCol)

void HImage::DetectEdgeSegments(Hlong SobelSize, Hlong MinAmplitude, Hlong MaxDistance, Hlong MinLength, HTuple* BeginRow, HTuple* BeginCol, HTuple* EndRow, HTuple* EndCol) const

static void HOperatorSet.DetectEdgeSegments(HObject image, HTuple sobelSize, HTuple minAmplitude, HTuple maxDistance, HTuple minLength, out HTuple beginRow, out HTuple beginCol, out HTuple endRow, out HTuple endCol)

void HImage.DetectEdgeSegments(int sobelSize, int minAmplitude, int maxDistance, int minLength, out HTuple beginRow, out HTuple beginCol, out HTuple endRow, out HTuple endCol)

def detect_edge_segments(image: HObject, sobel_size: int, min_amplitude: int, max_distance: int, min_length: int) -> Tuple[Sequence[int], Sequence[int], Sequence[int], Sequence[int]]

Description

detect_edge_segmentsdetect_edge_segmentsDetectEdgeSegmentsDetectEdgeSegmentsdetect_edge_segments detects straight edge segments in the gray image ImageImageImageimageimage. The extracted edge segments are returned as line segments with start point (BeginRowBeginRowBeginRowbeginRowbegin_row,BeginColBeginColBeginColbeginColbegin_col) and end point (EndRowEndRowEndRowendRowend_row,EndColEndColEndColendColend_col). Edge detection is based on the Sobel filter, using 'sum_abs'"sum_abs""sum_abs""sum_abs""sum_abs" as parameter and SobelSizeSobelSizeSobelSizesobelSizesobel_size as the filter mask size (see sobel_ampsobel_ampSobelAmpSobelAmpsobel_amp). Only pixels with a filter response larger than MinAmplitudeMinAmplitudeMinAmplitudeminAmplitudemin_amplitude are used as candidates for edge points. These thresholded edge points are thinned and split into straight segments. Due to technical reasons, edge points in which several edges meet are lost. Therefore, detect_edge_segmentsdetect_edge_segmentsDetectEdgeSegmentsDetectEdgeSegmentsdetect_edge_segments usually does not return closed object contours. The parameter MaxDistanceMaxDistanceMaxDistancemaxDistancemax_distance controls the maximum allowed distance of an edge point to its approximating line. For efficiency reasons, the sum of the absolute values of the coordinate differences is used instead of the Euclidean distance. MinLengthMinLengthMinLengthminLengthmin_length controls the minimum length of the line segments. Lines shorter than MinLengthMinLengthMinLengthminLengthmin_length are not returned.

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

Parameters

ImageImageImageimageimage (input_object)  (multichannel-)image(-array) objectHImageHObjectHObjectHobject (byte)

Input image.

SobelSizeSobelSizeSobelSizesobelSizesobel_size (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Mask size of the Sobel operator.

Default: 5

List of values: 3, 5, 7, 9, 11, 13

MinAmplitudeMinAmplitudeMinAmplitudeminAmplitudemin_amplitude (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Minimum edge strength.

Default: 32

Suggested values: 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 80, 90, 100, 110

Value range: 1 ≤ MinAmplitude MinAmplitude MinAmplitude minAmplitude min_amplitude ≤ 255

Minimum increment: 1

Recommended increment: 1

MaxDistanceMaxDistanceMaxDistancemaxDistancemax_distance (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Maximum distance of the approximating line to its original edge.

Default: 3

Suggested values: 2, 3, 4, 5, 6, 7, 8

Value range: 0 ≤ MaxDistance MaxDistance MaxDistance maxDistance max_distance

Minimum increment: 1

Recommended increment: 1

MinLengthMinLengthMinLengthminLengthmin_length (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Minimum length of to resulting line segments.

Default: 10

Suggested values: 3, 5, 7, 9, 11, 13, 16, 20

Value range: 1 ≤ MinLength MinLength MinLength minLength min_length

Minimum increment: 1

Recommended increment: 1

BeginRowBeginRowBeginRowbeginRowbegin_row (output_control)  line.begin.y-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Row coordinate of the line segments' start points.

BeginColBeginColBeginColbeginColbegin_col (output_control)  line.begin.x-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Column coordinate of the line segments' start points.

EndRowEndRowEndRowendRowend_row (output_control)  line.end.y-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Row coordinate of the line segments' end points.

EndColEndColEndColendColend_col (output_control)  line.end.x-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Column coordinate of the line segments' end points.

Example (C)

Htuple  SobelSize,MinAmplitude,MaxDistance,MinLength;
Htuple  RowBegin,ColBegin,RowEnd,ColEnd;

create_tuple(&SobelSize,1);
set_i(SobelSize,5,0);
create_tuple(&MinAmplitude,1);
set_i(MinAmplitude,32,0);
create_tuple(&MaxDistance,1);
set_i(MaxDistance,3,0);
create_tuple(&MinLength,1);
set_i(MinLength,10,0);
T_detect_edge_segments(Image,SobelSize,MinAmplitude,MaxDistance,MinLength,
                &RowBegin,&ColBegin,&RowEnd,&ColEnd);

Result

detect_edge_segmentsdetect_edge_segmentsDetectEdgeSegmentsDetectEdgeSegmentsdetect_edge_segments 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>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>). If necessary, an exception is raised.

Possible Predecessors

sigma_imagesigma_imageSigmaImageSigmaImagesigma_image, median_imagemedian_imageMedianImageMedianImagemedian_image

Possible Successors

partition_linespartition_linesPartitionLinesPartitionLinespartition_lines, line_positionline_positionLinePositionLinePositionline_position, line_orientationline_orientationLineOrientationLineOrientationline_orientation

Alternatives

sobel_ampsobel_ampSobelAmpSobelAmpsobel_amp, thresholdthresholdThresholdThresholdthreshold, skeletonskeletonSkeletonSkeletonskeleton

Module

Foundation