lines_color — Extraktion von Farblinien und deren Breite.
lines_color(Image : Lines : Sigma, Low, High, ExtractWidth, CompleteJunctions : )
lines_color extrahiert Farblinien aus dem Eingabebild
Image und gibt die extrahierten Linien als subpixel-genaue
XLD-Konturen in Lines zurück. Farblinien werden dabei als
dunkle Linien im Amplitudenbild des Farbkantenfilters definiert
(siehe edges_color). Der verwendete Farbkantenfilter ist
bei lines_color immer der Canny-Farbkantenfilter. Die
benötigten partiellen Ableitungen des Bildes werden also immer mit
partiellen Ableitungen von Gaußmasken berechnet (siehe
derivate_gauss). Die zugehörige Glättung wird durch den
Parameter Sigma festgelegt.
Durch die Definition von Farblinien als dunkle Linien im
Amplitudenbild wird im Gegensatz zu lines_gauss bei
einkanaligen Bildern nicht unterschieden, ob die Linien heller oder
dunkler als die Umgebung sind. Weiterhin werden von
lines_color auch Treppenstufenlinien zurückgeliefert, d.h.
Linien, bei denen der Grauwert der Linie zwischen den Grauwerten in
der linken und rechten Umgebung der Linie liegt. Bei mehrkanaligen
Bildern kann durch die obige Definition sogar jeder Kanal einen
unterschiedlichen Linientyp aufweisen. Bei einem dreikanaligen Bild
kann z.B. der erste Kanal eine dunkle Linie, der zweite Kanal eine
helle Linie und der dritte Kanal eine Treppenstufenlinie an
derselben Position aufweisen.
Wenn ExtractWidth auf 'true' gesetzt wird, so wird
für jeden Linienpunkt die Linienbreite extrahiert. Da der
Linienextraktor aus differentialgeometrischen Gründen bestimmte
Kreuzungspunkte nicht extrahieren kann, wird versucht, diese mit
anderen Mitteln zu extrahieren, falls
CompleteJunctions='true' gesetzt wird.
lines_color verknüpft die einzelnen Kantenpunkte mit einem
Hysterese-Schwellenwert-artigen Verfahren, wie es auch in
lines_gauss und edges_color_sub_pix verwendet wird,
zu Linien. Dabei werden Punkte, deren Amplitude größer als
High ist, sofort als sichere Linienpunkte akzeptiert.
Punkte, deren Amplitude kleiner als Low ist, werden sofort
verworfen. Alle Punkte, die eine Amplitude zwischen diesen zwei
Werten besitzen, werden akzeptiert, wenn sie durch einen Pfad mit
sicheren Punkten verbunden sind (siehe lines_gauss). Dabei
ist die Amplitude der Punkte als die Linienstärke der dunklen Linie
im Amplitudenbild zu verstehen (siehe lines_gauss und
lines_facet). Dieser Wert entspricht der dritten
Richtungsableitung des geglätteten Eingabebildes in Richtung
senkrecht zur Linie.
Bei der Wahl der Schwellenwerte High und Low ist
zu beachten, dass die dritte Richtungsableitung von der Amplitude
und Breite der Linie, sowie von der Größe des Glättungsparameters
Sigma abhängt. Dabei ist die Abhängigkeit von der
Amplitude der Linie linear, d.h., je größer die Amplitude, desto
größer die dritte Ableitung. Für die Breite der Linie besteht
ein umgekehrter Zusammenhang: Je breiter die Linie ist, desto
kleiner ist die dritte Ableitung. Analoges gilt für die
Abhängigkeit von Sigma: Je größer Sigma
gewählt wird, desto kleiner wird die dritte Ableitung. Das
bedeutet, dass für starke Glättung entsprechend kleinere Werte
für High und Low gewählt werden müssen.
Die extrahierten Linien werden in einer topologisch „sauberen“
Struktur in Lines zurückgeliefert. Das bedeutet, dass die
Linien an Kreuzungspunkten sauber aufgetrennt werden.
lines_color definiert folgende Attribute für jeden
Linienpunkt, falls ExtractWidth auf 'false'
gesetzt wurde:
| 'angle' | Der Winkel der Richtung senkrecht zur Linie (so orientiert, dass die Normalenvektoren auf die rechte Seite der Linie in Durchlaufrichtung der Linie zeigen; die Winkel sind bzgl. der Zeilenachse des Bildes angegeben.) |
| 'response' | Die Größe der dritten Ableitung |
ExtractWidth auf 'true' gesetzt wurde,
werden zusätzlich noch folgende Attribute definiert:
| 'width_left' | Die Linienbreite links von der Linie |
| 'width_right' | Die Linienbreite rechts von der Linie |
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.
Im allgemeinen, aber besonders, wenn die Linienbreite extrahiert werden soll, sollte gewählt werden, wobei w die Breite (der halbe Durchmesser) der zu extrahierenden Linien im Bild ist. Als unterste Grenze muß gewählt werden. Falls z.B. Linien mit einer Breite von 4 Pixel (Durchmesser 8 Pixel) extrahiert werden sollen, sollte gewählt werden. Falls erwartet wird, dass in mindestens einem der Kanäle des Eingabebildes auch Treppenstufenlinien vorkommen und diese auch extrahiert werden sollen, sollte zusätzlich noch gewählt werden. Dies muss beachtet werden, da Treppenstufenlinien bei zu großer Glättung zu normalen Stufenkanten werden und somit nicht mehr als dunkle Linien im Amplitudenbild des Farbkantenfilters erscheinen.
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) (multichannel-)image → object (byte / uint2)
Eingabebild.
Lines (output_object) xld_cont-array → object
Extrahierte Linien.
Sigma (input_control) number → (real / integer)
Stärke der Gaußschen Glättung.
Defaultwert: 1.5
Wertevorschläge: 1, 1.2, 1.5, 1.8, 2, 2.5, 3, 4, 5
Typischer Wertebereich: 0.7
≤
Sigma
≤
20
Empfohlene Schrittweite: 0.1
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
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
Empfohlene Schrittweite: 0.5
Restriktion: High >= 0 && High >= Low
ExtractWidth (input_control) string → (string)
Soll die Linienbreite extrahiert werden?
Defaultwert: 'true'
Werteliste: 'false', 'true'
CompleteJunctions (input_control) string → (string)
Sollen die Kreuzungspunkte vervollständigt werden?
Defaultwert: 'true'
Werteliste: 'false', 'true'
Der Bedarf an temporären Speicher ist abhängig von der Höhe H der Region
von Image.
Sind die Parameterwerte korrekt und tritt kein Fehler während der
Berechnung auf, liefert lines_color 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.
edges_color,
edges_color_sub_pix
C. Steger: „Subpixel-Precise Extraction of Lines and Edges“;
International Archives of Photogrammetry and Remote Sensing,
vol. XXXIII, part B3; pp. 141-156; 2000.
C. Steger: „An Unbiased Detector of Curvilinear Structures“; IEEE
Transactions on Pattern Analysis and Machine Intelligence; vol. 20,
no. 2; pp. 113-125; 1998.
C. Steger: „Unbiased Extraction of Curvilinear Structures from 2D
and 3D Images“; Herbert Utz Verlag, München; 1998.
2D Metrology