lines_colorlines_colorLinesColorLinesColorlines_color (Operator)

Name

lines_colorlines_colorLinesColorLinesColorlines_color — 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)

def lines_color(image: HObject, sigma: Union[float, int], low: Union[float, int], high: Union[float, int], extract_width: str, complete_junctions: str) -> HObject

Beschreibung

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

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

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

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

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

lines_colorlines_colorLinesColorLinesColorLinesColorlines_color definiert folgende Attribute für jeden Linienpunkt, falls ExtractWidthExtractWidthExtractWidthExtractWidthextractWidthextract_width auf 'false'"false""false""false""false""false" gesetzt wurde:

Falls ExtractWidthExtractWidthExtractWidthExtractWidthextractWidthextract_width auf 'true'"true""true""true""true""true" gesetzt wurde, werden zusätzlich noch folgende Attribute definiert:

Diese Attribute können mit get_contour_attrib_xldget_contour_attrib_xldGetContourAttribXldGetContourAttribXldGetContourAttribXldget_contour_attrib_xld ausgelesen werden. Weitere Informationen zu Konturattributen können der Referenz von get_contour_attrib_xldget_contour_attrib_xldGetContourAttribXldGetContourAttribXldGetContourAttribXldget_contour_attrib_xld 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 muss 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

ImageImageImageImageimageimage (input_object)  (multichannel-)image objectHImageHObjectHImageHobject (byte / uint2)

Eingabebild.

LinesLinesLinesLineslineslines (output_object)  xld_cont-array objectHXLDContHObjectHXLDContHobject *

Extrahierte Linien.

SigmaSigmaSigmaSigmasigmasigma (input_control)  number HTupleUnion[float, int]HTupleHtuple (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

Empfohlene Schrittweite: 0.1

Restriktion: Sigma > 0.0

LowLowLowLowlowlow (input_control)  number HTupleUnion[float, int]HTupleHtuple (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 low

Empfohlene Schrittweite: 0.5

HighHighHighHighhighhigh (input_control)  number HTupleUnion[float, int]HTupleHtuple (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 high

Empfohlene Schrittweite: 0.5

Restriktion: High >= Low

ExtractWidthExtractWidthExtractWidthExtractWidthextractWidthextract_width (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Soll die Linienbreite extrahiert werden?

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

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

CompleteJunctionsCompleteJunctionsCompleteJunctionsCompleteJunctionscompleteJunctionscomplete_junctions (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Sollen die Kreuzungspunkte vervollständigt werden?

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

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

Komplexität

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

Ergebnis

Sind die Parameterwerte korrekt und tritt kein Fehler während der Berechnung auf, liefert lines_colorlines_colorLinesColorLinesColorLinesColorlines_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>:)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Nachfolger

gen_polygons_xldgen_polygons_xldGenPolygonsXldGenPolygonsXldGenPolygonsXldgen_polygons_xld

Alternativen

lines_gausslines_gaussLinesGaussLinesGaussLinesGausslines_gauss, lines_facetlines_facetLinesFacetLinesFacetLinesFacetlines_facet

Siehe auch

edges_coloredges_colorEdgesColorEdgesColorEdgesColoredges_color, edges_color_sub_pixedges_color_sub_pixEdgesColorSubPixEdgesColorSubPixEdgesColorSubPixedges_color_sub_pix

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