gen_projective_mosaic
— Kombinieren mehrerer Bilder zu einem Mosaikbild.
gen_projective_mosaic(Images : MosaicImage : StartImage, MappingSource, MappingDest, HomMatrices2D, StackingOrder, TransformDomain : MosaicMatrices2D)
gen_projective_mosaic
setzt die Eingabebilder, welche im
Objekt Images
enthalten sind, zu einem Mosaikbild
MosaicImage
zusammen. Die Relativpositionen der Bilder
zueinander werden dabei durch 3x3 projektive
Transformationsmatrizen beschrieben. Das Array
HomMatrices2D
besteht aus einer Aufeinanderfolge solcher
linearisierter Matrizen. Die Werte in MappingSource
und
MappingDest
geben an, zwischen welchen Bildern die
zugehörige Matrix anzuwenden ist. MappingSource
=4
und MappingDest
=7 bedeutet also, dass die Matrix
die Transformation des Inhalts von Bild 4 in die Ebene des
Bildes 7 beschreibt. Die Transformationsmatrizen zwischen
den jeweiligen durch MappingSource
und MappingDest
gegebenen Bildpaaren werden typischerweise mit
proj_match_points_ransac
bestimmt.
Wie bei den Bildobjektzugriffsoperatoren (z.B. select_obj
)
üblich werden die Bilder ab 1 gezählt, d.h.
MappingSource
, MappingDest
, StartImage
und StackingOrder
) müssen Werte zwischen 1 und der Anzahl
der übergebenen Bilder enthalten.
Der Parameter StartImage
gibt an, welches der Bilder die
Bildebene des Gesamtbildes darstellen soll, welches Bild also
unverändert ins Zielbild übernommen wird. Dies ist im allgemeinen
ein Bild, das sich in der Mitte des Mosaiks befindet.
Der Bildausschnitt von MosaicImage
und seine Größe werden
so gewählt, dass alle Ausgangsbilder gerade ganz sichtbar sind.
Die Reihenfolge, in der die Bilder dem Mosaik hinzugefügt werden,
wird durch StackingOrder
bestimmt. 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.
Mit TransformDomain
kann festgelegt werden, ob auch die
Definitionsbereiche von Images
transformiert werden. Da
die Transformation der Definitionsbereiche Zeit kostet, kann dieser
Parameter dazu verwendet werden, festzulegen, ob dies erwünscht
ist. Wenn TransformDomain
auf 'false' gesetzt
wird, wird der Definitionsbereich der Eingabebilder ignoriert.
Somit werden die kompletten Bilder transformiert.
Als Ausgabe gibt der Parameter MosaicMatrices2D
eine Menge
von 3x3 projektiven Transformationsmatrizen, die
für jedes Bild in Images
die Abbildung des Bildes an seine
Position im Mosaik beschreibt.
Images
(input_object) (multichannel-)image-array →
object (byte / uint2 / real)
Eingabebilder.
MosaicImage
(output_object) (multichannel-)image →
object (byte / uint2 / real)
Ergebnisbild.
StartImage
(input_control) integer →
(integer)
Index des zentralen Eingabebildes.
MappingSource
(input_control) integer-array →
(integer)
Indizes der Ausgangsbilder der Transformationen.
MappingDest
(input_control) integer-array →
(integer)
Indizes der Zielbilder der Transformationen.
HomMatrices2D
(input_control) hom_mat2d-array →
(real)
Array von 3x3 projektiven Transformationsmatrizen.
StackingOrder
(input_control) string(-array) →
(string / integer)
Reihenfolge der Bilder im Mosaik.
Defaultwert: 'default'
Wertevorschläge: 'default'
TransformDomain
(input_control) string →
(string)
Sollen die Regionen der Eingabebilder auch transformiert werden?
Defaultwert: 'false'
Werteliste: 'false' , 'true'
MosaicMatrices2D
(output_control) hom_mat2d-array →
(real)
Array von 3x3 projektiven Transformationsmatrizen, die die Lage der Bilder im Mosaik bestimmen.
gen_empty_obj (Images) for J := 1 to 6 by 1 read_image (Image, 'mosaic/pcb_'+J$'02') concat_obj (Images, Image, Images) endfor From := [1,2,3,4,5] To := [2,3,4,5,6] Num := |From| ProjMatrices := [] for J := 0 to Num-1 by 1 F := From[J] T := To[J] select_obj (Images, ImageF, F) select_obj (Images, ImageT, T) points_foerstner (ImageF, 1, 2, 3, 200, 0.3, 'gauss', 'false', \ RowJunctionsF, ColJunctionsF, CoRRJunctionsF, \ CoRCJunctionsF, CoCCJunctionsF, RowAreaF, \ ColAreaF, CoRRAreaF, CoRCAreaF, CoCCAreaF) points_foerstner (ImageT, 1, 2, 3, 200, 0.3, 'gauss', 'false', \ RowJunctionsT, ColJunctionsT, CoRRJunctionsT, \ CoRCJunctionsT, CoCCJunctionsT, RowAreaT, \ ColAreaT, CoRRAreaT, CoRCAreaT, CoCCAreaT) proj_match_points_ransac (ImageF, ImageT, RowJunctionsF, \ ColJunctionsF, RowJunctionsT, \ ColJunctionsT, 'ncc', 21, 0, 0, 480, 640, \ 0, 0.5, 'gold_standard', 1, 4364537, \ ProjMatrix, Points1, Points2) ProjMatrices := [ProjMatrices,ProjMatrix] endfor gen_projective_mosaic (Images, MosaicImage, 2, From, To, ProjMatrices, \ 'default', 'false', MosaicMatrices2D)
proj_match_points_ransac
,
proj_match_points_ransac_guided
,
vector_to_proj_hom_mat2d
,
hom_vector_to_proj_hom_mat2d
projective_trans_image
,
projective_trans_image_size
,
projective_trans_region
,
projective_trans_contour_xld
,
projective_trans_point_2d
,
projective_trans_pixel
Richard Hartley, Andrew Zisserman: „Multiple View Geometry in
Computer Vision“; Cambridge University Press, Cambridge; 2000.
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