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 Zeile: y-Koordinate, Spalte: x-Koordinate.
(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-Koordinate, Spalte: y-Koordinate.
Der Operator
wendet die durch
affine_trans_point_2d
definierte Transformation auf die Punkt-Koordinaten an.
Das heißt, der Operator HomMat2D
kann in beiden
Kartesischen Koordinatensystemen verwendet werden, solange die
Transformation und die Punkte im selben Koordinatensystem gegeben werden.
affine_trans_point_2d
Die Operatoren
und angle_ll
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.
angle_lx
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
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.
HomMat2D
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 Zeile: y-Koordinate,
Spalte: x-Koordinate.
Die Resultate von form-basiertem Matching, wie z.B.
, werden in ecken-zentrierten Koordinaten gegeben.
Somit kann man diese Resultate direkte zur Erstellung von
Transformationsmatrizen find_shape_model
in ecken-zentrierten Koordinaten
verwenden. Solche Transformationsmatrizen können mit
Operatoren wie z.B. HomMat2D
und weiteren unter affine_trans_contour_xld
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
um 0.5 Pixel falsch. Man beachte, dass dieser Effekt nur sichtbar wird,
wenn Rotationen involviert sind.
affine_trans_contour_xld
(1) | (2) | (3) |
Die Resultate von
und find_ncc_model
werden ebenso in ecken-zentrierten Koordinaten gegeben.
Deshalb kann man auch mit diesen Resultaten direkt eine
Transformationsmatrix find_ncc_models
in ecken-zentrierten Koordinaten
erstellen. Diese Transformationsmatrizen sind zur direkten Anwendung mit
Operatoren wie z.B. HomMat2D
und weiteren unter affine_trans_contour_xld
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
entspricht
der Pixel oben links des Ausgabebildes jenem Punkt des Kreisrings im
Eingabebild, der durch polar_trans_image_ext
und RadiusStart
festgelegt wurde. Analog entspricht der Pixel unten rechts des
Ausgabebildes jenem Punkt des Kreisrings im Eingabebild, der durch
AngleStart
und RadiusEnd
spezifiziert wurde.
Dies bedeutet, dass in der üblichen Verwendungsweise
(AngleEnd
< AngleStart
und
AngleEnd
< RadiusStart
)
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. RadiusEnd
> AngleStart
oder AngleEnd
> RadiusStart
)
kann jeder beliebige Drehsinn des Ausgabebildes erreicht werden.
RadiusEnd
(1) | (2) | (3) |
Folgende Operatoren verwenden Polarkoordinaten:
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
erhalten wurden, ihren
Ursprung im Schwerpunkt der ROI, aus der sie erstellt wurden.
Für mehr Informationen wird auf den
create_shape_model
„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.
affine_trans_pixel
affine_trans_point_2d
deserialize_hom_mat2d
hom_mat2d_compose
hom_mat2d_determinant
hom_mat2d_identity
hom_mat2d_invert
hom_mat2d_reflect
hom_mat2d_reflect_local
hom_mat2d_rotate
hom_mat2d_rotate_local
hom_mat2d_scale
hom_mat2d_scale_local
hom_mat2d_slant
hom_mat2d_slant_local
hom_mat2d_to_affine_par
hom_mat2d_translate
hom_mat2d_translate_local
hom_mat2d_transpose
hom_mat3d_project
hom_vector_to_proj_hom_mat2d
point_line_to_hom_mat2d
projective_trans_pixel
projective_trans_point_2d
serialize_hom_mat2d
vector_angle_to_rigid
vector_field_to_hom_mat2d
vector_to_aniso
vector_to_hom_mat2d
vector_to_proj_hom_mat2d
vector_to_proj_hom_mat2d_distortion
vector_to_rigid
vector_to_similarity