Operatoren |
Um den Ort eines Punktes in einem Bild festzulegen, braucht es eine Konvention, wie dies geschehen soll. Eine solche Konvention wird durch das Koordinatensystem festgelegt. In HALCON werden verschiedene Koordinatensysteme verwendet. Diese Kapitelreferenz gibt einen Überblick über die Systeme, die in 2D verwendet werden.
Pixel sind eigenständig und um sie zu adressieren gibt es ein Koordinatensystem, welches nur die ganzen Zahlen verwendet, das Pixel-Koordinatensystem. Mit einer feineren Auflösung werden Koordinaten in Fließkommazahlen benötigt, z.B. . Dies führt zu Subpixel-genauen Koordinatensystemen. In HALCON verwenden wir drei verschiedene Implementierungen dieser Subpixel-Koordinatensystemen:
Pixel-zentrierte Koordinaten, das HALCON Standard-Koordinatensystem
Ecken-zentrierte Koordinaten
Polarkoordinaten
Davon unterscheiden sich die ersten beiden bloß in der Wahl des Ursprungspunktes, wie in den folgenden Abbildungen ersichtlich wird. Kalibrierung ermöglicht die Zuordnung von Bild-Koordinaten und reellen Distanzen. Für mehr Informationen zu kalibrierten Koordinaten wird auf den „Solution Guide III-C - 3D Vision“ verwiesen.
Das Pixel-Koordinatensystem behandelt das Bild wie ein Netz diskreter Einheiten, den Pixeln. In HALCON setzen wir den Ursprung in die Mitte des Pixels oben links. Zur Zuordnung der Koordinaten eines Pixels werden wie in einer Matrix Zeile und Spalte angegeben.
Für ein Bild der Größe Höhe Breite = Pixel bedeutet dies, dass die Zeilen-Koordinate von bis läuft und die Spalten-Koordinate von bis , eine Visualisierung findet sich in der unten folgenden Abbildung.
Der Ursprung dieses Koordinatensystems liegt im Zentrum des Pixels oben links und damit bettet diese Konvention das Pixel-Koordinatensystem ein. Dies bedeutet, dass die Ecke oben links die Koordinaten hat und für ein Bild der Größe Höhe Breite = Pixel hat die Ecke unten rechts die Koordinaten (=, die Koordinaten-Werte starten bei 0). Der Pixel (k,l) bedeckt die Fläche des Rechteckes , , , . Diese Konvention wird in HALCON das Standard-Koordinatensystem oder auch das Bild-Koordinatensystem genannt.
Dieses Koordinatensystem ist wie eine Projektion der xy-Achse des 3D-Kamera-Koordinatensystems. Entsprechend haben die Achsen die Zuordnung Spalte: y, Zeile: x.
(1) | (2) |
Wird ein Bild um (=90 Grad) um seinen Ursprung rotiert, so erwartet man, dass sich ursprüngliches Bild und gedrehtes Bild in einer Ecke berühren, sich aber nicht überlagern. Ebenso soll eine Skalierung des Bildes nicht zu negativen Bild-Koordinaten führen. Dafür muss der Ursprung in einer Ecke sein. Dies motiviert das folgende Koordinatensystem.
In diesem Koordinatensystem liegt der Ursprung in der Ecke oben links. Somit hat das Zentrum des Pixels oben links die Koordinaten und für ein Bild der Größe Höhe Breite = Pixel hat die Ecke unten rechts die Koordinaten . Der Pixel bedeckt die Fläche des Rechtecks , , , .
Für dieses Koordinatensystem sind Rotationen im mathematisch positiven Drehsinn und somit gegen den Uhrzeigersinn definiert. Somit bildet eine Rotation um (=90 Grad) die erste Achse (= x-Achse) auf die zweite Achse (= y-Achse) ab. Entsprechend sind die Achsen wie folgt zugeordnet, Zeile: x, Spalte: y.
Der Operator affine_trans_point_2d wendet die durch HomMat2D definierte Transformation auf die Punkt-Koordinaten an. Das heißt, der Operator affine_trans_point_2d kann in beiden Kartesischen Koordinatensystemen verwendet werden, solange die Transformation und die Punkte im selben Koordinatensystem gegeben werden.
Die Operatoren angle_ll und angle_lx können zwar Eingabepunkte in Pixel-zentrierten Koordinaten erhalten, doch der Winkel wird stets nach der Konvention der Rotationen im mathematisch positiven Drehsinn zurückgegeben, d.h., gegen den Uhrzeigersinn, und mit der horizontalen Achse als 0-Wert, wie im ecken-zentrierter Koordinatensystem.
In HALCON gibt es Operatoren, welche die Eingaben in verschiedenen Koordinatensystemen erwarten. Einerseits ist das Objekt in seinen üblichen Koordinaten, den Standard-Koordinaten anzugeben. Andererseits erwartet der Operator für die Transformationsmatrix HomMat2D ecken-zentrierte Koordinaten mit deren oben erläuterten Vorteilen bezüglich Transformationen. Diese Operatoren transformieren die Koordinaten des Objekts von Standard-Koordinaten (mit dem Ursprung in der Mitte des Pixels oben links) in ecken-zentrierte Koordinaten (mit dem Ursprung in der Ecke oben links des Pixels oben links). Nach der Transformation mit HomMat2D wird das Resultat zurücktransformiert und in Standard-Koordinaten ausgegeben.
Dies gilt für folgende Operatoren:
These operators are
Eine Transformation (z.B. eine Rotation um einen bestimmten Punkt), die durch eine Matrix im Standard-Koordinatensystem repräsentiert wird, kann z.B. über folgende Transformation als entsprechende Matrix in Ecken-zentrierten Koordinaten notiert werden:
hom_mat2d_translate(HomMat2D, 0.5, 0.5, HomMat2DTmp) hom_mat2d_translate_local(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)
Es ist zu beachten, dass die zuvor erwähnten Operatoren beginnend mit projective_ eine projektive Transformationsmatrix verwenden. Diese Transformationsmatrix kann z.B. über 3D Kamera-Posen erhalten werden. Wird dies getan, so ist die verwendete Matrix in einer Projektion der xy-Ebene des 3D Koordinatensystems gegeben. Entsprechend haben die Achsen die Zuordnung Spalte: y, Zeile: x.
Die Resultate von form-basiertem Matching, wie z.B. find_shape_model, werden in ecken-zentrierten Koordinaten gegeben. Somit kann man diese Resultate direkte zur Erstellung von Transformationsmatrizen HomMat2D in ecken-zentrierten Koordinaten verwenden. Solche Transformationsmatrizen können mit Operatoren wie z.B. affine_trans_contour_xld und weiteren unter Operatoren, welche die Parameter in verschiedenen Koordinatensystemen erwarten gelisteten Operatoren angewendet werden.
Die Verwendung der Prozedur dev_display_shape_matching_results wird zur Darstellung der Resultate von form-basiertem Matching, insbesondere der Operatoren
stark empfohlen.
Die folgenden Abbildungen zeigen ein Beispiel, wie die Darstellung eines Matches aussieht, wenn die verwendete Transformationsmatrix in den korrekten, respektive falschen Koordinaten angegeben wird. Für Letztgenanntes, gezeigt in Abbildung (3), wurde die Transformationsmatrix in Pixel-zentrierten Koordinaten verwendet und so liegt der gezeigte Match mit affine_trans_contour_xld um 0.5 Pixel falsch. Man beachte, dass dieser Effekt nur sichtbar wird, wenn Rotationen involviert sind.
(1) | (2) | (3) |
Die Resultate von find_ncc_model und find_ncc_models werden ebenso in ecken-zentrierten Koordinaten gegeben. Deshalb kann man auch mit diesen Resultaten direkt eine Transformationsmatrix HomMat2D in ecken-zentrierten Koordinaten erstellen. Diese Transformationsmatrizen sind zur direkten Anwendung mit Operatoren wie z.B. affine_trans_contour_xld und weiteren unter Operatoren, welche die Parameter in verschiedenen Koordinatensystemen erwarten gelisteten Operatoren geeignet.
Zur Darstellung der Resultate korrelations-basierten Matchings wird die Prozedur dev_display_ncc_matching_results stark empfohlen.
In Polarkoordinaten werden Punkte durch einen Abstand und einen Winkel definiert. Der Abstand, Radialkoordinate genannt, wird zum festen Punkt, dem Pol, angegeben. Die Winkelkoordinate wird in Bezug zu einer fixen Achse, der Polarachse gemessen. In HALCON wird der Pol über festgelegt und die horizontalen Achse bildet die Polarachse.
Bei einer Transformation mit polar_trans_image_ext entspricht der Pixel oben links des Ausgabebildes jenem Punkt des Kreisrings im Eingabebild, der durch RadiusStart und AngleStart festgelegt wurde. Analog entspricht der Pixel unten rechts des Ausgabebildes jenem Punkt des Kreisrings im Eingabebild, der durch RadiusEnd und AngleEnd spezifiziert wurde. Dies bedeutet, dass in der üblichen Verwendungsweise (AngleStart < AngleEnd und RadiusStart < RadiusEnd ) die Transformation im mathematisch positiven Drehsinn (für den Betrachter gegen den Uhrzeigersinn) durchgeführt wird. Weiter werden dann Punkte mit kleinerem Radius weiter oben im Ausgabebild angezeigt. Durch geeignetes Austauschen der Parameterwerte (z.B. AngleStart > AngleEnd oder RadiusStart > RadiusEnd ) kann jeder beliebige Drehsinn des Ausgabebildes erreicht werden.
(1) | (2) | (3) |
Folgende Operatoren verwenden Polarkoordinaten:
polar_trans_image (legacy)
In den vorherigen Abschnitten wurden die Koordinaten von Bildern behandelt. In Bezug auf den Ursprung und das benutzte Koordinatensystem werden Bilder mit reduzierter Domäne, Regionen und Modelle jedoch unterschiedlich behandelt.
Sowohl Bilder mit reduzierter Domäne als auch Regionen behalten das Koordinatensystem des Bildes, auf welchem sie erstellt wurden. Dies bedeutet, dass sie den Ursprung erben und die Koordinatenwerte, die sie im Originalbild hatten, behalten.
Modelle, können ein lokales Koordinatensystem haben. So haben z.B. Modelle, die über create_shape_model erhalten wurden, ihren Ursprung im Schwerpunkt der ROI, aus der sie erstellt wurden. Für mehr Informationen wird auf den „Solution Guide II-B - Matching“ verwiesen.
Aus Pixel-Einheiten kann keine direkte Information über reelle Distanzen gewonnen werden. Durch die Kalibrierung der Kamera ist es jedoch möglich, die Bilder zu entzerren. Dann können den Bildern Welt-Koordinaten zugeordnet werden. Für mehr Informationen wird auf den „Solution Guide III-C - 3D Vision“ verwiesen.
Operatoren |