gen_spherical_mosaic
— Erzeugen eines sphärischen Mosaikbildes.
gen_spherical_mosaic(Images : MosaicImage : CameraMatrices, RotationMatrices, LatMin, LatMax, LongMin, LongMax, LatLongStep, StackingOrder, Interpolation : )
gen_spherical_mosaic
erzeugt ein sphärisches Mosaik
MosaicImage
aus den in Images
übergebenen
Bildern. Die Lage der Bilder im Raum, aus der die Lage der Bilder
in Bezug auf die Kugeloberfläche berechnet wird, kann mit
stationary_camera_self_calibration
bestimmt werden. Die
dort berechneten Kameramatrizen und Rotationsmatrizen können direkt
in CameraMatrices
und RotationMatrices
übergeben
werden. Ein sphärisches Mosaik kann nur von Aufnahmen einer
stationären Kamera berechnet werden (siehe
stationary_camera_self_calibration
).
Das Mosaik wird in Kugelkoordinaten (Länge und Breite) berechnet.
Dabei entspricht die Breite der Zeilenachse und die Länge der
Spaltenachse von MosaicImage
. Der berechnete Ausschnitt
der Kugeloberfläche wird durch LatMin
, LatMax
,
LongMin
und LongMax
festgelegt. Diese Parameter
werden in Grad angegeben und legen einen rechteckigen Ausschnitt der
Längen- und Breitenkoordinaten fest. Dabei entspricht eine Breite
von -90 dem Nordpol (also der Blickrichtung senkrecht nach
oben) und eine Breite von 90 dem Südpol (Blickrichtung
senkrecht nach unten). Die Länge von 0 entspricht der
Betrachtungsrichtung nach vorne. Negative Längen entsprechen
Blickwinkeln nach links, positive Längen Blickwinkeln nach rechts.
Um ein vollständiges Bild der Kugeloberfläche zu erhalten, ist
also LatMin
= -90, LatMax
=
90, LongMin
= -180 und LongMax
= 180 zu verwenden. In vielen Fällen wird das Mosaik
nicht die gesamte Kugeloberfläche abdecken. In diesem Fall ist es
sinnvoll, einen Ausschnitt der Kugeloberfläche mit den obigen
Parametern auszuwählen. Dies kann zum einen geschehen, indem das
Rechteck explizit angegeben wird. Oftmals ist es aber
wünschenswert, das kleinstmögliche Rechteck, das alle Bilder
enthält, automatisch bestimmen zu lassen. Dies kann geschehen,
indem LatMin
< -90, LatMax
>
90, LongMin
< -180 und LongMax
> 180 spezifiziert wird. Dabei werden nur diejenigen
Parameter automatisch bestimmt, die außerhalb des normalen
Wertebereichs liegen.
Die Winkelschrittweite pro Pixel in MosaicImage
kann mit
LatLongStep
festgelegt werden. LatLongStep
wird
auch in Grad angegeben. Hiermit kann die Auflösung des
Mosaikbildes bestimmt werden. Falls LatLongStep
auf
0 gesetzt wird, wird die Winkelschrittweite automatisch
bestimmt, indem versucht wird, die Pixelgröße der Originalbilder
so gut wie möglich zu erhalten.
Der Modus, in dem die Bilder dem Mosaik hinzugefügt werden, wird
durch StackingOrder
bestimmt. Für StackingOrder
= 'voronoi' werden die Punkte im Mosaikbild aus der
Voronoi-Zelle des jeweiligen Eingabebildes entnommen. Das heißt,
dass die Grauwerte aus den zum Mittelpunkt des jeweiligen Bildes auf
der Kugeloberfläche am nächsten gelegenen Punkten bestimmt werden.
Dieser Modus hat den Vorteil, dass eventuelle Vignettierungen oder
unkorrigierte radiale Verzeichnungen im Mosaik weniger auffällig
sind, da sie typischerweise symmetrisch zum Bildmittelpunkt sind.
Alternativ kann mit der im Folgenden beschriebenen Wahl der
Parameter ein Modus gewählt werden, der denselben Effekt hat, wie
wenn die Bilder nacheinander in das Mosaikbild gezeichnet würden.
Hierbei ist die Reihenfolge des Eintragens der Bilder in das Mosaik
wichtig. Deswegen kann in StackingOrder
ein Array von
ganzen Zahlen angegeben werden. Das erste Element dieses Arrays
bildet das unterste Bild des Mosaiks, während das letzte ganz oben
auf dem Mosaik erscheint. Wird statt einem Array von ganzen Zahlen
der Wert 'default' angegeben, so wird die kanonische
Ordnung (Bilder in der Reihenfolge in Images
) verwendet.
Wenn weder 'voronoi' noch 'default' verwendet
wird, muss in StackingOrder
eine Permutation der Zahlen
1,...,n verwendet werden, wobei n die Anzahl der in
Images
übergebenen Bilder ist. Es ist zu beachten, dass der
Modus 'voronoi' nicht immer angewendet werden kann. So
müssen z.B. mindestens zwei Bilder übergeben werden. Weiterhin
können die Voronoi-Zellen für sehr spezielle Lagen der
Bildmittelpunkte auf der Kugel nicht eindeutig bestimmt werden.
Darüber hinaus steht mit dem Modus 'blend' ein Modus bereit,
welcher die Bilder des Mosaiks weich ineinander überblendet. Als Grenzen
zwischen den Bildern werden hier die gleichen Voronoi-Zellen verwendet,
wie im Modus 'voronoi' . Dieser Modus liefert besonders angenehm
wirkende Bilder, benötigt jedoch erheblich mehr Ressourcen. Sollte der Modus
'voronoi' oder 'blend' aus irgendeinem Grund nicht
anwendbar sein, wird intern automatisch auf den Modus 'default'
umgeschaltet.
Mit dem Parameter Interpolation
wird gewünschte
Interpolationsmodus für die Erstellung des Mosaiks gewählt.
Es besteht die Wahlmöglichkeit zwischen bilinearer und bikubischer
Interpolation für alle Modi von StackingOrder
.
'nearest_neighbor' ist nur verfügbar wenn für StackingOrder
'default' oder 'voronoi' gewählt ist.
Images
(input_object) (multichannel-)image-array →
object (byte / uint2 / real)
Eingabebilder.
MosaicImage
(output_object) (multichannel-)image →
object (byte / uint2 / real)
Ergebnisbild.
CameraMatrices
(input_control) hom_mat2d-array →
(real)
(Array von) 3x3 projektiven Kameramatrizen, die die internen Kameraparameter bestimmen.
RotationMatrices
(input_control) hom_mat2d-array →
(real)
Array von 3x3 Transformationsmatrizen, die die Rotation der Kamera im jeweiligen Bild bestimmen.
LatMin
(input_control) angle.deg →
(real / integer)
Minimaler Breitengrad der Punkte im sphärischen Mosaik.
Defaultwert: -90
Wertevorschläge: -100, -90, -80, -70, -60, -50, -40, -30, -20, -10
Restriktion: LatMin <= 90
LatMax
(input_control) angle.deg →
(real / integer)
Maximaler Breitengrad der Punkte im sphärischen Mosaik.
Defaultwert: 90
Wertevorschläge: 10, 20, 30, 40, 50, 60, 70, 80, 90, 100
Restriktion: LatMax >= -90 && LatMax > LatMin
LongMin
(input_control) angle.deg →
(real / integer)
Minimaler Längengrad der Punkte im sphärischen Mosaik.
Defaultwert: -180
Wertevorschläge: -200, -180, -160, -140, -120, -100, -90, -80, -70, -60, -50, -40, -30, -20, -10
Restriktion: LongMin <= 180
LongMax
(input_control) angle.deg →
(real / integer)
Maximaler Längengrad der Punkte im sphärischen Mosaik.
Defaultwert: 180
Wertevorschläge: 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 120, 140, 160, 180, 200
Restriktion: LongMax >= -90 && LongMax > LongMin
LatLongStep
(input_control) angle.deg →
(real / integer)
Winkelschrittweite der Längen und Breiten.
Defaultwert: 0.1
Wertevorschläge: 0, 0.02, 0.05, 0.1, 0.2, 0.5, 1
Restriktion: LatLongStep >= 0
StackingOrder
(input_control) string(-array) →
(string / integer)
Modus des Eintragens der Bilder in das Mosaik.
Defaultwert: 'voronoi'
Wertevorschläge: 'blend' , 'voronoi' , 'default'
Interpolation
(input_control) string →
(string / integer)
Interpolationsmodus für die Berechnung des Mosaiks.
Defaultwert: 'bilinear'
Wertevorschläge: 'nearest_neighbor' , 'bilinear' , 'bicubic'
* For the input data to stationary_camera_self_calibration, please * refer to the example for stationary_camera_self_calibration. stationary_camera_self_calibration (4, 640, 480, 1, From, To, \ HomMatrices2D, Rows1, Cols1, \ Rows2, Cols2, NumMatches, \ 'gold_standard', \ ['focus','principal_point'], \ 'true', CameraMatrix, Kappa, \ RotationMatrices, X, Y, Z, Error) gen_spherical_mosaic (Images, MosaicImage, CameraMatrix, \ RotationMatrices, -100, 100, -200, 200, 0, \ 'default','bilinear') * Alternatively, if kappa should be determined, the following calls * can be made: stationary_camera_self_calibration (4, 640, 480, 1, From, To, \ HomMatrices2D, Rows1, Cols1, \ Rows2, Cols2, NumMatches, \ 'gold_standard', \ ['focus','principal_point','kappa'], \ 'true', CameraMatrix, Kappa, \ RotationMatrices, X, Y, Z, Error) cam_mat_to_cam_par (CameraMatrix, Kappa, 640, 480, CamParam) change_radial_distortion_cam_par ('fixed', CamParam, 0, CamParOut) gen_radial_distortion_map (Map, CamParam, CamParOut, 'bilinear') map_image (Images, Map, ImagesRect) gen_spherical_mosaic (ImagesRect, MosaicImage, CameraMatrix, \ RotationMatrices, -100, 100, -200, 200, 0, \ 'default','bilinear')
Sind die Parameterwerte korrekt, dann liefert
gen_spherical_mosaic
den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird
eine Fehlerbehandlung durchgeführt.
stationary_camera_self_calibration
gen_cube_map_mosaic
,
gen_projective_mosaic
Lourdes Agapito, E. Hayman, I. Reid: „Self-Calibration of Rotating
and Zooming Cameras“; International Journal of Computer Vision;
vol. 45, no. 2; pp. 107--127; 2001.
Olivier Faugeras, Quang-Tuan Luong: „The Geometry of Multiple
Images: The Laws That Govern the Formation of Multiple Images of a
Scene and Some of Their Applications“; MIT Press, Cambridge, MA;
2001.
Matching