fuzzy_measure_pos
— Extraktion geradliniger Kanten senkrecht zu einem Rechteck oder
Kreisringsegment.
fuzzy_measure_pos(Image : : MeasureHandle, Sigma, AmpThresh, FuzzyThresh, Transition : RowEdge, ColumnEdge, Amplitude, FuzzyScore, Distance)
fuzzy_measure_pos
dient zur Extraktion von geradlinigen
Kanten, die senkrecht zur Hauptachse eines Rechtecks oder zu einem
Kreisringsegment liegen. Im Unterschied zu measure_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_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
Image
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_rectangle2
(bzw. gen_measure_arc
) verwendet, um diese
Berechnungen nur einmal ausführen zu müssen, und somit die
Geschwindigkeit von fuzzy_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_rectangle2
(bzw. gen_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_rectangle2
(bzw. gen_measure_arc
) erzeugt wurde, wird in
MeasureHandle
übergeben.
Nach der Bestimmung des eindimensionalen Kantenprofils werden die
subpixelgenauen Kantenpositionen durch Faltung des Profils mit den
Ableitungen einer Gauß-Maske mit Standardabweichung Sigma
berechnet. Auffällige Kanten können mit dem Parameter
AmpThresh
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 Kreisringsegments darstellen
(Transition
=
'positive' ), nur negative Kanten, also
Hell-Dunkel-Übergänge (Transition
= 'negative' )
oder alle Kanten zu selektieren (Transition
=
'all' ).
Sind die subpixelgenauen Kanten extrahiert, werden ausgewählte
Merkmale der Kanten mit Hilfe einer zugehörigen Fuzzy-Funktion bewertet,
welche mit set_fuzzy_measure
gesetzt werden kann. Welche
Kanten ausgewählt werden wird mit dem Parameter FuzzyThresh
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
(RowEdge
,ColumnEdge
) zurückgegeben. Die
zugehörigen Kantenamplituden werden in Amplitude
, die
Fuzzy-Bewertungen der Kanten in FuzzyScore
zurückgeliefert.
Zusätzlich wird noch der Abstand von
aufeinanderfolgenden Kantenpunkten in Distance
zurückgeliefert. Dabei entspricht Distance[i] dem Abstand von
Edge[i] und Edge[i+1]. D.h., das Tupel Distance
enthält
ein Element weniger als die Tupel RowEdge
und
ColumnEdge
.
fuzzy_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_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
Sigma
nicht größer als ca. 0.5 * Length1
(siehe gen_measure_rectangle2
für Length1) sein.
Es ist zu beachten, dass fuzzy_measure_pos
den
Definitionsbereich von Image
aus Geschwindigkeitsgründen
ignoriert. Falls bestimmte Bildbereiche von der Messung
ausgeschlossen werden sollen, sollte ein neues Messobjekt mit
entsprechend angepassten Parametern erzeugt werden.
Image
(input_object) singlechannelimage →
object (byte / uint2 / real)
Eingabebild.
MeasureHandle
(input_control) measure →
(handle)
Handle des Messobjekts.
Sigma
(input_control) number →
(real)
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
≤
100
(lin)
Minimale Schrittweite: 0.01
Empfohlene Schrittweite: 0.1
Restriktion: Sigma >= 0.4
AmpThresh
(input_control) number →
(real)
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
≤
255
(lin)
Minimale Schrittweite: 0.5
Empfohlene Schrittweite: 2
FuzzyThresh
(input_control) number →
(real)
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
≤
1.0
(lin)
Empfohlene Schrittweite: 0.1
Transition
(input_control) string →
(string)
Hell/Dunkel oder Dunkel/Hell Kante.
Defaultwert: 'all'
Werteliste: 'all' , 'negative' , 'positive'
RowEdge
(output_control) point.y-array →
(real)
Zeilenkoordinate des Mittelpunktes der Kante.
ColumnEdge
(output_control) point.x-array →
(real)
Spaltenkoordinate des Mittelpunktes der Kante.
Amplitude
(output_control) real-array →
(real)
Kantenamplitude der Kanten (mit Vorzeichen).
FuzzyScore
(output_control) real-array →
(real)
Fuzzy-Bewertung der Kante.
Distance
(output_control) real-array →
(real)
Abstand zwischen aufeinanderfolgenden Kante.
Sind die Parameterwerte korrekt, dann liefert
fuzzy_measure_pos
den Wert 2 (H_MSG_TRUE). Andernfalls wird eine
Fehlerbehandlung durchgeführt.
gen_measure_rectangle2
,
gen_measure_arc
,
set_fuzzy_measure
fuzzy_measure_pairing
,
fuzzy_measure_pairs
,
measure_pairs
1D Metrology