gen_arbitrary_distortion_map — Berechnet die Abbildung von einem beliebig verzerrten Bild ins entzerrte
Bild.
gen_arbitrary_distortion_map( : Map : GridSpacing, Row, Column, GridWidth, ImageWidth, ImageHeight, MapType : )
gen_arbitrary_distortion_map berechnet die Abbildung Map
von einem beliebig verzerrten ins entzerrte Bild. Dazu beschreiben die
Koordinaten Row und Column ein (verzerrtes) Punktgitter,
das im entzerrten Bild auf ein regelmäßiges Gitter abgebildet wird.
Die Koordinaten der Gitterpunkte sind, entsprechend ihrer Anordnung im
Punktgitter, zeilenweise von oben nach unten zu übergeben.
GridWidth ist die Breite des Punktgitters in Gitterpunkten.
GridSpacing ist der Abstand zweier benachbarter Gitterpunkte im
entzerrten Bild. Da Gitterpunkte immer in die Mitte der entsprechenden
Pixel projiziert werden, belegt eine Gitterzelle
(GridSpacing+1) x (GridSpacing+1) Pixel. Allerdings
überlappen sich benachbarte Gitterzellen auch auf einem Pixel Breite.
Darüber hinaus müssen die Breite ImageWidth und Höhe
ImageHeight der zu entzerrenden Bilder übergeben werden, um die
Abbildung Map zu berechnen.
Der Parameter MapType gibt an, in welchem Typ die
Abbildungsvorschrift gespeichert werden soll.
Wurde die bilineare Interpolation ('bilinear') gewählt,
so besteht Map aus einem Bild mit fünf Kanälen. Der erste Kanal
enthält für jedes Pixel des Ergebnisbildes die linearen Koordinaten
desjenigen Pixels des Eingabebildes, welches links oberhalb von den
transformierten Koordinaten liegt. Die übrigen vier Kanäle enthalten die
Gewichte der einzelnen vier Nachbarpixel der transformierten
Koordinaten für die bilineare Interpolation in folgender Reihenfolge:
| 2 | 3 |
| 4 | 5 |
Der zweite Kanal z.B. enthält die Gewichte der Pixel, die links oberhalb
der transformierten Koordinaten liegen. Wurde 'coord_map_sub_pix'
gewählt, besteht Map aus einem Vektorfeld, welches für jedes
Pixel des Ergebnisbildes die subpixelgenauen Koordinaten im Eingabebild
enthält.
Aus dem Obigen geht hervor, dass zur Interpolation des Grauwertes eines
Pixels im entzerrten Bild immer alle vier benachbarte Pixel im verzerrten
Bild benötigt werden. Liegt mindestens eines dieser benachbarten Pixel
außerhalb des verzerrten Bildes, so kann der Grauwert nicht berechnet
werden. In der resultierenden Map wird der Definitionsbereich
entsprechend eingeschränkt.
Im Gegensatz zu gen_grid_rectification_map wird
gen_arbitrary_distortion_map verwendet, falls die
Koordinaten (Row,Column) der Gitterpunkte im verzerrten
Bild schon bekannt sind bzw. die relevanten Bildinhalte schon reguläre,
gitterförmige Strukturen aufweisen, aus denen die Koordinaten gewonnen
werden können.
Wenn die erzeugte Abbildung in einem anderen Programm wiederverwendet werden
soll, kann man sie mit dem Operator write_image als Mehrkanalbild
abspeichern (Format: 'tiff').
Map (output_object) multichannel-image → object (int4 / uint2 / vector_field)
Bild mit Transformationsdaten.
GridSpacing (input_control) integer → (integer)
Abstand der Gitterpunkte im entzerrten Bild.
Restriktion: GridSpacing > 0
Row (input_control) point.y-array → (real)
Zeilenkoordinaten der Gitterpunkte im verzerrten Bild.
Column (input_control) point.x-array → (real)
Spaltenkoordinaten der Gitterpunkte im verzerrten Bild.
Restriktion: number(Row) == number(Column)
GridWidth (input_control) integer → (integer)
Breite des Punktgitters (Anzahl der Gitterpunkte).
ImageWidth (input_control) extent.x → (integer)
Breite der zu entzerrenden Bilder.
Restriktion: ImageWidth > 0
ImageHeight (input_control) extent.y → (integer)
Höhe der zu entzerrenden Bilder.
Restriktion: ImageHeight > 0
MapType (input_control) string → (string)
Typ der Transformationsdaten.
Defaultwert: 'bilinear'
Werteliste: 'bilinear', 'coord_map_sub_pix'
Sind die Parameterwerte korrekt, dann liefert
gen_arbitrary_distortion_map den Wert TRUE.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
create_rectification_grid,
find_rectification_grid,
connect_grid_points,
gen_grid_rectification_map
Calibration