measure_pos
— Extraktion geradliniger Kanten senkrecht zu einem Rechteck oder
Kreisringsegment.
measure_pos(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdge, ColumnEdge, Amplitude, Distance)
measure_pos
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_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
b.z.w. gen_measure_arc
verwendet,
um diese Berechnungen nur
einmal ausführen zu müssen, und somit die Geschwindigkeit von
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
und
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
/
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
Threshold
, 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,
(Transition
=
'positive' ), nur negative Kanten, also
Hell-Dunkel-Übergänge, (Transition
= 'negative' )
oder alle Kanten zu selektieren (Transition
=
'all' ). Schließlich kann gewählt werden, welche der
extrahierten Kanten zurückgeliefert werden sollen. Wenn
Select
auf 'all' gesetzt wird, werden alle
gefundenen Kanten zurückgegeben, falls Select
auf
'first' gesetzt wird, nur die erste Kante, und falls
Select
auf '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
(RowEdge
,ColumnEdge
) zurückgegeben. Die
zugehörigen Kantenamplituden werden in Amplitude
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
.
measure_pos
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_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 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
Threshold
(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
≤
Threshold
≤
255
(lin)
Minimale Schrittweite: 0.5
Empfohlene Schrittweite: 2
Transition
(input_control) string →
(string)
Hell/dunkel oder dunkel/hell Kante.
Defaultwert: 'all'
Werteliste: 'all' , 'negative' , 'positive'
Select
(input_control) string →
(string)
Auswahl der Endpunkte.
Defaultwert: 'all'
Werteliste: 'all' , 'first' , 'last'
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 Kante (mit Vorzeichen).
Distance
(output_control) real-array →
(real)
Abstand zwischen aufeinanderfolgenden Kanten.
Sind die Parameterwerte korrekt, dann liefert measure_pos
den Wert 2 (H_MSG_TRUE). Andernfalls wird eine Fehlerbehandlung durchgeführt.
edges_sub_pix
,
fuzzy_measure_pos
measure_pairs
,
fuzzy_measure_pairs
,
fuzzy_measure_pairing
1D Metrology