lines_colorlines_colorLinesColorLinesColor (Operator)

Name

lines_colorlines_colorLinesColorLinesColor — Extraktion von Farblinien und deren Breite.

Signatur

lines_color(Image : Lines : Sigma, Low, High, ExtractWidth, CompleteJunctions : )

Herror lines_color(const Hobject Image, Hobject* Lines, double Sigma, double Low, double High, const char* ExtractWidth, const char* CompleteJunctions)

Herror T_lines_color(const Hobject Image, Hobject* Lines, const Htuple Sigma, const Htuple Low, const Htuple High, const Htuple ExtractWidth, const Htuple CompleteJunctions)

void LinesColor(const HObject& Image, HObject* Lines, const HTuple& Sigma, const HTuple& Low, const HTuple& High, const HTuple& ExtractWidth, const HTuple& CompleteJunctions)

HXLDCont HImage::LinesColor(const HTuple& Sigma, const HTuple& Low, const HTuple& High, const HString& ExtractWidth, const HString& CompleteJunctions) const

HXLDCont HImage::LinesColor(double Sigma, double Low, double High, const HString& ExtractWidth, const HString& CompleteJunctions) const

HXLDCont HImage::LinesColor(double Sigma, double Low, double High, const char* ExtractWidth, const char* CompleteJunctions) const

HXLDCont HImage::LinesColor(double Sigma, double Low, double High, const wchar_t* ExtractWidth, const wchar_t* CompleteJunctions) const   (Nur Windows)

static void HOperatorSet.LinesColor(HObject image, out HObject lines, HTuple sigma, HTuple low, HTuple high, HTuple extractWidth, HTuple completeJunctions)

HXLDCont HImage.LinesColor(HTuple sigma, HTuple low, HTuple high, string extractWidth, string completeJunctions)

HXLDCont HImage.LinesColor(double sigma, double low, double high, string extractWidth, string completeJunctions)

Beschreibung

lines_colorlines_colorLinesColorLinesColorLinesColor extrahiert Farblinien aus dem Eingabebild ImageImageImageImageimage und gibt die extrahierten Linien als subpixel-genaue XLD-Konturen in LinesLinesLinesLineslines zurück. Farblinien werden dabei als dunkle Linien im Amplitudenbild des Farbkantenfilters definiert (siehe edges_coloredges_colorEdgesColorEdgesColorEdgesColor). Der verwendete Farbkantenfilter ist bei lines_colorlines_colorLinesColorLinesColorLinesColor immer der Canny-Farbkantenfilter. Die benötigten partiellen Ableitungen des Bildes werden also immer mit partiellen Ableitungen von Gaußmasken berechnet (siehe derivate_gaussderivate_gaussDerivateGaussDerivateGaussDerivateGauss). Die zugehörige Glättung wird durch den Parameter SigmaSigmaSigmaSigmasigma festgelegt.

Durch die Definition von Farblinien als dunkle Linien im Amplitudenbild wird im Gegensatz zu lines_gausslines_gaussLinesGaussLinesGaussLinesGauss bei einkanaligen Bildern nicht unterschieden, ob die Linien heller oder dunkler als die Umgebung sind. Weiterhin werden von lines_colorlines_colorLinesColorLinesColorLinesColor 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 ExtractWidthExtractWidthExtractWidthExtractWidthextractWidth auf 'true'"true""true""true""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 CompleteJunctionsCompleteJunctionsCompleteJunctionsCompleteJunctionscompleteJunctions='true'"true""true""true""true" gesetzt wird.

lines_colorlines_colorLinesColorLinesColorLinesColor verknüpft die einzelnen Kantenpunkte mit einem Hysterese-Schwellenwert-artigen Verfahren, wie es auch in lines_gausslines_gaussLinesGaussLinesGaussLinesGauss und edges_color_sub_pixedges_color_sub_pixEdgesColorSubPixEdgesColorSubPixEdgesColorSubPix verwendet wird, zu Linien. Dabei werden Punkte, deren Amplitude größer als HighHighHighHighhigh ist, sofort als sichere Linienpunkte akzeptiert. Punkte, deren Amplitude kleiner als LowLowLowLowlow 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_gausslines_gaussLinesGaussLinesGaussLinesGauss). Dabei ist die Amplitude der Punkte als die Linienstärke der dunklen Linie im Amplitudenbild zu verstehen (siehe lines_gausslines_gaussLinesGaussLinesGaussLinesGauss und lines_facetlines_facetLinesFacetLinesFacetLinesFacet). Dieser Wert entspricht der dritten Richtungsableitung des geglätteten Eingabebildes in Richtung senkrecht zur Linie.

Bei der Wahl der Schwellenwerte HighHighHighHighhigh und LowLowLowLowlow ist zu beachten, dass die dritte Richtungsableitung von der Amplitude und Breite der Linie, sowie von der Größe des Glättungsparameters SigmaSigmaSigmaSigmasigma 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 SigmaSigmaSigmaSigmasigma: Je größer SigmaSigmaSigmaSigmasigma gewählt wird, desto kleiner wird die dritte Ableitung. Das bedeutet, dass für starke Glättung entsprechend kleinere Werte für HighHighHighHighhigh und LowLowLowLowlow gewählt werden müssen.

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

lines_colorlines_colorLinesColorLinesColorLinesColor definiert folgende Attribute für jeden Linienpunkt, falls ExtractWidthExtractWidthExtractWidthExtractWidthextractWidth auf 'false'"false""false""false""false" gesetzt wurde:
'angle'"angle""angle""angle""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'"response""response""response""response" Die Größe der dritten Ableitung
Falls ExtractWidthExtractWidthExtractWidthExtractWidthextractWidth auf 'true'"true""true""true""true" gesetzt wurde, werden zusätzlich noch folgende Attribute definiert:
'width_left'"width_left""width_left""width_left""width_left" Die Linienbreite links von der Linie
'width_right'"width_right""width_right""width_right""width_right" Die Linienbreite rechts von der Linie

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

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.

Ausführungsinformationen

Parameter

ImageImageImageImageimage (input_object)  (multichannel-)image objectHImageHImageHobject (byte / uint2)

Eingabebild.

LinesLinesLinesLineslines (output_object)  xld_cont-array objectHXLDContHXLDContHobject *

Extrahierte Linien.

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

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 Sigma Sigma Sigma sigma ≤ 20

Empfohlene Schrittweite: 0.1

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

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

Empfohlene Schrittweite: 0.5

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

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

Soll die Linienbreite extrahiert werden?

Defaultwert: 'true' "true" "true" "true" "true"

Werteliste: 'false'"false""false""false""false", 'true'"true""true""true""true"

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

Sollen die Kreuzungspunkte vervollständigt werden?

Defaultwert: 'true' "true" "true" "true" "true"

Werteliste: 'false'"false""false""false""false", 'true'"true""true""true""true"

Komplexität

Der Bedarf an temporären Speicher ist abhängig von der Höhe H der Region von ImageImageImageImageimage.

Ergebnis

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

Siehe auch

edges_coloredges_colorEdgesColorEdgesColorEdgesColor, edges_color_sub_pixedges_color_sub_pixEdgesColorSubPixEdgesColorSubPixEdgesColorSubPix

Literatur

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.

Modul

2D Metrology