detect_edge_segmentsT_detect_edge_segmentsDetectEdgeSegmentsDetectEdgeSegmentsdetect_edge_segments检测边缘段(算子)

名称

detect_edge_segmentsT_detect_edge_segmentsDetectEdgeSegmentsDetectEdgeSegmentsdetect_edge_segments — 检测直边段。

签名

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]]

描述

detect_edge_segmentsdetect_edge_segmentsDetectEdgeSegmentsDetectEdgeSegmentsDetectEdgeSegmentsdetect_edge_segments 用于在灰度图像 ImageImageImageImageimageimage 中检测直线边缘段。提取出的边缘段将作为线段返回,包含起点BeginRowBeginRowBeginRowBeginRowbeginRowbegin_row,BeginColBeginColBeginColBeginColbeginColbegin_col) 和终点 (EndRowEndRowEndRowEndRowendRowend_row,EndColEndColEndColEndColendColend_col)。边缘检测基于索贝尔滤波器,使用 'sum_abs'"sum_abs""sum_abs""sum_abs""sum_abs""sum_abs" 作为参数,并以 SobelSizeSobelSizeSobelSizeSobelSizesobelSizesobel_size 作为滤波器掩模大小(参见 sobel_ampsobel_ampSobelAmpSobelAmpSobelAmpsobel_amp)。仅当像素的滤波响应值大于 MinAmplitudeMinAmplitudeMinAmplitudeMinAmplitudeminAmplitudemin_amplitude 时,才会被用作边缘点的候选点。这些经过阈值处理的边缘点会经过细化并分割成直线段。由于技术原因,多条边缘交汇处的边缘点会被丢失。因此,detect_edge_segmentsdetect_edge_segmentsDetectEdgeSegmentsDetectEdgeSegmentsDetectEdgeSegmentsdetect_edge_segments 通常不会返回封闭的对象轮廓。参数 MaxDistanceMaxDistanceMaxDistanceMaxDistancemaxDistancemax_distance 控制边缘点与其近似线之间的最大允许距离。出于效率考虑,使用坐标差的绝对值之和代替欧几里得距离。MinLengthMinLengthMinLengthMinLengthminLengthmin_length 控制线段的最小长度。短于 MinLengthMinLengthMinLengthMinLengthminLengthmin_length 的线段不会被返回。

注意

请注意,若使用域缩减后的图像作为输入,滤波器算子可能会返回意外结果。请参阅 滤波器 一章

执行信息

参数

ImageImageImageImageimageimage (输入对象)  (multichannel-)image(-array) objectHImageHObjectHImageHobject (byte)

输入图像。

SobelSizeSobelSizeSobelSizeSobelSizesobelSizesobel_size (输入控制)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

索贝尔算子的掩模大小。

默认值: 5

值列表: 3, 5, 7, 9, 11, 13

MinAmplitudeMinAmplitudeMinAmplitudeMinAmplitudeminAmplitudemin_amplitude (输入控制)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

最小边缘强度。

默认值: 32

建议值: 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 80, 90, 100, 110

值范围: 1 ≤ MinAmplitude MinAmplitude MinAmplitude MinAmplitude minAmplitude min_amplitude ≤ 255

最小增量: 1

建议增量: 1

MaxDistanceMaxDistanceMaxDistanceMaxDistancemaxDistancemax_distance (输入控制)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

逼近线与其原始边缘之间的最大距离。

默认值: 3

建议值: 2, 3, 4, 5, 6, 7, 8

值范围: 0 ≤ MaxDistance MaxDistance MaxDistance MaxDistance maxDistance max_distance

最小增量: 1

建议增量: 1

MinLengthMinLengthMinLengthMinLengthminLengthmin_length (输入控制)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

所得线段的最短长度。

默认值: 10

建议值: 3, 5, 7, 9, 11, 13, 16, 20

值范围: 1 ≤ MinLength MinLength MinLength MinLength minLength min_length

最小增量: 1

建议增量: 1

BeginRowBeginRowBeginRowBeginRowbeginRowbegin_row (输出控制)  line.begin.y-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

线段起点的行坐标。

BeginColBeginColBeginColBeginColbeginColbegin_col (输出控制)  line.begin.x-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

线段起点的列坐标。

EndRowEndRowEndRowEndRowendRowend_row (输出控制)  line.end.y-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

线段终点的行坐标。

EndColEndColEndColEndColendColend_col (输出控制)  line.end.x-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

线段终点的列坐标。

示例(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);

结果

detect_edge_segmentsdetect_edge_segmentsDetectEdgeSegmentsDetectEdgeSegmentsDetectEdgeSegmentsdetect_edge_segments 在所有参数正确时返回 2 (H_MSG_TRUE)。当输入为空时,可设置行为通过算子 set_system('no_object_result',<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>)。如有必要,则抛出异常。

可能的前趋

sigma_imagesigma_imageSigmaImageSigmaImageSigmaImagesigma_image, median_imagemedian_imageMedianImageMedianImageMedianImagemedian_image

可能的后继

partition_linespartition_linesPartitionLinesPartitionLinesPartitionLinespartition_lines, line_positionline_positionLinePositionLinePositionLinePositionline_position, line_orientationline_orientationLineOrientationLineOrientationLineOrientationline_orientation

替代

sobel_ampsobel_ampSobelAmpSobelAmpSobelAmpsobel_amp, thresholdthresholdThresholdThresholdThresholdthreshold, skeletonskeletonSkeletonSkeletonSkeletonskeleton

模块

基础