fuzzy_measure_posT_fuzzy_measure_posFuzzyMeasurePosFuzzyMeasurePosfuzzy_measure_pos (Operator)
Name
fuzzy_measure_posT_fuzzy_measure_posFuzzyMeasurePosFuzzyMeasurePosfuzzy_measure_pos — Extraktion geradliniger Kanten senkrecht zu einem Rechteck oder
Kreisringsegment.
Signatur
Herror T_fuzzy_measure_pos(const Hobject Image, const Htuple MeasureHandle, const Htuple Sigma, const Htuple AmpThresh, const Htuple FuzzyThresh, const Htuple Transition, Htuple* RowEdge, Htuple* ColumnEdge, Htuple* Amplitude, Htuple* FuzzyScore, Htuple* Distance)
void FuzzyMeasurePos(const HObject& Image, const HTuple& MeasureHandle, const HTuple& Sigma, const HTuple& AmpThresh, const HTuple& FuzzyThresh, const HTuple& Transition, HTuple* RowEdge, HTuple* ColumnEdge, HTuple* Amplitude, HTuple* FuzzyScore, HTuple* Distance)
void HMeasure::FuzzyMeasurePos(const HImage& Image, double Sigma, double AmpThresh, double FuzzyThresh, const HString& Transition, HTuple* RowEdge, HTuple* ColumnEdge, HTuple* Amplitude, HTuple* FuzzyScore, HTuple* Distance) const
void HMeasure::FuzzyMeasurePos(const HImage& Image, double Sigma, double AmpThresh, double FuzzyThresh, const char* Transition, HTuple* RowEdge, HTuple* ColumnEdge, HTuple* Amplitude, HTuple* FuzzyScore, HTuple* Distance) const
void HMeasure::FuzzyMeasurePos(const HImage& Image, double Sigma, double AmpThresh, double FuzzyThresh, const wchar_t* Transition, HTuple* RowEdge, HTuple* ColumnEdge, HTuple* Amplitude, HTuple* FuzzyScore, HTuple* Distance) const
(Nur Windows)
void HImage::FuzzyMeasurePos(const HMeasure& MeasureHandle, double Sigma, double AmpThresh, double FuzzyThresh, const HString& Transition, HTuple* RowEdge, HTuple* ColumnEdge, HTuple* Amplitude, HTuple* FuzzyScore, HTuple* Distance) const
void HImage::FuzzyMeasurePos(const HMeasure& MeasureHandle, double Sigma, double AmpThresh, double FuzzyThresh, const char* Transition, HTuple* RowEdge, HTuple* ColumnEdge, HTuple* Amplitude, HTuple* FuzzyScore, HTuple* Distance) const
void HImage::FuzzyMeasurePos(const HMeasure& MeasureHandle, double Sigma, double AmpThresh, double FuzzyThresh, const wchar_t* Transition, HTuple* RowEdge, HTuple* ColumnEdge, HTuple* Amplitude, HTuple* FuzzyScore, HTuple* Distance) const
(Nur Windows)
static void HOperatorSet.FuzzyMeasurePos(HObject image, HTuple measureHandle, HTuple sigma, HTuple ampThresh, HTuple fuzzyThresh, HTuple transition, out HTuple rowEdge, out HTuple columnEdge, out HTuple amplitude, out HTuple fuzzyScore, out HTuple distance)
void HMeasure.FuzzyMeasurePos(HImage image, double sigma, double ampThresh, double fuzzyThresh, string transition, out HTuple rowEdge, out HTuple columnEdge, out HTuple amplitude, out HTuple fuzzyScore, out HTuple distance)
void HImage.FuzzyMeasurePos(HMeasure measureHandle, double sigma, double ampThresh, double fuzzyThresh, string transition, out HTuple rowEdge, out HTuple columnEdge, out HTuple amplitude, out HTuple fuzzyScore, out HTuple distance)
Beschreibung
fuzzy_measure_posfuzzy_measure_posFuzzyMeasurePosFuzzyMeasurePosFuzzyMeasurePosfuzzy_measure_pos dient zur Extraktion von geradlinigen
Kanten, die senkrecht zur Hauptachse eines Rechtecks oder zu einem
Kreisringsegment liegen. Im Unterschied zu measure_posmeasure_posMeasurePosMeasurePosMeasurePosmeasure_pos können
die Kanten zusätzlich mit Hilfe von Fuzzy-Funktionen bewertet und
ausgewählt werden.
Das Konzept der 1D-Vermessung ist bei der Einleitung
zu Kapitel 1D-Vermessung beschrieben.
Der Algorithmus von fuzzy_measure_posfuzzy_measure_posFuzzyMeasurePosFuzzyMeasurePosFuzzyMeasurePosfuzzy_measure_pos
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
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_rectangle2GenMeasureRectangle2GenMeasureRectangle2GenMeasureRectangle2gen_measure_rectangle2
(bzw. gen_measure_arcgen_measure_arcGenMeasureArcGenMeasureArcGenMeasureArcgen_measure_arc) verwendet, um diese
Berechnungen nur einmal ausführen zu müssen, und somit die
Geschwindigkeit von fuzzy_measure_posfuzzy_measure_posFuzzyMeasurePosFuzzyMeasurePosFuzzyMeasurePosfuzzy_measure_pos 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_rectangle2GenMeasureRectangle2GenMeasureRectangle2GenMeasureRectangle2gen_measure_rectangle2
(bzw. gen_measure_arcgen_measure_arcGenMeasureArcGenMeasureArcGenMeasureArcgen_measure_arc) 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_rectangle2GenMeasureRectangle2GenMeasureRectangle2GenMeasureRectangle2gen_measure_rectangle2
(bzw. gen_measure_arcgen_measure_arcGenMeasureArcGenMeasureArcGenMeasureArcgen_measure_arc) erzeugt wurde, wird in
MeasureHandleMeasureHandleMeasureHandleMeasureHandlemeasureHandlemeasure_handle ü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
AmpThreshAmpThreshAmpThreshAmpThreshampThreshamp_thresh selektiert werden, der einen Schwellenwert für die
Kantenamplitude, d.h. den Absolutbetrag der ersten Ableitung, festlegt.
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
(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").
Sind die subpixelgenauen Kanten extrahiert, werden ausgewählte
Merkmale der Kanten mit Hilfe einer zugehörigen Fuzzy-Funktion bewertet,
welche mit set_fuzzy_measureset_fuzzy_measureSetFuzzyMeasureSetFuzzyMeasureSetFuzzyMeasureset_fuzzy_measure gesetzt werden kann. Welche
Kanten ausgewählt werden wird mit dem Parameter FuzzyThreshFuzzyThreshFuzzyThreshFuzzyThreshfuzzyThreshfuzzy_thresh
beeinflusst, welcher eine Schwelle über die Bewertung aller Fuzzy-Sets
angibt, d.h. über den geometrischen Mittelwert der einzelnen
Gewichtungen der Sets.
Die extrahierten Kanten werden als einzelne Punkte, die auf der
Hauptachse des Rechtecks oder dem mittleren Bogen des
Kreisringsegments liegen, in
(RowEdgeRowEdgeRowEdgeRowEdgerowEdgerow_edge, ColumnEdgeColumnEdgeColumnEdgeColumnEdgecolumnEdgecolumn_edge) zurückgegeben. Die
zugehörigen Kantenamplituden werden in AmplitudeAmplitudeAmplitudeAmplitudeamplitudeamplitude, die
Fuzzy-Bewertungen der Kanten in FuzzyScoreFuzzyScoreFuzzyScoreFuzzyScorefuzzyScorefuzzy_score 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 RowEdgeRowEdgeRowEdgeRowEdgerowEdgerow_edge und
ColumnEdgeColumnEdgeColumnEdgeColumnEdgecolumnEdgecolumn_edge.
Achtung
fuzzy_measure_posfuzzy_measure_posFuzzyMeasurePosFuzzyMeasurePosFuzzyMeasurePosfuzzy_measure_pos liefert nur dann brauchbare Ergebnisse,
falls die Annahme, dass die Kanten gerade und senkrecht zur
Hauptachse des Rechtecks oder zum Kreisringsegment sind, erfüllt ist.
fuzzy_measure_posfuzzy_measure_posFuzzyMeasurePosFuzzyMeasurePosFuzzyMeasurePosfuzzy_measure_pos 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
SigmaSigmaSigmaSigmasigmasigma nicht größer als ca. 0.5 * Length1
(siehe gen_measure_rectangle2gen_measure_rectangle2GenMeasureRectangle2GenMeasureRectangle2GenMeasureRectangle2gen_measure_rectangle2 für Length1) sein.
Es ist zu beachten, dass fuzzy_measure_posfuzzy_measure_posFuzzyMeasurePosFuzzyMeasurePosFuzzyMeasurePosfuzzy_measure_pos 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.
Ausführungsinformationen
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Wird ohne Parallelisierung verarbeitet.
Parameter
ImageImageImageImageimageimage (input_object) singlechannelimage → objectHImageHObjectHImageHobject (byte / uint2 / real)
Eingabebild.
MeasureHandleMeasureHandleMeasureHandleMeasureHandlemeasureHandlemeasure_handle (input_control) measure → HMeasure, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)
Handle des Messobjekts.
SigmaSigmaSigmaSigmasigmasigma (input_control) number → HTuplefloatHTupleHtuple (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
sigma
≤
100 (lin)
Minimale Schrittweite: 0.01
Empfohlene Schrittweite: 0.1
AmpThreshAmpThreshAmpThreshAmpThreshampThreshamp_thresh (input_control) number → HTuplefloatHTupleHtuple (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
≤
AmpThresh
AmpThresh
AmpThresh
AmpThresh
ampThresh
amp_thresh
≤
255 (lin)
Minimale Schrittweite: 0.5
Empfohlene Schrittweite: 2
FuzzyThreshFuzzyThreshFuzzyThreshFuzzyThreshfuzzyThreshfuzzy_thresh (input_control) number → HTuplefloatHTupleHtuple (real) (double) (double) (double)
Minimale Fuzzy Bewertung.
Defaultwert: 0.5
Wertevorschläge: 0.1, 0.3, 0.5, 0.6, 0.7, 0.9
Typischer Wertebereich: 0.0
≤
FuzzyThresh
FuzzyThresh
FuzzyThresh
FuzzyThresh
fuzzyThresh
fuzzy_thresh
≤
1.0 (lin)
Empfohlene Schrittweite: 0.1
TransitionTransitionTransitionTransitiontransitiontransition (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
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"
RowEdgeRowEdgeRowEdgeRowEdgerowEdgerow_edge (output_control) point.y-array → HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Zeilenkoordinate des Mittelpunktes der Kante.
ColumnEdgeColumnEdgeColumnEdgeColumnEdgecolumnEdgecolumn_edge (output_control) point.x-array → HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Spaltenkoordinate des Mittelpunktes der Kante.
AmplitudeAmplitudeAmplitudeAmplitudeamplitudeamplitude (output_control) real-array → HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Kantenamplitude der Kanten (mit Vorzeichen).
FuzzyScoreFuzzyScoreFuzzyScoreFuzzyScorefuzzyScorefuzzy_score (output_control) real-array → HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Fuzzy-Bewertung der Kante.
DistanceDistanceDistanceDistancedistancedistance (output_control) real-array → HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Abstand zwischen aufeinanderfolgenden Kante.
Ergebnis
Sind die Parameterwerte korrekt, dann liefert
fuzzy_measure_posfuzzy_measure_posFuzzyMeasurePosFuzzyMeasurePosFuzzyMeasurePosfuzzy_measure_pos den Wert 2 (H_MSG_TRUE). Andernfalls wird eine
Fehlerbehandlung durchgeführt.
Vorgänger
gen_measure_rectangle2gen_measure_rectangle2GenMeasureRectangle2GenMeasureRectangle2GenMeasureRectangle2gen_measure_rectangle2,
gen_measure_arcgen_measure_arcGenMeasureArcGenMeasureArcGenMeasureArcgen_measure_arc,
set_fuzzy_measureset_fuzzy_measureSetFuzzyMeasureSetFuzzyMeasureSetFuzzyMeasureset_fuzzy_measure
Nachfolger
close_measureclose_measureCloseMeasureCloseMeasureCloseMeasureclose_measure
Alternativen
edges_sub_pixedges_sub_pixEdgesSubPixEdgesSubPixEdgesSubPixedges_sub_pix,
measure_posmeasure_posMeasurePosMeasurePosMeasurePosmeasure_pos
Siehe auch
fuzzy_measure_pairingfuzzy_measure_pairingFuzzyMeasurePairingFuzzyMeasurePairingFuzzyMeasurePairingfuzzy_measure_pairing,
fuzzy_measure_pairsfuzzy_measure_pairsFuzzyMeasurePairsFuzzyMeasurePairsFuzzyMeasurePairsfuzzy_measure_pairs,
measure_pairsmeasure_pairsMeasurePairsMeasurePairsMeasurePairsmeasure_pairs
Modul
1D Metrology