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