F_VN_LocateAxisAlignedEdges
Locate the position of multiple occurring edges inside a specified search window. The edges inside the search window must be straight and aligned to one of the image axes. They are located by interpolating the peaks of the first Gaussian derivative of the pixel intensities.
Syntax
Definition:
FUNCTION F_VN_LocateAxisAlignedEdges : HRESULT
VAR_INPUT
ipSrcImage : ITcVnImage;
ipEdgePoints : Reference To ITcVnContainer;
END_VAR
VAR_IN_OUT
aStartPoint : TcVnPoint2_DINT;
aEndPoint : TcVnPoint2_DINT;
END_VAR
VAR_INPUT
nSearchWindowHeight : UDINT;
nKernelSize : UDINT;
nNumEdges : UDINT;
eEdgeSelection : ETcVnEdgeSelection;
fMinStrength : REAL;
hrPrev : HRESULT;
END_VAR
VAR_OUTPUT
fAvgStrength : REAL;
END_VARInputs
|
Name |
Type |
Description |
|---|---|---|
|
ipSrcImage |
Source image (1 channel of type ET_USINT, ET_UINT, ET_INT or ET_REAL) | |
|
ipEdgePoints |
Reference To ITcVnContainer |
Returns the detected edge points (ContainerType_Vector_TcVnPoint2_REAL) |
|
nSearchWindowHeight |
UDINT |
Specifies the height of the search window, i.e. the number of rows for horizontal or columns for vertical search directions, centered around the line between aStartPoint and aEndPoint. Depending on the orientation, the rows or columns inside that window are averaged and the edges are located on that averaged row or column. Therefore it is important that the edges inside the defined search window are straight and perpendicular to the search direction. |
|
nKernelSize |
UDINT |
The size of the Gaussian derivative kernel, that is used to locate the edges. The size must be odd and >= 3 (5 or 7 are usually a good choice for sharp edges). A suitable sigma parameter for the Gaussian derivative function is automatically chosen. |
|
nNumEdges |
UDINT |
The (maximum) number of edges to search for |
|
eEdgeSelection |
Selects the edge directions to search for | |
|
fMinStrength |
REAL |
Specification of the minimum strength (absolute peak height of the Gaussian derivative of the pixel intensities) of the edge to search for. This value depends on the edge sharpness and nKernelSize, but is generally smaller or equal to the difference of the pixel intensities of the edge. Sharp edges have a higher peak than unsharp ones. Initially, you might choose a relatively small value (e.g. 30) and then increase it depending on the fAvgStrength output. |
|
hrPrev |
HRESULT indicating the result of previous operations (If SUCCEEDED(hrPrev) equals false, no operation is executed.) |
In/Outputs
|
Name |
Type |
Description |
|---|---|---|
|
aStartPoint |
Position from which to start the search process (in the direction of aEndPoint) | |
|
aEndPoint |
Position where the search process ends. As the search direction must be parallel to one of the images axes, aEndPoint must have the same x- or y-coordinate as aStartPoint. |
Outputs
|
Name |
Type |
Description |
|---|---|---|
|
fAvgStrength |
REAL |
Returns the average strength of the detected edges |
Weiterführende Informationen
Die Funktion F_VN_LocateAxisAlignedEdges lokalisiert die Positionen einer oder mehrerer Kanten innerhalb eines definierten Suchfensters. Die Kanten müssen dabei gerade und parallel zu einer der beiden Bildachsen verlaufen. Die Lokalisierung erfolgt über die erste Gaußsche Ableitung der Pixelintensitäten. An jedem Kantenübergang entsteht im Ableitungsprofil ein ausgeprägter Peak, dessen Position durch Interpolation subpixelgenau bestimmt wird.
Die Suche verläuft entlang der Linie von aStartPoint nach aEndPoint, entweder senkrecht oder waagerecht. Das Suchfenster wird in der Breite durch den Abstand von Start- und Endpunkt definiert, die Höhe (nSearchWindowHeight) liegt zentriert um diese Mittellinie. Die Pixel in diesem Bereich werden, je nach Ausrichtung der Suchrichtung, zu einer Bildzeile bzw. -spalte gemittelt.
Auf diesem gemittelten 1D-Intensitätsprofil werden die Kanten anschließend detektiert. Die Mittelung bringt dabei mehrere Vorteile: Bildrauschen wird deutlich reduziert und lokale Störungen wie Kratzer, Materialtextur oder einzelne defekte Pixel verlieren an Gewicht, da sie meist nur wenige Pixel betreffen. Zudem verkürzt sich die Ausführungszeit, da nur ein einziges gemitteltes Profil ausgewertet wird, anstatt die Kantenpositionen auf mehreren Suchlinien einzeln mit anderen Berechnungsverfahren zu bestimmen. Voraussetzung ist jedoch, dass die genannte Bedingung über die gesamte Fensterhöhe erfüllt ist. Andernfalls wird die Kante durch die Mittelung „verschmiert" und das Messergebnis verliert an Genauigkeit oder die Detektion schlägt fehl.
Die Funktion ist auf achsparallele Kanten ausgelegt. Liegen die Kanten gedreht oder frei orientiert im Bild, bestehen zwei Möglichkeiten: Entweder wird über eine Vorverarbeitung eine zu einer Bildachse ausgerichtete ROI erzeugt, oder es wird eine andere Vermessungsfunktion für frei orientierte Suchlinien verwendet (z. B. F_VN_LocateEdges).
Parameter
Eingangsbild
Das Eingangsbild ipSrcImage muss ein 1-kanaliges Grauwertbild vom Typ ET_USINT, ET_UINT, ET_INT oder ET_REAL sein.
Lokalisierte Kantenpunkte
Der Rückgabewert ipEdgePoints gibt die lokalisierten Kantenpunkte als Container vom Typ ContainerType_Vector_TcVnPoint2_REAL zurück. Die Anzahl der tatsächlich gefundenen Kanten kann kleiner als nNumEdges sein.
Suchfenster
Die Parameter aStartPoint und aEndPoint legen Start- und Endpunkt der Suchlinie und damit die Breite des Suchfensters fest. Da die Suchrichtung achsparallel sein muss, gilt zwingend entweder gleiche x-Koordinate (vertikale Suche) oder gleiche y-Koordinate (horizontale Suche). Die Reihenfolge der zurückgegebenen Kanten entspricht der Suchrichtung, sodass sich die Richtung von Start- nach Endpunkt auch dazu nutzen lässt, die Kantenabfolge (und damit z. B. steigende/fallende Übergänge) gezielt zu ordnen.
Der Parameter nSearchWindowHeight legt die Höhe des Suchfensters senkrecht zur Suchrichtung fest, also die Anzahl der zu mittelnden Zeilen (bei horizontaler Suche) bzw. Spalten (bei vertikaler Suche). Das Fenster ist symmetrisch um die Linie zwischen aStartPoint und aEndPoint zentriert.
Filter-Größe
Der Parameter nKernelSize bestimmt die Größe des Gauß-Ableitungskerns zur Kantenlokalisierung. Der Wert muss ungerade und >= 3 sein. Für scharfe Kanten sind 5 oder 7 in der Regel eine gute Wahl. Ein kleiner Kern reagiert empfindlich auf feine, scharfe Kanten, aber auch stärker auf Rauschen; ein größerer Kern glättet stärker und eignet sich besser für unscharfe oder verrauschte Kanten, kann jedoch dicht beieinanderliegende Kanten verschmelzen. Ein passender Sigma-Wert der Gauß-Ableitung wird automatisch aus nKernelSize abgeleitet.
Anzahl Kanten
Der Parameter nNumEdges gibt die maximale Anzahl der zu suchenden Kanten an. Es werden die Kanten (Peaks im Ableitungsprofil) zurückgegeben, die das Kriterium fMinStrength erfüllen, bis die angegebene Anzahl erreicht ist. Sind weniger passende Kanten vorhanden, werden entsprechend weniger Punkte geliefert.
Kantenrichtung
Der Parameter eEdgeSelection vom Typ ETcVnEdgeSelection legt fest, welche Kantenrichtungen gesucht werden:
TCVN_ES_RISING: Nur steigende Kanten, d. h. Übergänge von dunkel nach hell.TCVN_ES_FALLING: Nur fallende Kanten, d. h. Übergänge von hell nach dunkel.TCVN_ES_ANY: Beliebige Kantenrichtung, d. h. steigende oder fallende Kanten.
Minimalstärke
Der Parameter fMinStrength gibt die minimale Kantenstärke an, also die absolute Peak-Höhe im Gauß-Ableitungsprofil der Pixelintensitäten. Der Wert hängt von der Kantenschärfe und von nKernelSize ab, liegt aber typischerweise unter oder gleich der Intensitätsdifferenz der Kante. Scharfe Kanten erzeugen höhere Peaks als unscharfe. In der Praxis empfiehlt es sich, mit einem eher kleinen Wert zu beginnen (z. B. 30) und ihn anhand des Rückgabewerts fAvgStrength schrittweise anzuheben, bis nur noch die relevanten Kanten sicher detektiert und Störkanten zuverlässig unterdrückt werden.
Kantenstärke
Der Rückgabewert fAvgStrength gibt die mittlere Stärke der detektierten Kanten zurück. Er dient vor allem als Diagnose- und Einstellhilfe für fMinStrength. Ein deutlicher Abstand zwischen fAvgStrength und fMinStrength weist auf robuste, klar messbare Kanten hin.
Expert-Parameter
Die Expert-Variante F_VN_LocateAxisAlignedEdgesExp enthält zusätzliche Parameter.
Required License
TC3 Vision Metrology 2D
System Requirements
Development environment | Target platform | PLC libraries to include |
|---|---|---|
TwinCAT V3.1.4024.59 or later | PC or CX (x64) with min. PL50, e.g. Intel 4-core Atom CPU | Tc3_Vision |