Measurement

Die Gruppe enthält Funktionen zur Vermessung von Objekten auf Bildern.

Funktionen

Kantenlokalisierung

Geometrische Merkmale

Sonstiges

Parameter zur Kantenlokalisierung

Die Grenzen eines Bildobjekts liegen häufig nicht exakt auf der Grenze zwischen zwei Pixeln. Sie verlaufen stattdessen unabhängig von Pixelraster. Daher ist eine Subpixel-genaue Kantenlokalisierung nötig. Diese betrachtet nicht nur den Übergang zwischen zwei Pixeln, sondern bestimmt anhand des gesamten Intensitätsverlaufs einer Objektgrenze die Kantenposition innerhalb eines Pixels.

Hinweis

Bild vor Vermessung nicht bearbeiten

Bearbeiten Sie das Bild vor dem Aufruf der Vermessungsfunktion nicht. Eine Bearbeitung kann zu Informationsverlust und entsprechend geringerer Genauigkeit führen.

Diese Grundfunktionalität der Kantenlokalisierung wird von allen Vermessungsfunktionen verwendet. Die Funktionen unterscheiden sich hauptsächlich darin, in welcher geometrischen Anordnung sie die Kantenlokalisierung durchführen (z.  B. LocateEllipse für runde Objekte) und welche Eigenschaften Sie daraus berechnen (z. B. MeasureAngleBetweenEdges zur Winkelvermessung).

Bei jeder Funktion, die Kantenlokalisierung nutzt, müssen bestimmte Parameter definiert werden. Dazu gehören:

  • Definition des Suchbereichs: Wo wird die Kante gesucht?
  • Definition des Kantenkontrasts: Was wird als Kante erkannt?
  • Definition des Vermessungsalgorithmus: Wie soll die genaue Position der Kante bestimmt werden.

Diese Parameter sind folgend beschrieben. Bei Expert-Parametern sind zudem Standard-Werte angegeben.

Suchbereich

Parameter

Beschreibung

Lage der Suchlinien

Die Lage der Suchlinien wird je nach zu lokalisierendem Merkmal definiert.

Die Lage von Suchlinien für eine lineare Kante wird als einzelne Linie mit Startpunkt aStartPoint und Endpunkt aEndPoint definiert.

Die Lage von Suchlinien für eine Ellipse wird durch einen Mittelpunkt aCenter und einen Radius fSearchRadius definiert.

Die Lage von Suchlinien für Winkel wird durch einen Innenpunkt aInnerPoint und zwei Außenpunkte aOuterPoint1 und aOuterPoint2 definiert.

Die Lage der Suchlinien sollte immer so eingestellt werden, dass die Suchlinien die zu lokalisierenden Kanten orthogonal schneiden. Ein rechteckiger Suchbereich kann bei Bedarf mit der Funktion AdjustSearchWindowOrientationToLinearEdge orthogonal an eine Kante angepasst werden.

Anzahl der Suchlinien

nSearchLines

Hiermit wird festgelegt, wie viele Suchlinien für die Kantenlokalisierung verwendet werden sollen. Die einfachste Kantenlokalisierung hat eine Suchlinie, auf der die Kante gefunden werden muss. Bei mehreren Suchlinien werden je nach zu bestimmendem geometrischem Merkmal örtlich verteilt, sodass mehrere Kantenübergänge lokalisiert werden.

Dies kann in folgenden Fällen nötig sein:

  • Nicht nur die Position, sondern auch der Verlauf oder die Rotation der Kante gefragt sind.
  • Das geometrische Merkmal (z. B. Ellipse) erfordert mehrere Suchlinien.
  • Ein Durchschnittswert ist gefordert.

Bei der Lokalisierung von linearen Kanten werden die Suchlinien symmetrisch auf beiden Seiten der zentralen Suchlinie angeordnet, wobei die zentrale Suchlinie in nSearchLines inklusiv ist. Somit wird immer eine ungerade Anzahl an Suchlinien benötigt.

Abstand der Suchlinien

fSearchlineDist

(Expert)

Standard: 1

Die Suchlinien-Distanz definiert den Abstand zwischen benachbarten Suchlinien in Pixeln (> 0, default 1). Dadurch kann flexibel zwischen Genauigkeit und benötigter Rechenzeit abgewogen werden.

Invertierung der Suchrichtung

bInvertSearchDirection

(Expert)

Standard: false

Der Lokalisierungsalgorithmus sucht die Kante immer von einem Ende der Suchlinie zum anderen. Z. B. wird von aStartPoint nach aEndPoint gesucht. Wenn es aufgrund der Bildbeschaffenheit nötig ist diese Suchrichtung zu invertieren (also vom anderen Ende der Suchlinien aus anzufangen), hilft dieser Parameter.

Kontrast der Kante

Parameter

Beschreibung

Kantenrichtung

eEdgeDirection

Die Kantenrichtung ETcVnEdgeDirection legt fest, ob ein Kantenübergang von Hell nach Dunkel oder von Dunkel nach Hell gefunden werden soll. Dazu stehen folgende Werte zur Verfügung:

  • ED_DARK_TO_LIGHT
  • ED_LIGHT_TO_DARK

Minimalstärke

fMinStrength

Die Minimalstärke legt fest, wie groß der Intensitätsunterschied innerhalb einer Kante mindestens sein muss, damit sie gefunden wird.

Dadurch lässt sich steuern, wie viel Kontrast eine Kante haben muss, um gefunden zu werden.

Maximaldicke

nMaxThickness

(Expert)

Standard: 10

Die Maximaldicke legt fest, innerhalb von wie vielen Pixeln fMinStrength erreicht werden muss.

Dadurch lässt sich steuern, ob nur scharfe Kanten oder auch sehr unscharfe Kanten gefunden werden sollen.

Algorithmus

Parameter

Beschreibung

Algorithmus

eAlgorithm

(Expert)

Standard: EDA_INTERPOLATION

Der Parameter ETcVnEdgeDetectionAlgorithm definiert den verwendeten Lokalisierungsalgorithmus. Zur Verfügung stehen:

  • EDA_INTERPOLATION
  • EDA_APPROX_ERF
  • EDA_APPROX_GAUSSIAN

EDA_APPROX_ERF und EDA_APPROX_GAUSSIAN sind langsamer als der Standard-Algorithmus EDA_INTERPOLATION, können aber eine höhere Genauigkeit erreichen. Voraussetzung dafür ist allerdings, dass der Intensitätsverlauf der Kante auch möglichst gut dem vorgegebenen Modell entspricht. Als Modell werden die Fehlerfunktion erf bzw. die Gauß-Funktion verwendet.

Die erf-Funktion ist gut für Kanten geeignet, wenn sich der Übergang von hell nach dunkel über mehrere Pixel erstreckt und auf beiden Seiten der helle bzw. dunkle Bereich in etwa konstant bleibt.

Measurement 1:

Eine Gauß-Funktion ist gut für Linien geeignet, d. h. ein Übergang dunkel-hell-dunkel oder umgekehrt. Das Helligkeitsplateau darf dabei aber nur wenige Pixel breit sein, ansonsten sollte die erf-Funktion verwendet werden.

Measurement 2:

Subpixel / Iterationen

nSubpixelsIterations

(Expert)

Standard: 10

Die Bedeutung dieses Parameters ist abhängig vom verwendeten Lokalisierungsalgorithmus.

Bei EDA_INTERPOLATION:

Die Anzahl der betrachteten Subpixel definiert, wie feingranular die Suchlinie die unterliegenden Pixelintensitäten auswertet. Ein Wert von 10 gibt z. B. an, dass auf der Länge von 1 Pixel 10 Messwerte genommen werden.

Empfohlen: 5 - 10

Bei EDA_APPROX_ERF und EDA_APPROX_GAUSSIAN:

Die Anzahl der Iterationen ist ein Abbruchkriterium, das definiert, mit maximal wie vielen Iterationen das Kantenmodell auf die Pixelintensitäten approximiert werden sollen. Mehr Iterationen erhöhen die Laufzeit, wenn diese zu hoch ist sollte die Interpolationsmethode verwendet werden.

Empfohlen: 50 - 100

Näherungsgenauigkeit

fApproxPrecision

(Expert)

Standard: 0.001

Die Näherungsgenauigkeit ist ein weiteres Abbruchkriterium der Kantenlokalisierung. Sie wird nur beachtet, wenn der Lokalisierungsalgorithmus EDA_APPROX_ERF oder EDA_APPROX_GAUSSIAN ist.

Die Approximation der Kante bzw. der Linie wird abgebrochen, wenn entweder die Anzahl der Iterationen von nSubPixelIterations erreicht oder die relative Abweichung in Pixeln zwei aufeinanderfolgender Iterationen kleiner als fApproximationPrecision ist

Empfohlen: 0.01 - 0.0001

Interpretation des HRESULT

Für Measurement-Funktionen haben die HRESULT–Rückgabewerte folgende Bedeutung:

Code

Name

Beschreibung

0x000

S_OK

Funktion wurde erfolgreich ausgeführt und auf allen Suchlinien wurde eine Kante lokalisiert.

0x001

S_FALSE

Funktion wurde erfolgreich ausgeführt, aber es wurde nicht auf jeder Suchlinie eine Kante lokalisiert.

0x256

S_WATCHDOGTIMEOUT

Funktion wurde vom Watchdog abgebrochen. In diesem Fall können alle Measurement-Funktionen Teilergebnisse zurückgeben.

0x70C

NOTFOUND

Funktion wurde erfolgreich ausgeführt, aber auf keiner Suchlinie konnte eine Kante gefunden werden. Es wird davon ausgegangen, dass eine Vermessungsfunktion nur aufgerufen wird, wenn sichergestellt ist, dass das Bild ein Objekt mit den parametrierten Kanteneigenschaften enthält. Ein Nicht-Finden aller Suchlinien deutet dabei auf eine falsche Parametrierung oder einen ungeeigneten Aufruf der Funktion hin. Daher wird in diesem Fall ein Error-Code ausgegeben.

0x7xx

Alle Error-Codes außer NOTFOUND

Funktion wurde nicht erfolgreich ausgeführt. Siehe dazu: ADS Return Codes

Zur Verarbeitung des Rückgabewerts kann beispielhaft folgende Abfrage benutzt werden:

if (SUCCEEDED(hr))
{
    // Process results
    if (hr != S_OK)
    {
        // Emit warning that not all search lines were found
    }
}
else if (hr == ADS_E_NOTFOUND)
{
    // Emit warning for wrong parametrization or missing piece
}
else
{
    // Error handling
}

Ausführungszeit reduzieren

Die Ausführungszeit schwankt bei einem festen Suchfenster leicht je nach Position des Bauteils im Bild. Ist die gefundene Kante näher am Startpunkt, ist die Ausführungszeit kürzer als bei einer weiter entfernten Kante.

Ein größeres Schwanken kann bei den beiden Approximierungs-Algorithmen auftreten, da diese unterschiedlich viele Iterationen benötigen, um die Modellparameter mittels der umliegenden Pixelintensitäten zu approximieren.

Generell werden weniger Iterationen benötigt, wenn die Suchlinien des Suchfensters möglichst orthogonal auf die Kante treffen. Falls die Position und Orientierung der Objekte im Bild keinen oder nur geringen Schwankungen unterliegen, richten Sie das Suchfenster entsprechend aus, um kürzere Ausführungszeiten zu erreichen. Zudem lässt sich die maximal benötigte Zeit reduzieren, indem die maximale Anzahl an Iterationen verringert wird, was aber ggf. auch ungenauere Ergebnisse liefert.

Zudem kann die Zeit auch mit einem Watchdog von außen begrenzt werden, der die Ausführung der Funktion bei Bedarf abbricht und die vorhandenen Teilergebnisse zurückliefert.