KlassenKlassenKlassenKlassen | | | | Operatoren

edges_color_sub_pixedges_color_sub_pixEdgesColorSubPixedges_color_sub_pixEdgesColorSubPixEdgesColorSubPix (Operator)

Name

edges_color_sub_pixedges_color_sub_pixEdgesColorSubPixedges_color_sub_pixEdgesColorSubPixEdgesColorSubPix — Subpixel-genaue Farbkantendetektion mit Deriche-, Shen- oder Canny-Filtern.

Signatur

edges_color_sub_pix(Image : Edges : Filter, Alpha, Low, High : )

Herror edges_color_sub_pix(const Hobject Image, Hobject* Edges, const char* Filter, double Alpha, double Low, double High)

Herror T_edges_color_sub_pix(const Hobject Image, Hobject* Edges, const Htuple Filter, const Htuple Alpha, const Htuple Low, const Htuple High)

Herror edges_color_sub_pix(Hobject Image, Hobject* Edges, const HTuple& Filter, const HTuple& Alpha, const HTuple& Low, const HTuple& High)

HXLDContArray HImage::EdgesColorSubPix(const HTuple& Filter, const HTuple& Alpha, const HTuple& Low, const HTuple& High) const

void EdgesColorSubPix(const HObject& Image, HObject* Edges, const HTuple& Filter, const HTuple& Alpha, const HTuple& Low, const HTuple& High)

HXLDCont HImage::EdgesColorSubPix(const HString& Filter, double Alpha, const HTuple& Low, const HTuple& High) const

HXLDCont HImage::EdgesColorSubPix(const HString& Filter, double Alpha, double Low, double High) const

HXLDCont HImage::EdgesColorSubPix(const char* Filter, double Alpha, double Low, double High) const

void HOperatorSetX.EdgesColorSubPix(
[in] IHUntypedObjectX* Image, [out] IHUntypedObjectX*Edges, [in] VARIANT Filter, [in] VARIANT Alpha, [in] VARIANT Low, [in] VARIANT High)

IHXLDContX* HImageX.EdgesColorSubPix(
[in] BSTR Filter, [in] double Alpha, [in] VARIANT Low, [in] VARIANT High)

static void HOperatorSet.EdgesColorSubPix(HObject image, out HObject edges, HTuple filter, HTuple alpha, HTuple low, HTuple high)

HXLDCont HImage.EdgesColorSubPix(string filter, double alpha, HTuple low, HTuple high)

HXLDCont HImage.EdgesColorSubPix(string filter, double alpha, double low, double high)

Beschreibung

edges_color_sub_pixedges_color_sub_pixEdgesColorSubPixedges_color_sub_pixEdgesColorSubPixEdgesColorSubPix extrahiert subpixel-genaue Farbkanten aus dem Eingabebild ImageImageImageImageImageimage. Die Definition von Farbkanten ist in der Beschreibung von edges_coloredges_colorEdgesColoredges_colorEdgesColorEdgesColor erläutert. Es stehen dieselben Kantenfilter wie bei edges_coloredges_colorEdgesColoredges_colorEdgesColorEdgesColor zur Verfügung: 'canny'"canny""canny""canny""canny""canny", 'deriche1'"deriche1""deriche1""deriche1""deriche1""deriche1", 'deriche2'"deriche2""deriche2""deriche2""deriche2""deriche2" und 'shen'"shen""shen""shen""shen""shen". Zusätzlich steht noch ein schneller Sobel-Filter mit 'sobel_fast'"sobel_fast""sobel_fast""sobel_fast""sobel_fast""sobel_fast" zur Verfügung. Die Filter werden durch den Paremeter FilterFilterFilterFilterFilterfilter spezifiziert.

Die „Filterbreite“ (Stärke der Glättung) AlphaAlphaAlphaAlphaAlphaalpha ist frei wählbar. Für eine ausführliche Beschreibung dieses Parameters siehe edges_coloredges_colorEdgesColoredges_colorEdgesColorEdgesColor. Bei FilterFilterFilterFilterFilterfilter = 'sobel_fast'"sobel_fast""sobel_fast""sobel_fast""sobel_fast""sobel_fast" wird dieser Parameter ignoriert.

Die extrahierten Kanten werden als subpixel-genaue XLD-Konturen in EdgesEdgesEdgesEdgesEdgesedges zurückgeliefert. Für alle Kantenoperatoren außer 'sobel_fast'"sobel_fast""sobel_fast""sobel_fast""sobel_fast""sobel_fast" werden für jeden Kantenpunkt die folgenden Attribute definiert (siehe get_contour_attrib_xldget_contour_attrib_xldGetContourAttribXldget_contour_attrib_xldGetContourAttribXldGetContourAttribXld):

'edge_direction'"edge_direction""edge_direction""edge_direction""edge_direction""edge_direction" Die Kantenrichtung
'angle'"angle""angle""angle""angle""angle" Richtung der Normalenvektoren der Kontur (so orientiert, dass die Normalenvektoren auf die rechte Seite der Kontur in Durchlaufrichtung der Kontur zeigen; die Winkel sind bzgl. der Zeilenachse des Bildes angegeben.)
'response'"response""response""response""response""response" Die Amplitude der Kante

edges_color_sub_pixedges_color_sub_pixEdgesColorSubPixedges_color_sub_pixEdgesColorSubPixEdgesColorSubPix verknüpft die einzelnen Kantenpunkte mit einem Hysterese-Schwellenwert-artigen Verfahren zu Kanten, wie es auch in edges_sub_pixedges_sub_pixEdgesSubPixedges_sub_pixEdgesSubPixEdgesSubPix und lines_gausslines_gaussLinesGausslines_gaussLinesGaussLinesGauss verwendet wird. Dabei werden Punkte, deren Amplitude größer als HighHighHighHighHighhigh ist, sofort als sichere Kantenpunkte akzeptiert. Punkte, deren Amplitude kleiner als LowLowLowLowLowlow ist, werden sofort verworfen. Alle Punkte, die eine zweite Amplitude zwischen diesen zwei Werten besitzen, werden akzeptiert, wenn sie durch einen Pfad mit sicheren Punkten verbunden sind (siehe lines_gausslines_gaussLinesGausslines_gaussLinesGaussLinesGauss und hysteresis_thresholdhysteresis_thresholdHysteresisThresholdhysteresis_thresholdHysteresisThresholdHysteresisThreshold).

Da Kantenextraktoren oftmals bestimmte Kreuzungspunkte nicht extrahieren können, kann durch Anhängen von '_junctions'"_junctions""_junctions""_junctions""_junctions""_junctions" an die oben beschriebenen Werte von FilterFilterFilterFilterFilterfilter versucht werden, diese mit anderen Mitteln zu extrahieren. Dieser Modus ist analog zu dem bei edges_sub_pixedges_sub_pixEdgesSubPixedges_sub_pixEdgesSubPixEdgesSubPix und lines_gausslines_gaussLinesGausslines_gaussLinesGaussLinesGauss verfügbaren Modus zur Vervollständigung von Kreuzungspunkten.

Der Kantenoperator 'sobel_fast'"sobel_fast""sobel_fast""sobel_fast""sobel_fast""sobel_fast" hat dieselbe Semantik wie alle anderen Kantenoperatoren, basiert intern aber auf einer stark vereinfachten Variante der einzelnen Schritte (Hysterese-Schwellenwert-Operation, Verknüpfung der Kantenpunkte, Extraktion der Subpixel-Position). Daher können die Ergebnisse von 'sobel_fast'"sobel_fast""sobel_fast""sobel_fast""sobel_fast""sobel_fast" in manchen Fällen eine geringere Genauigkeit als die Ergebnisse der anderen Filter aufweisen und andere Kantenteile selektieren.

Achtung

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.

Parallelisierung

Parameter

ImageImageImageImageImageimage (input_object)  (multichannel-)image objectHImageHImageHImageHImageXHobject (byte / uint2)

Eingabebild.

EdgesEdgesEdgesEdgesEdgesedges (output_object)  xld_cont-array objectHXLDContHXLDContHXLDContArrayHXLDContXHobject *

Extrahierte Kanten.

FilterFilterFilterFilterFilterfilter (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Gewünschter Kanten-Operator.

Defaultwert: 'canny' "canny" "canny" "canny" "canny" "canny"

Werteliste: 'canny'"canny""canny""canny""canny""canny", 'canny_junctions'"canny_junctions""canny_junctions""canny_junctions""canny_junctions""canny_junctions", 'deriche1'"deriche1""deriche1""deriche1""deriche1""deriche1", 'deriche1_junctions'"deriche1_junctions""deriche1_junctions""deriche1_junctions""deriche1_junctions""deriche1_junctions", 'deriche2'"deriche2""deriche2""deriche2""deriche2""deriche2", 'deriche2_junctions'"deriche2_junctions""deriche2_junctions""deriche2_junctions""deriche2_junctions""deriche2_junctions", 'shen'"shen""shen""shen""shen""shen", 'shen_junctions'"shen_junctions""shen_junctions""shen_junctions""shen_junctions""shen_junctions", 'sobel_fast'"sobel_fast""sobel_fast""sobel_fast""sobel_fast""sobel_fast"

AlphaAlphaAlphaAlphaAlphaalpha (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Filterparameter: kleine Werte bewirken starke Glättung, also auch weniger Bilddetails (bei 'canny' umgekehrt).

Defaultwert: 1.0

Wertevorschläge: 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 0.9, 1.0, 1.1, 1.2, 1.5, 2.0, 2.5, 3.0

Typischer Wertebereich: 0.7 ≤ Alpha Alpha Alpha Alpha Alpha alpha ≤ 50.0

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.1

Restriktion: Alpha > 0.0

LowLowLowLowLowlow (input_control)  number HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Untere Schwelle für Hysterese-Schwellenwertoperation.

Defaultwert: 20

Wertevorschläge: 5, 10, 15, 20, 25, 30, 40

Typischer Wertebereich: 1 ≤ Low Low Low Low Low low

Minimale Schrittweite: 1

Empfohlene Schrittweite: 5

Restriktion: Low > 0

HighHighHighHighHighhigh (input_control)  number HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Obere Schwelle für Hysterese-Schwellenwertoperation.

Defaultwert: 40

Wertevorschläge: 10, 15, 20, 25, 30, 40, 50, 60, 70

Typischer Wertebereich: 1 ≤ High High High High High high

Minimale Schrittweite: 1

Empfohlene Schrittweite: 5

Restriktion: High > 0 && High >= Low

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 edges_color_sub_pixedges_color_sub_pixEdgesColorSubPixedges_color_sub_pixEdgesColorSubPixEdgesColorSubPix 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>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Alternativen

edges_coloredges_colorEdgesColoredges_colorEdgesColorEdgesColor

Siehe auch

edges_imageedges_imageEdgesImageedges_imageEdgesImageEdgesImage, edges_sub_pixedges_sub_pixEdgesSubPixedges_sub_pixEdgesSubPixEdgesSubPix, info_edgesinfo_edgesInfoEdgesinfo_edgesInfoEdgesInfoEdges, hysteresis_thresholdhysteresis_thresholdHysteresisThresholdhysteresis_thresholdHysteresisThresholdHysteresisThreshold, lines_gausslines_gaussLinesGausslines_gaussLinesGaussLinesGauss, lines_facetlines_facetLinesFacetlines_facetLinesFacetLinesFacet

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: „Unbiased Extraction of Curvilinear Structures from 2D and 3D Images“; Herbert Utz Verlag, München; 1998.
S. Di Zenzo: „A Note on the Gradient of a Multi-Image“; Computer Vision, Graphics, and Image Processing, vol. 33; pp. 116-125; 1986.
Aldo Cumani: „Edge Detection in Multispectral Images“; Computer Vision, Graphics, and Image Processing: Graphical Models and Image Processing, vol. 53, no. 1; pp. 40-51; 1991.
J.Canny: „Finding Edges and Lines in Images“; Report, AI-TR-720; M.I.T. Artificial Intelligence Lab., Cambridge; 1983.
J.Canny: „A Computational Approach to Edge Detection“; IEEE Transactions on Pattern Analysis and Machine Intelligence; PAMI-8, vol. 6; pp. 679-698; 1986.
R.Deriche: „Using Canny's Criteria to Derive a Recursively Implemented Optimal Edge Detector“; International Journal of Computer Vision; vol. 1, no. 2; pp. 167-187; 1987.
R.Deriche: „Fast Algorithms for Low-Level Vision“; IEEE Transactions on Pattern Analysis and Machine Intelligence; PAMI-12, no. 1; pp. 78-87; 1990.
J. Shen, S. Castan: „An Optimal Linear Operator for Step Edge Detection“; Computer Vision, Graphics, and Image Processing: Graphical Models and Image Processing, vol. 54, no. 2; pp. 112-133; 1992.

Modul

2D Metrology


KlassenKlassenKlassenKlassen | | | | Operatoren