Name
measure_posT_measure_posMeasurePosmeasure_posMeasurePosMeasurePos — Extraktion geradliniger Kanten senkrecht zu einem Rechteck oder Kreisring.
Herror measure_pos(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)
HTuple HImage::MeasurePos(const HMeasure& MeasureHandle, const HTuple& Sigma, const HTuple& Threshold, const HTuple& Transition, const HTuple& Select, HTuple* ColumnEdge, HTuple* Amplitude, HTuple* Distance) const
HTuple HMeasure::MeasurePos(const HImage& Image, const HTuple& Sigma, const HTuple& Threshold, const HTuple& Transition, const HTuple& Select, HTuple* ColumnEdge, HTuple* Amplitude, HTuple* Distance) const
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 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 HOperatorSetX.MeasurePos(
[in] IHUntypedObjectX* Image, [in] VARIANT MeasureHandle, [in] VARIANT Sigma, [in] VARIANT Threshold, [in] VARIANT Transition, [in] VARIANT Select, [out] VARIANT* RowEdge, [out] VARIANT* ColumnEdge, [out] VARIANT* Amplitude, [out] VARIANT* Distance)
VARIANT HMeasureX.MeasurePos(
[in] IHImageX* Image, [in] double Sigma, [in] double Threshold, [in] BSTR Transition, [in] BSTR Select, [out] VARIANT* ColumnEdge, [out] VARIANT* Amplitude, [out] VARIANT* Distance)
VARIANT HImageX.MeasurePos(
[in] IHMeasureX* MeasureHandle, [in] double Sigma, [in] double Threshold, [in] BSTR Transition, [in] BSTR Select, [out] VARIANT* ColumnEdge, [out] VARIANT* Amplitude, [out] VARIANT* Distance)
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)
measure_posmeasure_posMeasurePosmeasure_posMeasurePosMeasurePos dient zur Extraktion von geradlinigen Kanten,
die senkrecht zur Hauptachse eines Rechtecks oder zu einem Kreisring
liegen.
Der Algorithmus erzeugt zunächst ein eindimensionales
Grauwertprofil durch Mittelung der Grauwerte entlang von Geraden
senkrecht zur Hauptachse des Rechtecks oder zum Kreisring. Dabei wird das
Eingabebild
ImageImageImageImageImageimage 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_rectangle2GenMeasureRectangle2gen_measure_rectangle2GenMeasureRectangle2GenMeasureRectangle2 b.z.w. gen_measure_arcgen_measure_arcGenMeasureArcgen_measure_arcGenMeasureArcGenMeasureArc verwendet,
um diese Berechnungen nur
einmal ausführen zu müssen, und somit die Geschwindigkeit von
measure_posmeasure_posMeasurePosmeasure_posMeasurePosMeasurePos 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_rectangle2GenMeasureRectangle2gen_measure_rectangle2GenMeasureRectangle2GenMeasureRectangle2 und
gen_measure_arcgen_measure_arcGenMeasureArcgen_measure_arcGenMeasureArcGenMeasureArc gewählt
werden. (Die Interpolation beeinflusst nur Rechtecke, die nicht
parallel zu den Koordinatenachsen des Bildes sind, und Kreisringe.) Das
Messobjekt, das mit gen_measure_rectangle2gen_measure_rectangle2GenMeasureRectangle2gen_measure_rectangle2GenMeasureRectangle2GenMeasureRectangle2 /
gen_measure_arcgen_measure_arcGenMeasureArcgen_measure_arcGenMeasureArcGenMeasureArc erzeugt wurde, wird in MeasureHandleMeasureHandleMeasureHandleMeasureHandleMeasureHandlemeasureHandle
übergeben.
Nach der Bestimmung des eindimensionalen Kantenprofils werden die
subpixelgenauen Kantenpositionen durch Faltung des Profils mit den
Ableitungen einer Gauß-Maske mit Standardabweichung SigmaSigmaSigmaSigmaSigmasigma
berechnet. Auffällige Kanten können mit dem Parameter
ThresholdThresholdThresholdThresholdThresholdthreshold, 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
SigmaSigmaSigmaSigmaSigmasigma*sqrt(2*Pi)
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 Kreisrings darstellen,
(TransitionTransitionTransitionTransitionTransitiontransition =
'positive'"positive""positive""positive""positive""positive"), nur negative Kanten, also
Hell-Dunkel-Übergänge, (TransitionTransitionTransitionTransitionTransitiontransition = 'negative'"negative""negative""negative""negative""negative")
oder alle Kanten zu selektieren (TransitionTransitionTransitionTransitionTransitiontransition =
'all'"all""all""all""all""all"). Schließlich kann gewählt werden, welche der
extrahierten Kanten zurückgeliefert werden sollen. Wenn
SelectSelectSelectSelectSelectselect auf 'all'"all""all""all""all""all" gesetzt wird, werden alle
gefundenen Kanten zurückgegeben, falls SelectSelectSelectSelectSelectselect auf
'first'"first""first""first""first""first" gesetzt wird, nur die erste Kante, und falls
SelectSelectSelectSelectSelectselect auf 'last'"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 Kreisrings liegen, in
(RowEdgeRowEdgeRowEdgeRowEdgeRowEdgerowEdge,ColumnEdgeColumnEdgeColumnEdgeColumnEdgeColumnEdgecolumnEdge) zurückgegeben. Die
zugehörigen Kantenamplituden werden in AmplitudeAmplitudeAmplitudeAmplitudeAmplitudeamplitude
zurückgeliefert. Zusätzlich wird noch der Abstand von
aufeinanderfolgenden Kantenpunkten in DistanceDistanceDistanceDistanceDistancedistance
zurückgeliefert. Dabei entspricht Distance[i] dem Abstand von
Edge[i] und Edge[i+1]. D.h., das Tupel DistanceDistanceDistanceDistanceDistancedistance enthält
ein Element weniger als die Tupel RowEdgeRowEdgeRowEdgeRowEdgeRowEdgerowEdge und
ColumnEdgeColumnEdgeColumnEdgeColumnEdgeColumnEdgecolumnEdge.
measure_posmeasure_posMeasurePosmeasure_posMeasurePosMeasurePos liefert nur dann brauchbare Ergebnisse, falls
die Annahme, dass die Kanten gerade und senkrecht zur Hauptachse des
Rechtecks oder dem Kreisring sind, erfüllt ist.
measure_posmeasure_posMeasurePosmeasure_posMeasurePosMeasurePos sollte daher z.B. nicht dazu verwendet werden,
Kanten von gekrümmten Objekten zu extrahieren. Weiterhin sollte
der Benutzer darauf achten, dass das Rechteck/der Kreisring
möglichst senkrecht zu den Bildkanten liegt. Außerdem darf
SigmaSigmaSigmaSigmaSigmasigma nicht größer als ca. 0.5 * Length1
(siehe gen_measure_rectangle2gen_measure_rectangle2GenMeasureRectangle2gen_measure_rectangle2GenMeasureRectangle2GenMeasureRectangle2 für Length1) sein.
Es ist zu beachten, dass measure_posmeasure_posMeasurePosmeasure_posMeasurePosMeasurePos den Definitionsbereich
von ImageImageImageImageImageimage aus Geschwindigkeitsgründen ignoriert. Falls
bestimmte Bildbereiche von der Messung ausgeschlossen werden sollen,
sollte ein neues Messobjekt mit entsprechend angepassten
Parametern erzeugt werden.
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Wird ohne Parallelisierung verarbeitet.
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
sigma
≤
100 (lin)
Minimale Schrittweite: 0.01
Empfohlene Schrittweite: 0.1
Restriktion: Sigma >= 0.4
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
threshold
≤
255 (lin)
Minimale Schrittweite: 0.5
Empfohlene Schrittweite: 2
Hell/dunkel oder dunkel/hell Kante.
Defaultwert:
'all'
"all"
"all"
"all"
"all"
"all"
Werteliste: 'all'"all""all""all""all""all", 'negative'"negative""negative""negative""negative""negative", 'positive'"positive""positive""positive""positive""positive"
Auswahl der Endpunkte.
Defaultwert:
'all'
"all"
"all"
"all"
"all"
"all"
Werteliste: 'all'"all""all""all""all""all", 'first'"first""first""first""first""first", 'last'"last""last""last""last""last"
Zeilenkoordinate des Mittelpunktes der Kante.
Spaltenkoordinate des Mittelpunktes der Kante.
Kantenamplitude der Kante (mit Vorzeichen).
Abstand zwischen aufeinanderfolgenden Kanten.
Sind die Parameterwerte korrekt, dann liefert measure_posmeasure_posMeasurePosmeasure_posMeasurePosMeasurePos
den Wert 2 (H_MSG_TRUE). Andernfalls wird eine Fehlerbehandlung durchgeführt.
gen_measure_rectangle2gen_measure_rectangle2GenMeasureRectangle2gen_measure_rectangle2GenMeasureRectangle2GenMeasureRectangle2
close_measureclose_measureCloseMeasureclose_measureCloseMeasureCloseMeasure
edges_sub_pixedges_sub_pixEdgesSubPixedges_sub_pixEdgesSubPixEdgesSubPix,
fuzzy_measure_posfuzzy_measure_posFuzzyMeasurePosfuzzy_measure_posFuzzyMeasurePosFuzzyMeasurePos
measure_pairsmeasure_pairsMeasurePairsmeasure_pairsMeasurePairsMeasurePairs,
fuzzy_measure_pairsfuzzy_measure_pairsFuzzyMeasurePairsfuzzy_measure_pairsFuzzyMeasurePairsFuzzyMeasurePairs,
fuzzy_measure_pairingfuzzy_measure_pairingFuzzyMeasurePairingfuzzy_measure_pairingFuzzyMeasurePairingFuzzyMeasurePairing
1D Metrology