close_edges_lengthclose_edges_lengthCloseEdgesLengthCloseEdgesLength (Operator)

Name

close_edges_lengthclose_edges_lengthCloseEdgesLengthCloseEdgesLength — Schließen von Kanten gemäß Amplitudenbild.

Signatur

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)

Beschreibung

close_edges_lengthclose_edges_lengthCloseEdgesLengthCloseEdgesLengthCloseEdgesLength schließt die von einem Kantendetektor gelieferten Kanten zu Konturen. Als Eingabe erwartet die Routine also neben den Kanten (EdgesEdgesEdgesEdgesedges) auch ein Amplitudenbild (GradientGradientGradientGradientgradient), wie es beispielsweise die Routinen edges_imageedges_imageEdgesImageEdgesImageEdgesImage oder sobel_ampsobel_ampSobelAmpSobelAmpSobelAmp als Ergebnis liefern.

Der Konturschluss erfolgt in zwei Schritten: Zunächst werden ein Pixel große Lücken in den Eingabekonturstücken geschlossen und isolierte Kantenpunkte eliminiert. Im zweiten Schritt werden dann offene Konturen um maximal MaxGapLengthMaxGapLengthMaxGapLengthMaxGapLengthmaxGapLength verlängert, bis entweder die Kontur geschlossen ist oder kein Fortsetzungspunkt mit ausreichend signifikantem Gradienten mehr gefunden werden kann. Ein Gradientenwert gilt dabei als signifikant, wenn er größer oder gleich MinAmplitudeMinAmplitudeMinAmplitudeMinAmplitudeminAmplitude ist. Kandidaten für den nächsten Fortsetzungspunkt sind der Nachbarpunkt in Richtung der Kontur (gemäß Gradient im aktuellen Endpunkt) sowie die beiden angrenzenden Nachbarpunkte (8er Nachbarschaft). Für jeden dieser drei potentiellen Fortsetzungspunkte wird die Summe aus dem eigenen Gradienten und dem maximalen Gradienten der nächsten drei möglichen Fortsetzungspunkte gebildet (look ahead der Länge 1). Der Punkt mit maximaler Summe wird dann als Fortsetzungspunkt ausgewählt.

Achtung

Beachten Sie, dass Filteroperatoren eventuell unerwartete Resultate ausgeben, wenn ein Bild mit einer reduzierten Domäne als Input übergeben wird. Weitere Informationen können im Kapitel Filter gefunden werden.

Ausführungsinformationen

Parameter

EdgesEdgesEdgesEdgesedges (input_object)  region(-array) objectHRegionHRegionHobject

Region mit ein Pixel breiten Kanten.

GradientGradientGradientGradientgradient (input_object)  singlechannelimage objectHImageHImageHobject (byte / uint2)

Kanten-Amplitudenbild.

ClosedEdgesClosedEdgesClosedEdgesClosedEdgesclosedEdges (output_object)  region(-array) objectHRegionHRegionHobject *

Ausgaberegion (geschlossene Kanten).

MinAmplitudeMinAmplitudeMinAmplitudeMinAmplitudeminAmplitude (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Mindestamplitude für Kanten.

Defaultwert: 16

Wertevorschläge: 5, 8, 10, 12, 16, 20, 25, 30, 40, 50

Typischer Wertebereich: 1 ≤ MinAmplitude MinAmplitude MinAmplitude MinAmplitude minAmplitude ≤ 255

Minimale Schrittweite: 1

Empfohlene Schrittweite: 1

Restriktion: MinAmplitude >= 0

MaxGapLengthMaxGapLengthMaxGapLengthMaxGapLengthmaxGapLength (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Maximale Anzahl von Punkten, um die die Kanten verlängert werden.

Defaultwert: 3

Wertevorschläge: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20, 30, 40, 50, 70, 100

Typischer Wertebereich: 1 ≤ MaxGapLength MaxGapLength MaxGapLength MaxGapLength maxGapLength ≤ 127

Minimale Schrittweite: 1

Empfohlene Schrittweite: 1

Restriktion: MaxGapLength > 0 && MaxGapLength <= 127

Beispiel (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);

Ergebnis

Sind die Parameterwerte korrekt, dann liefert close_edges_lengthclose_edges_lengthCloseEdgesLengthCloseEdgesLengthCloseEdgesLength den Wert 2 (H_MSG_TRUE). Das Verhalten bei leerer Eingabe (keine Eingabebilder vorhanden) lässt sich mittels 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>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

edges_imageedges_imageEdgesImageEdgesImageEdgesImage, sobel_ampsobel_ampSobelAmpSobelAmpSobelAmp, thresholdthresholdThresholdThresholdThreshold, skeletonskeletonSkeletonSkeletonSkeleton

Alternativen

close_edgesclose_edgesCloseEdgesCloseEdgesCloseEdges, dilation1dilation1Dilation1Dilation1Dilation1, closingclosingClosingClosingClosing

Literatur

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

Modul

Foundation