lines_facet
— Erkennen von Linien mit dem Facet-Modell.
Mit lines_facet
können Linien (gekrümmt-lineare
Strukturen) aus einem Bild Image
extrahiert werden. Die
extrahierten Linien werden in Lines
als
subpixel-genaue XLD-Konturen zurückgegeben. Der Parameter
LightDark
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 MaskSize
bestimmt dabei die Größe des
Bereichs, über den angepasst wird. Große Werte für
MaskSize
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 High
ist, sofort als
sichere Linienpunkte akzeptiert. Punkte, deren zweite Ableitung
kleiner als Low
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_threshold
). 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_gauss
gesagte. Ein Wert von
Sigma = 1.5 dort entspricht in etwa einer Maskengröße
MaskSize
von 5 hier.
Die extrahierten Linien werden in einer topologisch „sauberen“
Struktur in Lines
zurückgeliefert. Das bedeutet, dass
die Linien an Kreuzungspunkten sauber aufgetrennt werden.
lines_facet
definiert folgende Attribute für jeden
Linienpunkt:
'angle' | Der Winkel der Richtung senkrecht zur Linie |
'response' | Die Größe der zweiten Ableitung |
Diese Attribute können mit get_contour_attrib_xld
ausgelesen werden. Weitere Informationen zu Konturattributen können der
Referenz von get_contour_attrib_xld
entnommen werden.
Je kleiner der Einzugsbereich MaskSize
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.
Image
(input_object) singlechannelimage →
object (byte / int1 / int2 / uint2 / int4 / real)
Eingabebild.
Lines
(output_object) xld_cont-array →
object
Extrahierte Linien.
MaskSize
(input_control) integer →
(integer)
Größe der zu verwendenden Maske zur Bestimmung der Parameter des Facet-Modells.
Defaultwert: 5
Werteliste: 3, 5, 7, 9, 11
Low
(input_control) number →
(real / integer)
Untere Schwelle für Hysterese-Schwellenwertoperation.
Defaultwert: 3
Wertevorschläge: 0, 0.5, 1, 2, 3, 4, 5, 8, 10
Typischer Wertebereich: 0
≤
Low
≤
20
Empfohlene Schrittweite: 0.5
Restriktion: Low >= 0
High
(input_control) number →
(real / integer)
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
≤
35
Empfohlene Schrittweite: 0.5
Restriktion: High >= 0 && High >= Low
LightDark
(input_control) string →
(string)
Helle oder dunkle Linien extrahieren.
Defaultwert: 'light'
Werteliste: 'dark' , 'light'
* Detection of lines in an aerial image read_image(Image,'mreut4_3') lines_facet(Image,Lines,5,3,8,'light') dev_display(Lines)
Sei A die Anzahl von Pixeln in der Region von Image
.
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 Image
und der Breite W von Image
. Sei
S = W*H, dann benötigt lines_facet
mindestens
55*S Bytes an temporärem Speicher bei der Ausführung.
Sind die Parameterwerte korrekt und tritt kein Fehler während der
Berechnung auf, liefert lines_facet
den Wert 2 (H_MSG_TRUE). Das
Verhalten bei leerer Eingabe (keine Eingabebilder vorhanden) lässt
sich mittels set_system(::'no_object_result',<Result>:)
festlegen. Gegebenenfalls wird eine Fehlerbehandlung
durchgeführt.
bandpass_image
,
dyn_threshold
,
topographic_sketch
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.
2D Metrology