Konturen

Dieses Kapitel beschreibt die Verwendung von Konturen in TwinCAT Vision.

Was sind Konturen?

Im Allgemeinen ist eine Kontur (auch genannt Umriss) die Abgrenzung eines Objekts von seiner Umgebung, in der Bildverarbeitung klassischerweise zweidimensional. Eine Kontur beschreibt die Form, Größe und Lage dieses Objekts. Im Rahmen der Bildverarbeitung ist damit ein Objekt auf einem Bild gemeint; daher beschreibt eine Kontur die Umrisslinie des Objekts auf dem Bild.

Wie werden Konturen dargestellt?

Eine Kontur wird als eine Ansammlung von 2D-Punkten dargestellt. Die Punkte beziehen sich meist auf den Ursprung des Bildes, in dem das Objekt abgebildet ist, sofern keine ROI gesetzt wurde. Wenn man alle Punkte dieses Feldes mit geraden Linien verbindet, erhält man eine Zeichnung der Kontur.

Konturen 1:

Wie werden Konturen in TwinCAT Vision dargestellt?

Ein dynamisches Array von 2D-Punkten wird in TwinCAT Vision als Container (ITcVnContainer) von Punkten (TcVnPoint2_DINT/REAL) gehandhabt. Ein entsprechender Container hat dann die Typ-Bezeichnung ContainerType_Vector_TcVnPoint2_DINT/REAL.

Die Punkte liegen häufig direkt auf dem Pixel-Grid (z. B. bei einer Konturfindung). In diesem Fall werden DINT-Elemente zum Speichern der Punkte genutzt. Es gibt jedoch auch Fälle, in denen die Genauigkeit nicht ausreicht, und daher REALs genutzt werden (z. B. bei Vermessungen). Dann liegen die Punkte also nicht genau im Mittelpunkt eines Pixels, sondern irgendwo.

Zeichen-Funktionen können nur Konturen mit ganzzahligen Elementen in ein Bild zeichnen. Im Zweifel muss also der Element-Typ des Containers konvertiert werden.

Felder von Konturen

Häufig kommt es vor, dass mehrere Konturen gleichzeitig gehandhabt werden sollen (z. B. werden bei F_VN_FindContours üblicherweise mehrere Konturen gefunden). Das wird technisch derart umgesetzt, indem ein zweidimensionaler Container verwendet wird. Es gibt also ein Array von Konturen bzw. ein Array von Arrays aus 2D-Punkten. Die entsprechende Typ-Bezeichnung ist dann ContainerType_Vector_Vector_TcVnPoint2_DINT/REAL.

Konturen 2:

Was ist Kontur-Approximation?

Grundsätzlich kann für die Darstellung eines Objekts immer eine sehr große Anzahl an Punkten verwendet werden. Häufig ist die allerdings nicht nötig, da (näherungsweise) gerade Linien durch ihren Start- und Endpunkt approximiert werden können. Die Punkte dazwischen müssen nicht extra gespeichert werden, weil Start- und Endpunkt für die Definition ausreichen.

Je nach verwendeter Methodik und Geometrie der Objekte, kann die Approximation mehr oder weniger verlustbehaftet sein. Jedenfalls können bei unterschiedlicher Approximation auch die geometrischen Merkmale mit geringfügig anderen Werten berechnet werden.

Geometrische Merkmale

An Konturen, also aus den Arrays von Punkten lassen sich eine Vielzahl von einzelnen Merkmalen berechnen, die die jeweilige Kontur geometrisch beschreiben. Über diese Merkmale kann die Kontur und damit das jeweilige Objekt untersucht und z.B. klassifiziert werden. Zu diesen Merkmalen gehören:

Konturen 3:

Geschlossene und offene Konturen

Normalerweise ist eine Kontur geschlossen. In dem Fall werden das erste und das letzte Element des Arrays einfach als verbunden angesehen. Es ist aber auch möglich, eine offene Kontur zur haben. Offene und geschlossene Konturen unterscheiden sich also nicht durch ihre technische Darstellung, sondern über die Information, wie die Daten interpretiert werden sollen. An den relevanten Stellen der API wird entsprechend danach gefragt, ob die jeweilige Kontur offen oder geschlossen verwendet werden soll.

Beispiele