measure_posT_measure_posMeasurePosMeasurePos (Operator)

Name

measure_posT_measure_posMeasurePosMeasurePos — Extraktion geradliniger Kanten senkrecht zu einem Rechteck oder Kreisringsegment.

Signatur

measure_pos(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdge, ColumnEdge, Amplitude, Distance)

Herror T_measure_pos(const Hobject Image, const Htuple MeasureHandle, const Htuple Sigma, const Htuple Threshold, const Htuple Transition, const Htuple Select, Htuple* RowEdge, Htuple* ColumnEdge, Htuple* Amplitude, Htuple* Distance)

void MeasurePos(const HObject& Image, const HTuple& MeasureHandle, const HTuple& Sigma, const HTuple& Threshold, const HTuple& Transition, const HTuple& Select, HTuple* RowEdge, HTuple* ColumnEdge, HTuple* Amplitude, HTuple* Distance)

void HMeasure::MeasurePos(const HImage& Image, double Sigma, double Threshold, const HString& Transition, const HString& Select, HTuple* RowEdge, HTuple* ColumnEdge, HTuple* Amplitude, HTuple* Distance) const

void HMeasure::MeasurePos(const HImage& Image, double Sigma, double Threshold, const char* Transition, const char* Select, HTuple* RowEdge, HTuple* ColumnEdge, HTuple* Amplitude, HTuple* Distance) const

void HMeasure::MeasurePos(const HImage& Image, double Sigma, double Threshold, const wchar_t* Transition, const wchar_t* Select, HTuple* RowEdge, HTuple* ColumnEdge, HTuple* Amplitude, HTuple* Distance) const   (Nur Windows)

void HImage::MeasurePos(const HMeasure& MeasureHandle, double Sigma, double Threshold, const HString& Transition, const HString& Select, HTuple* RowEdge, HTuple* ColumnEdge, HTuple* Amplitude, HTuple* Distance) const

void HImage::MeasurePos(const HMeasure& MeasureHandle, double Sigma, double Threshold, const char* Transition, const char* Select, HTuple* RowEdge, HTuple* ColumnEdge, HTuple* Amplitude, HTuple* Distance) const

void HImage::MeasurePos(const HMeasure& MeasureHandle, double Sigma, double Threshold, const wchar_t* Transition, const wchar_t* Select, HTuple* RowEdge, HTuple* ColumnEdge, HTuple* Amplitude, HTuple* Distance) const   (Nur Windows)

static void HOperatorSet.MeasurePos(HObject image, HTuple measureHandle, HTuple sigma, HTuple threshold, HTuple transition, HTuple select, out HTuple rowEdge, out HTuple columnEdge, out HTuple amplitude, out HTuple distance)

void HMeasure.MeasurePos(HImage image, double sigma, double threshold, string transition, string select, out HTuple rowEdge, out HTuple columnEdge, out HTuple amplitude, out HTuple distance)

void HImage.MeasurePos(HMeasure measureHandle, double sigma, double threshold, string transition, string select, out HTuple rowEdge, out HTuple columnEdge, out HTuple amplitude, out HTuple distance)

Beschreibung

measure_posmeasure_posMeasurePosMeasurePosMeasurePos dient zur Extraktion von geradlinigen Kanten, die senkrecht zur Hauptachse eines Rechtecks oder zu einem Kreisringsegment liegen.

Das Konzept der 1D-Vermessung ist bei der Einleitung zu Kapitel 1D-Vermessung beschrieben.

Der Algorithmus von measure_posmeasure_posMeasurePosMeasurePosMeasurePos erzeugt zunächst ein eindimensionales Grauwertprofil durch Mittelung der Grauwerte entlang von Geraden senkrecht zur Hauptachse des Rechtecks oder zum Kreisringsegment. Dabei wird das Eingabebild ImageImageImageImageimage an Subpixel-Positionen abgetastet, die einen ganzzahligen Zeilen- und Spalten-Abstand (im Koordinatensystem des Rechtecks) zum Mittelpunkt des Rechtecks haben. Weil die Abtastung des Bildes einige Berechnungen erfordert, die in mehreren Messungen verwendet werden können, wird der Operator gen_measure_rectangle2gen_measure_rectangle2GenMeasureRectangle2GenMeasureRectangle2GenMeasureRectangle2 b.z.w. gen_measure_arcgen_measure_arcGenMeasureArcGenMeasureArcGenMeasureArc verwendet, um diese Berechnungen nur einmal ausführen zu müssen, und somit die Geschwindigkeit von measure_posmeasure_posMeasurePosMeasurePosMeasurePos signifikant zu erhöhen. Aufgrund der Tatsache, dass eine bessere Interpolation bei der Subpixel-Abtastung der Grauwerte zu einer besseren Genauigkeit der extrahierten Kanten führt, aber auch die Laufzeit des Operators erhöht, können verschiedene Interpolationsverfahren in gen_measure_rectangle2gen_measure_rectangle2GenMeasureRectangle2GenMeasureRectangle2GenMeasureRectangle2 und gen_measure_arcgen_measure_arcGenMeasureArcGenMeasureArcGenMeasureArc gewählt werden. (Die Interpolation beeinflusst nur Rechtecke, die nicht parallel zu den Koordinatenachsen des Bildes sind, und Kreisringsegmente.) Das Messobjekt, das mit gen_measure_rectangle2gen_measure_rectangle2GenMeasureRectangle2GenMeasureRectangle2GenMeasureRectangle2 / gen_measure_arcgen_measure_arcGenMeasureArcGenMeasureArcGenMeasureArc erzeugt wurde, wird in MeasureHandleMeasureHandleMeasureHandleMeasureHandlemeasureHandle übergeben.

Nach der Bestimmung des eindimensionalen Kantenprofils werden die subpixelgenauen Kantenpositionen durch Faltung des Profils mit den Ableitungen einer Gauß-Maske mit Standardabweichung SigmaSigmaSigmaSigmasigma berechnet. Auffällige Kanten können mit dem Parameter ThresholdThresholdThresholdThresholdthreshold, der einen Schwellwert für die Kantenamplitude, d.h. den Absolutbetrag der ersten Ableitung, angibt, selektiert werden. Es ist zu beachten, dass die Amplitudenwerte mit dem Faktor skaliert werden. Außerdem ist es möglich, nur positive Kanten, also solche, die einen Übergang von Dunkel nach Hell in der Richtung der Hauptachse des Rechtecks oder des Kreisringsegments darstellen, (TransitionTransitionTransitionTransitiontransition = 'positive'"positive""positive""positive""positive"), nur negative Kanten, also Hell-Dunkel-Übergänge, (TransitionTransitionTransitionTransitiontransition = 'negative'"negative""negative""negative""negative") oder alle Kanten zu selektieren (TransitionTransitionTransitionTransitiontransition = 'all'"all""all""all""all"). Schließlich kann gewählt werden, welche der extrahierten Kanten zurückgeliefert werden sollen. Wenn SelectSelectSelectSelectselect auf 'all'"all""all""all""all" gesetzt wird, werden alle gefundenen Kanten zurückgegeben, falls SelectSelectSelectSelectselect auf 'first'"first""first""first""first" gesetzt wird, nur die erste Kante, und falls SelectSelectSelectSelectselect auf 'last'"last""last""last""last" gesetzt wird, nur die letzte.

Die extrahierten Kanten werden als einzelne Punkte, die auf der Hauptachse des Rechtecks oder dem mittleren Bogen des Kreisringsegments liegen, in (RowEdgeRowEdgeRowEdgeRowEdgerowEdge,ColumnEdgeColumnEdgeColumnEdgeColumnEdgecolumnEdge) zurückgegeben. Die zugehörigen Kantenamplituden werden in AmplitudeAmplitudeAmplitudeAmplitudeamplitude zurückgeliefert. Zusätzlich wird noch der Abstand von aufeinanderfolgenden Kantenpunkten in DistanceDistanceDistanceDistancedistance zurückgeliefert. Dabei entspricht Distance[i] dem Abstand von Edge[i] und Edge[i+1]. D.h., das Tupel DistanceDistanceDistanceDistancedistance enthält ein Element weniger als die Tupel RowEdgeRowEdgeRowEdgeRowEdgerowEdge und ColumnEdgeColumnEdgeColumnEdgeColumnEdgecolumnEdge.

Achtung

measure_posmeasure_posMeasurePosMeasurePosMeasurePos liefert nur dann brauchbare Ergebnisse, falls die Annahme, dass die Kanten gerade und senkrecht zur Hauptachse des Rechtecks oder dem Kreisringsegments sind, erfüllt ist. measure_posmeasure_posMeasurePosMeasurePosMeasurePos sollte daher z.B. nicht dazu verwendet werden, Kanten von gekrümmten Objekten zu extrahieren. Weiterhin sollte der Benutzer darauf achten, dass das Rechteck / das Kreisringsegment möglichst senkrecht zu den Bildkanten liegt. Außerdem darf SigmaSigmaSigmaSigmasigma nicht größer als ca. 0.5 * Length1 (siehe gen_measure_rectangle2gen_measure_rectangle2GenMeasureRectangle2GenMeasureRectangle2GenMeasureRectangle2 für Length1) sein.

Es ist zu beachten, dass measure_posmeasure_posMeasurePosMeasurePosMeasurePos den Definitionsbereich von ImageImageImageImageimage aus Geschwindigkeitsgründen ignoriert. Falls bestimmte Bildbereiche von der Messung ausgeschlossen werden sollen, sollte ein neues Messobjekt mit entsprechend angepassten Parametern erzeugt werden.

Ausführungsinformationen

Parameter

ImageImageImageImageimage (input_object)  singlechannelimage objectHImageHImageHobject (byte / uint2 / real)

Eingabebild.

MeasureHandleMeasureHandleMeasureHandleMeasureHandlemeasureHandle (input_control)  measure HMeasure, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des Messobjekts.

SigmaSigmaSigmaSigmasigma (input_control)  number HTupleHTupleHtuple (real) (double) (double) (double)

Sigma der Gaußglättung.

Defaultwert: 1.0

Wertevorschläge: 0.4, 0.6, 0.8, 1.0, 1.5, 2.0, 3.0, 4.0, 5.0, 7.0, 10.0

Typischer Wertebereich: 0.4 ≤ Sigma Sigma Sigma Sigma sigma ≤ 100 (lin)

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.1

Restriktion: Sigma >= 0.4

ThresholdThresholdThresholdThresholdthreshold (input_control)  number HTupleHTupleHtuple (real) (double) (double) (double)

Minimale Amplitude einer Kante.

Defaultwert: 30.0

Wertevorschläge: 5.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 90.0, 110.0

Typischer Wertebereich: 1 ≤ Threshold Threshold Threshold Threshold threshold ≤ 255 (lin)

Minimale Schrittweite: 0.5

Empfohlene Schrittweite: 2

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

Hell/dunkel oder dunkel/hell Kante.

Defaultwert: 'all' "all" "all" "all" "all"

Werteliste: 'all'"all""all""all""all", 'negative'"negative""negative""negative""negative", 'positive'"positive""positive""positive""positive"

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

Auswahl der Endpunkte.

Defaultwert: 'all' "all" "all" "all" "all"

Werteliste: 'all'"all""all""all""all", 'first'"first""first""first""first", 'last'"last""last""last""last"

RowEdgeRowEdgeRowEdgeRowEdgerowEdge (output_control)  point.y-array HTupleHTupleHtuple (real) (double) (double) (double)

Zeilenkoordinate des Mittelpunktes der Kante.

ColumnEdgeColumnEdgeColumnEdgeColumnEdgecolumnEdge (output_control)  point.x-array HTupleHTupleHtuple (real) (double) (double) (double)

Spaltenkoordinate des Mittelpunktes der Kante.

AmplitudeAmplitudeAmplitudeAmplitudeamplitude (output_control)  real-array HTupleHTupleHtuple (real) (double) (double) (double)

Kantenamplitude der Kante (mit Vorzeichen).

DistanceDistanceDistanceDistancedistance (output_control)  real-array HTupleHTupleHtuple (real) (double) (double) (double)

Abstand zwischen aufeinanderfolgenden Kanten.

Ergebnis

Sind die Parameterwerte korrekt, dann liefert measure_posmeasure_posMeasurePosMeasurePosMeasurePos den Wert 2 (H_MSG_TRUE). Andernfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

gen_measure_rectangle2gen_measure_rectangle2GenMeasureRectangle2GenMeasureRectangle2GenMeasureRectangle2

Nachfolger

close_measureclose_measureCloseMeasureCloseMeasureCloseMeasure

Alternativen

edges_sub_pixedges_sub_pixEdgesSubPixEdgesSubPixEdgesSubPix, fuzzy_measure_posfuzzy_measure_posFuzzyMeasurePosFuzzyMeasurePosFuzzyMeasurePos

Siehe auch

measure_pairsmeasure_pairsMeasurePairsMeasurePairsMeasurePairs, fuzzy_measure_pairsfuzzy_measure_pairsFuzzyMeasurePairsFuzzyMeasurePairsFuzzyMeasurePairs, fuzzy_measure_pairingfuzzy_measure_pairingFuzzyMeasurePairingFuzzyMeasurePairingFuzzyMeasurePairing

Modul

1D Metrology