close_edges_lengthclose_edges_lengthCloseEdgesLengthCloseEdgesLengthclose_edges_length闭合边缘长度(算子)

名称

close_edges_lengthclose_edges_lengthCloseEdgesLengthCloseEdgesLengthclose_edges_length — 使用边缘振幅图像闭合边缘间隙。

签名

close_edges_length(Edges, Gradient : ClosedEdges : MinAmplitude, MaxGapLength : )

Herror close_edges_length(const Hobject Edges, const Hobject Gradient, Hobject* ClosedEdges, const Hlong MinAmplitude, const Hlong MaxGapLength)

Herror T_close_edges_length(const Hobject Edges, const Hobject Gradient, Hobject* ClosedEdges, const Htuple MinAmplitude, const Htuple MaxGapLength)

void CloseEdgesLength(const HObject& Edges, const HObject& Gradient, HObject* ClosedEdges, const HTuple& MinAmplitude, const HTuple& MaxGapLength)

HRegion HRegion::CloseEdgesLength(const HImage& Gradient, Hlong MinAmplitude, Hlong MaxGapLength) const

static void HOperatorSet.CloseEdgesLength(HObject edges, HObject gradient, out HObject closedEdges, HTuple minAmplitude, HTuple maxGapLength)

HRegion HRegion.CloseEdgesLength(HImage gradient, int minAmplitude, int maxGapLength)

def close_edges_length(edges: HObject, gradient: HObject, min_amplitude: int, max_gap_length: int) -> HObject

描述

close_edges_lengthclose_edges_lengthCloseEdgesLengthCloseEdgesLengthCloseEdgesLengthclose_edges_length 用于闭合边缘检测器输出中的间隙,从而试图生成完整的对象轮廓。该算子期望输入由典型边缘算子(如 edges_imageedges_imageEdgesImageEdgesImageEdgesImageedges_imagesobel_ampsobel_ampSobelAmpSobelAmpSobelAmpsobel_amp)返回的边缘(EdgesEdgesEdgesEdgesedgesedges)和幅度图像(GradientGradientGradientGradientgradientgradient)。

轮廓闭合分为两个步骤:首先,闭合输入轮廓中宽度为一个像素的间隙,并消除孤立点。随后,通过添加边缘点将开放轮廓延伸至最多 MaxGapLengthMaxGapLengthMaxGapLengthMaxGapLengthmaxGapLengthmax_gap_length 个点,直至轮廓闭合或无法再找到更多显著边缘点为止。若梯度值大于 MinAmplitudeMinAmplitudeMinAmplitudeMinAmplitudeminAmplitudemin_amplitude ,则该梯度被视为显著。作为潜在新边缘点的邻点包括:轮廓方向上的点及其 8 邻域内的两个相邻点。对于每个点,计算其梯度与该点三个可能邻点的最大梯度之和(前瞻长度为 1)。最终选取和最大的点作为新的边缘点。

注意

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

执行信息

参数

EdgesEdgesEdgesEdgesedgesedges (输入对象)  region(-array) objectHRegionHObjectHRegionHobject

包含单像素厚边缘的区域。

GradientGradientGradientGradientgradientgradient (输入对象)  singlechannelimage objectHImageHObjectHImageHobject (byte / uint2)

边缘幅度(梯度)图像。

ClosedEdgesClosedEdgesClosedEdgesClosedEdgesclosedEdgesclosed_edges (输出对象)  region(-array) objectHRegionHObjectHRegionHobject *

包含闭合边缘的区域。

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

最小边缘振幅。

默认值: 16

建议值: 5, 8, 10, 12, 16, 20, 25, 30, 40, 50

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

最小增量: 1

建议增量: 1

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

边缘被延伸的最大点数。

默认值: 3

建议值: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20, 30, 40, 50, 70, 100

值范围: 1 ≤ MaxGapLength MaxGapLength MaxGapLength MaxGapLength maxGapLength max_gap_length ≤ 127

最小增量: 1

建议增量: 1

示例(C)

sobel_amp(Image,&EdgeAmp,"sum_abs",5);
threshold(EdgeAmp,&EdgeRegion,40.0,255.0);
skeleton(EdgeRegion,&ThinEdge);
close_edges_length(ThinEdge,EdgeAmp,&CloseEdges,15,3);

结果

close_edges_lengthclose_edges_lengthCloseEdgesLengthCloseEdgesLengthCloseEdgesLengthclose_edges_length 在所有参数正确时返回 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>)。如有必要,则抛出异常。

可能的前趋

edges_imageedges_imageEdgesImageEdgesImageEdgesImageedges_image, sobel_ampsobel_ampSobelAmpSobelAmpSobelAmpsobel_amp, thresholdthresholdThresholdThresholdThresholdthreshold, skeletonskeletonSkeletonSkeletonSkeletonskeleton

替代

close_edgesclose_edgesCloseEdgesCloseEdgesCloseEdgesclose_edges, dilation1dilation1Dilation1Dilation1Dilation1dilation1, closingclosingClosingClosingClosingclosing

参考文献

M. Üsbeck: “Untersuchungen zur echtzeitfähigen Segmentierung”; Studienarbeit, Bayerisches Forschungszentrum für Wissensbasierte Systeme (FORWISS), Erlangen, 1993.

模块

基础