lines_facetlines_facetLinesFacetLinesFacet (Operator)

Name

lines_facetlines_facetLinesFacetLinesFacet — Erkennen von Linien mit dem Facet-Modell.

Signatur

lines_facet(Image : Lines : MaskSize, Low, High, LightDark : )

Herror lines_facet(const Hobject Image, Hobject* Lines, const Hlong MaskSize, double Low, double High, const char* LightDark)

Herror T_lines_facet(const Hobject Image, Hobject* Lines, const Htuple MaskSize, const Htuple Low, const Htuple High, const Htuple LightDark)

void LinesFacet(const HObject& Image, HObject* Lines, const HTuple& MaskSize, const HTuple& Low, const HTuple& High, const HTuple& LightDark)

HXLDCont HImage::LinesFacet(Hlong MaskSize, const HTuple& Low, const HTuple& High, const HString& LightDark) const

HXLDCont HImage::LinesFacet(Hlong MaskSize, double Low, double High, const HString& LightDark) const

HXLDCont HImage::LinesFacet(Hlong MaskSize, double Low, double High, const char* LightDark) const

HXLDCont HImage::LinesFacet(Hlong MaskSize, double Low, double High, const wchar_t* LightDark) const   (Nur Windows)

static void HOperatorSet.LinesFacet(HObject image, out HObject lines, HTuple maskSize, HTuple low, HTuple high, HTuple lightDark)

HXLDCont HImage.LinesFacet(int maskSize, HTuple low, HTuple high, string lightDark)

HXLDCont HImage.LinesFacet(int maskSize, double low, double high, string lightDark)

Beschreibung

Mit lines_facetlines_facetLinesFacetLinesFacetLinesFacet können Linien (gekrümmt-lineare Strukturen) aus einem Bild ImageImageImageImageimage extrahiert werden. Die extrahierten Linien werden in LinesLinesLinesLineslines als subpixel-genaue XLD-Konturen zurückgegeben. Der Parameter LightDarkLightDarkLightDarkLightDarklightDark bestimmt, ob helle oder dunkle Linien extrahiert werden sollen.

Zur Extraktion werden in jedem Punkt des Bildes unter Verwendung des Facet-Modells die Parameter eines quadratischen Polynoms in x und y als Least-Squares-Anpassung an die Bilddaten berechnet. Der Parameter MaskSizeMaskSizeMaskSizeMaskSizemaskSize bestimmt dabei die Größe des Bereichs, über den angepasst wird. Große Werte für MaskSizeMaskSizeMaskSizeMaskSizemaskSize sorgen für eine stärkere Glättung der Eingabedaten, können aber zu ungenauerer Lokalisation der Linien und zu stark schwingenden Linien führen. Mit Hilfe der Parameter des Polynoms wird in jedem Bildpunkt die Linienrichtung bestimmt. Bildpunkte, die ein lokales Maximum in der zweiten Richtungsableitung senkrecht zur Linienrichtung besitzen, werden als Linienpunkte markiert. Die gefundenen Linienpunkte werden hierauf zu Konturen zusammengefasst. Dabei werden Punkte, die eine zweite Richtungsableitung, die größer als HighHighHighHighhigh ist, sofort als sichere Linienpunkte akzeptiert. Punkte, deren zweite Ableitung kleiner als LowLowLowLowlow ist, werden sofort verworfen. Alle Punkte, die eine zweite Ableitung zwischen diesen zwei Werten besitzen, werden akzeptiert, wenn sie durch einen Pfad mit sicheren Punkten verbunden sind. Dies ist ähnlich zu einer Hysterese-Schwellenwert-Operation mit unbegrenzter Pfadlänge (siehe hysteresis_thresholdhysteresis_thresholdHysteresisThresholdHysteresisThresholdHysteresisThreshold). Allerdings wird diese Funktion nicht benutzt, da sonst keine subpixel-genaue Extraktion möglich wäre.

Für die Wahl der Schwellenwerte gilt sinngemäß das bei der Beschreibung von lines_gausslines_gaussLinesGaussLinesGaussLinesGauss gesagte. Ein Wert von Sigma = 1.5 dort entspricht in etwa einer Maskengröße MaskSizeMaskSizeMaskSizeMaskSizemaskSize von 5 hier.

Die extrahierten Linien werden in einer topologisch „sauberen“ Struktur in LinesLinesLinesLineslines zurückgeliefert. Das bedeutet, dass die Linien an Kreuzungspunkten sauber aufgetrennt werden.

lines_facetlines_facetLinesFacetLinesFacetLinesFacet definiert folgende Attribute für jeden Linienpunkt:

'angle'"angle""angle""angle""angle" Der Winkel der Richtung senkrecht zur Linie
'response'"response""response""response""response" Die Größe der zweiten Ableitung

Diese Attribute können mit get_contour_attrib_xldget_contour_attrib_xldGetContourAttribXldGetContourAttribXldGetContourAttribXld ausgelesen werden. Weitere Informationen zu Konturattributen können der Referenz von get_contour_attrib_xldget_contour_attrib_xldGetContourAttribXldGetContourAttribXldGetContourAttribXld entnommen werden.

Achtung

Je kleiner der Einzugsbereich MaskSizeMaskSizeMaskSizeMaskSizemaskSize des Operators gewählt wird, desto mehr kurze, zerstückelte Linien werden gefunden. Dadurch kann die Verarbeitungszeit beträchtlich ansteigen.

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

ImageImageImageImageimage (input_object)  singlechannelimage objectHImageHImageHobject (byte / int1 / int2 / uint2 / int4 / real)

Eingabebild.

LinesLinesLinesLineslines (output_object)  xld_cont-array objectHXLDContHXLDContHobject *

Extrahierte Linien.

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

Größe der zu verwendenden Maske zur Bestimmung der Parameter des Facet-Modells.

Defaultwert: 5

Werteliste: 3, 5, 7, 9, 11

LowLowLowLowlow (input_control)  number HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Untere Schwelle für Hysterese-Schwellenwertoperation.

Defaultwert: 3

Wertevorschläge: 0, 0.5, 1, 2, 3, 4, 5, 8, 10

Typischer Wertebereich: 0 ≤ Low Low Low Low low ≤ 20

Empfohlene Schrittweite: 0.5

Restriktion: Low >= 0

HighHighHighHighhigh (input_control)  number HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Obere Schwelle für Hysterese-Schwellenwertoperation.

Defaultwert: 8

Wertevorschläge: 0, 0.5, 1, 2, 3, 4, 5, 8, 10, 12, 15, 18, 20, 25

Typischer Wertebereich: 0 ≤ High High High High high ≤ 35

Empfohlene Schrittweite: 0.5

Restriktion: High >= 0 && High >= Low

LightDarkLightDarkLightDarkLightDarklightDark (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Helle oder dunkle Linien extrahieren.

Defaultwert: 'light' "light" "light" "light" "light"

Werteliste: 'dark'"dark""dark""dark""dark", 'light'"light""light""light""light"

Beispiel (HDevelop)

* Detection of lines in an aerial image
read_image(Image,'mreut4_3')
lines_facet(Image,Lines,5,3,8,'light')
dev_display(Lines)

Beispiel (C)

/* Detection of lines in an aerial image */
read_image(&Image,"mreut4_3");
lines_facet(Image:&Lines:5,3,8,"light");
disp_xld(Lines,WindowHandle);

Beispiel (HDevelop)

* Detection of lines in an aerial image
read_image(Image,'mreut4_3')
lines_facet(Image,Lines,5,3,8,'light')
dev_display(Lines)

Beispiel (HDevelop)

* Detection of lines in an aerial image
read_image(Image,'mreut4_3')
lines_facet(Image,Lines,5,3,8,'light')
dev_display(Lines)

Beispiel (HDevelop)

* Detection of lines in an aerial image
read_image(Image,'mreut4_3')
lines_facet(Image,Lines,5,3,8,'light')
dev_display(Lines)

Komplexität

Sei A die Anzahl von Pixeln in der Region von ImageImageImageImageimage. Dann ist die Laufzeitkomplexität O(A*MaskSize).

Der Bedarf an temporären Speicher ist abhängig von der Höhe H der Region von ImageImageImageImageimage und der Breite W von ImageImageImageImageimage. Sei S = W*H, dann benötigt lines_facetlines_facetLinesFacetLinesFacetLinesFacet mindestens 55*S Bytes an temporärem Speicher bei der Ausführung.

Ergebnis

Sind die Parameterwerte korrekt und tritt kein Fehler während der Berechnung auf, liefert lines_facetlines_facetLinesFacetLinesFacetLinesFacet 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.

Nachfolger

gen_polygons_xldgen_polygons_xldGenPolygonsXldGenPolygonsXldGenPolygonsXld

Alternativen

lines_gausslines_gaussLinesGaussLinesGaussLinesGauss

Siehe auch

bandpass_imagebandpass_imageBandpassImageBandpassImageBandpassImage, dyn_thresholddyn_thresholdDynThresholdDynThresholdDynThreshold, topographic_sketchtopographic_sketchTopographicSketchTopographicSketchTopographicSketch

Literatur

A. Busch: „Fast Recognition of Lines in Digital Images Without User-Supplied Parameters“. In H. Ebner, C. Heipke, K.Eder, eds., „Spatial Information from Digital Photogrammetry and Computer Vision“, International Archives of Photogrammetry and Remote Sensing, Vol. 30, Part 3/1, pp. 91-97, 1994.

Modul

2D Metrology