KlassenKlassenKlassenKlassen | | | | Operatoren

fuzzy_measure_posT_fuzzy_measure_posFuzzyMeasurePosfuzzy_measure_posFuzzyMeasurePosFuzzyMeasurePos (Operator)

Name

fuzzy_measure_posT_fuzzy_measure_posFuzzyMeasurePosfuzzy_measure_posFuzzyMeasurePosFuzzyMeasurePos — Extraktion geradliniger Kanten senkrecht zu einem Rechteck oder Kreisring.

Signatur

fuzzy_measure_pos(Image : : MeasureHandle, Sigma, AmpThresh, FuzzyThresh, Transition : RowEdge, ColumnEdge, Amplitude, FuzzyScore, Distance)

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)

Herror fuzzy_measure_pos(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)

HTuple HImage::FuzzyMeasurePos(const HMeasure& MeasureHandle, const HTuple& Sigma, const HTuple& AmpThresh, const HTuple& FuzzyThresh, const HTuple& Transition, HTuple* ColumnEdge, HTuple* Amplitude, HTuple* FuzzyScore, HTuple* Distance) const

HTuple HMeasure::FuzzyMeasurePos(const HImage& Image, const HTuple& Sigma, const HTuple& AmpThresh, const HTuple& FuzzyThresh, const HTuple& Transition, HTuple* ColumnEdge, HTuple* Amplitude, HTuple* FuzzyScore, HTuple* Distance) const

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 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 HOperatorSetX.FuzzyMeasurePos(
[in] IHUntypedObjectX* Image, [in] VARIANT MeasureHandle, [in] VARIANT Sigma, [in] VARIANT AmpThresh, [in] VARIANT FuzzyThresh, [in] VARIANT Transition, [out] VARIANT* RowEdge, [out] VARIANT* ColumnEdge, [out] VARIANT* Amplitude, [out] VARIANT* FuzzyScore, [out] VARIANT* Distance)

VARIANT HMeasureX.FuzzyMeasurePos(
[in] IHImageX* Image, [in] double Sigma, [in] double AmpThresh, [in] double FuzzyThresh, [in] BSTR Transition, [out] VARIANT* ColumnEdge, [out] VARIANT* Amplitude, [out] VARIANT* FuzzyScore, [out] VARIANT* Distance)

VARIANT HImageX.FuzzyMeasurePos(
[in] IHMeasureX* MeasureHandle, [in] double Sigma, [in] double AmpThresh, [in] double FuzzyThresh, [in] BSTR Transition, [out] VARIANT* ColumnEdge, [out] VARIANT* Amplitude, [out] VARIANT* FuzzyScore, [out] VARIANT* Distance)

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_posFuzzyMeasurePosfuzzy_measure_posFuzzyMeasurePosFuzzyMeasurePos dient zur Extraktion von geradlinigen Kanten, die senkrecht zur Hauptachse eines Rechtecks oder zu einem Kreisring liegen. Im Unterschied zu measure_posmeasure_posMeasurePosmeasure_posMeasurePosMeasurePos können die Kanten zusätzlich mit Hilfe von Fuzzy-Funktionen bewertet und ausgewählt werden.

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 (bzw. gen_measure_arcgen_measure_arcGenMeasureArcgen_measure_arcGenMeasureArcGenMeasureArc) verwendet, um diese Berechnungen nur einmal ausführen zu müssen, und somit die Geschwindigkeit von fuzzy_measure_posfuzzy_measure_posFuzzyMeasurePosfuzzy_measure_posFuzzyMeasurePosFuzzyMeasurePos 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 (bzw. 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 (bzw. 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 AmpThreshAmpThreshAmpThreshAmpThreshAmpThreshampThresh selektiert werden, der einen Schwellwert 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 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").

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_measureSetFuzzyMeasureset_fuzzy_measureSetFuzzyMeasureSetFuzzyMeasure gesetzt werden kann. Welche Kanten ausgewählt werden wird mit dem Parameter FuzzyThreshFuzzyThreshFuzzyThreshFuzzyThreshFuzzyThreshfuzzyThresh 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 Kreisrings liegen, in (RowEdgeRowEdgeRowEdgeRowEdgeRowEdgerowEdge,ColumnEdgeColumnEdgeColumnEdgeColumnEdgeColumnEdgecolumnEdge) zurückgegeben. Die zugehörigen Kantenamplituden werden in AmplitudeAmplitudeAmplitudeAmplitudeAmplitudeamplitude, die Fuzzy-Bewertungen der Kanten in FuzzyScoreFuzzyScoreFuzzyScoreFuzzyScoreFuzzyScorefuzzyScore 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.

Achtung

fuzzy_measure_posfuzzy_measure_posFuzzyMeasurePosfuzzy_measure_posFuzzyMeasurePosFuzzyMeasurePos liefert nur dann brauchbare Ergebnisse, falls die Annahme, dass die Kanten gerade und senkrecht zur Hauptachse des Rechtecks oder zum Kreisring sind, erfüllt ist. fuzzy_measure_posfuzzy_measure_posFuzzyMeasurePosfuzzy_measure_posFuzzyMeasurePosFuzzyMeasurePos 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 fuzzy_measure_posfuzzy_measure_posFuzzyMeasurePosfuzzy_measure_posFuzzyMeasurePosFuzzyMeasurePos 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.

Parallelisierung

Parameter

ImageImageImageImageImageimage (input_object)  singlechannelimage objectHImageHImageHImageHImageXHobject (byte / uint2 / real)

Eingabebild.

MeasureHandleMeasureHandleMeasureHandleMeasureHandleMeasureHandlemeasureHandle (input_control)  measure_id HMeasure, HTupleHTupleHMeasure, HTupleHMeasureX, VARIANTHtuple (integer) (IntPtr) (Hlong) (Hlong) (Hlong) (Hlong)

Handle des Messobjekts.

SigmaSigmaSigmaSigmaSigmasigma (input_control)  number HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (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

Restriktion: Sigma >= 0.4

AmpThreshAmpThreshAmpThreshAmpThreshAmpThreshampThresh (input_control)  number HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (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 ampThresh ≤ 255 (lin)

Minimale Schrittweite: 0.5

Empfohlene Schrittweite: 2

FuzzyThreshFuzzyThreshFuzzyThreshFuzzyThreshFuzzyThreshfuzzyThresh (input_control)  number HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (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 fuzzyThresh ≤ 1.0 (lin)

Empfohlene Schrittweite: 0.1

TransitionTransitionTransitionTransitionTransitiontransition (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (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"

RowEdgeRowEdgeRowEdgeRowEdgeRowEdgerowEdge (output_control)  point.y-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Zeilenkoordinate des Mittelpunktes der Kante.

ColumnEdgeColumnEdgeColumnEdgeColumnEdgeColumnEdgecolumnEdge (output_control)  point.x-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Spaltenkoordinate des Mittelpunktes der Kante.

AmplitudeAmplitudeAmplitudeAmplitudeAmplitudeamplitude (output_control)  real-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Kantenamplitude der Kanten (mit Vorzeichen).

FuzzyScoreFuzzyScoreFuzzyScoreFuzzyScoreFuzzyScorefuzzyScore (output_control)  real-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Fuzzy-Bewertung der Kante.

DistanceDistanceDistanceDistanceDistancedistance (output_control)  real-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Abstand zwischen aufeinanderfolgenden Kante.

Ergebnis

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

Vorgänger

gen_measure_rectangle2gen_measure_rectangle2GenMeasureRectangle2gen_measure_rectangle2GenMeasureRectangle2GenMeasureRectangle2, gen_measure_arcgen_measure_arcGenMeasureArcgen_measure_arcGenMeasureArcGenMeasureArc, set_fuzzy_measureset_fuzzy_measureSetFuzzyMeasureset_fuzzy_measureSetFuzzyMeasureSetFuzzyMeasure

Nachfolger

close_measureclose_measureCloseMeasureclose_measureCloseMeasureCloseMeasure

Alternativen

edges_sub_pixedges_sub_pixEdgesSubPixedges_sub_pixEdgesSubPixEdgesSubPix, measure_posmeasure_posMeasurePosmeasure_posMeasurePosMeasurePos

Siehe auch

fuzzy_measure_pairingfuzzy_measure_pairingFuzzyMeasurePairingfuzzy_measure_pairingFuzzyMeasurePairingFuzzyMeasurePairing, fuzzy_measure_pairsfuzzy_measure_pairsFuzzyMeasurePairsfuzzy_measure_pairsFuzzyMeasurePairsFuzzyMeasurePairs, measure_pairsmeasure_pairsMeasurePairsmeasure_pairsMeasurePairsMeasurePairs

Modul

1D Metrology


KlassenKlassenKlassenKlassen | | | | Operatoren