gen_projective_mosaicT_gen_projective_mosaicGenProjectiveMosaicGenProjectiveMosaic (Operator)

Name

gen_projective_mosaicT_gen_projective_mosaicGenProjectiveMosaicGenProjectiveMosaic — Kombinieren mehrerer Bilder zu einem Mosaikbild.

Signatur

gen_projective_mosaic(Images : MosaicImage : StartImage, MappingSource, MappingDest, HomMatrices2D, StackingOrder, TransformDomain : MosaicMatrices2D)

Herror T_gen_projective_mosaic(const Hobject Images, Hobject* MosaicImage, const Htuple StartImage, const Htuple MappingSource, const Htuple MappingDest, const Htuple HomMatrices2D, const Htuple StackingOrder, const Htuple TransformDomain, Htuple* MosaicMatrices2D)

void GenProjectiveMosaic(const HObject& Images, HObject* MosaicImage, const HTuple& StartImage, const HTuple& MappingSource, const HTuple& MappingDest, const HTuple& HomMatrices2D, const HTuple& StackingOrder, const HTuple& TransformDomain, HTuple* MosaicMatrices2D)

HImage HImage::GenProjectiveMosaic(Hlong StartImage, const HTuple& MappingSource, const HTuple& MappingDest, const HHomMat2DArray& HomMatrices2D, const HTuple& StackingOrder, const HString& TransformDomain, HHomMat2DArray* MosaicMatrices2D) const

HImage HImage::GenProjectiveMosaic(Hlong StartImage, const HTuple& MappingSource, const HTuple& MappingDest, const HHomMat2DArray& HomMatrices2D, const HString& StackingOrder, const HString& TransformDomain, HHomMat2DArray* MosaicMatrices2D) const

HImage HImage::GenProjectiveMosaic(Hlong StartImage, const HTuple& MappingSource, const HTuple& MappingDest, const HHomMat2DArray& HomMatrices2D, const char* StackingOrder, const char* TransformDomain, HHomMat2DArray* MosaicMatrices2D) const

HImage HImage::GenProjectiveMosaic(Hlong StartImage, const HTuple& MappingSource, const HTuple& MappingDest, const HHomMat2DArray& HomMatrices2D, const wchar_t* StackingOrder, const wchar_t* TransformDomain, HHomMat2DArray* MosaicMatrices2D) const   (Nur Windows)

static void HOperatorSet.GenProjectiveMosaic(HObject images, out HObject mosaicImage, HTuple startImage, HTuple mappingSource, HTuple mappingDest, HTuple homMatrices2D, HTuple stackingOrder, HTuple transformDomain, out HTuple mosaicMatrices2D)

HImage HImage.GenProjectiveMosaic(int startImage, HTuple mappingSource, HTuple mappingDest, HHomMat2D[] homMatrices2D, HTuple stackingOrder, string transformDomain, out HHomMat2D[] mosaicMatrices2D)

HImage HImage.GenProjectiveMosaic(int startImage, HTuple mappingSource, HTuple mappingDest, HHomMat2D[] homMatrices2D, string stackingOrder, string transformDomain, out HHomMat2D[] mosaicMatrices2D)

Beschreibung

gen_projective_mosaicgen_projective_mosaicGenProjectiveMosaicGenProjectiveMosaicGenProjectiveMosaic setzt die Eingabebilder, welche im Objekt ImagesImagesImagesImagesimages enthalten sind, zu einem Mosaikbild MosaicImageMosaicImageMosaicImageMosaicImagemosaicImage zusammen. Die Relativpositionen der Bilder zueinander werden dabei durch 3x3 projektive Transformationsmatrizen beschrieben. Das Array HomMatrices2DHomMatrices2DHomMatrices2DHomMatrices2DhomMatrices2D besteht aus einer Aufeinanderfolge solcher linearisierter Matrizen. Die Werte in MappingSourceMappingSourceMappingSourceMappingSourcemappingSource und MappingDestMappingDestMappingDestMappingDestmappingDest geben an, zwischen welchen Bildern die zugehörige Matrix anzuwenden ist. MappingSourceMappingSourceMappingSourceMappingSourcemappingSource=4 und MappingDestMappingDestMappingDestMappingDestmappingDest=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 MappingSourceMappingSourceMappingSourceMappingSourcemappingSource und MappingDestMappingDestMappingDestMappingDestmappingDest gegebenen Bildpaaren werden typischerweise mit proj_match_points_ransacproj_match_points_ransacProjMatchPointsRansacProjMatchPointsRansacProjMatchPointsRansac bestimmt.

Wie bei den Bildobjektzugriffsoperatoren (z.B. select_objselect_objSelectObjSelectObjSelectObj) üblich werden die Bilder ab 1 gezählt, d.h. MappingSourceMappingSourceMappingSourceMappingSourcemappingSource, MappingDestMappingDestMappingDestMappingDestmappingDest, StartImageStartImageStartImageStartImagestartImage und StackingOrderStackingOrderStackingOrderStackingOrderstackingOrder) müssen Werte zwischen 1 und der Anzahl der übergebenen Bilder enthalten.

Der Parameter StartImageStartImageStartImageStartImagestartImage 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 MosaicImageMosaicImageMosaicImageMosaicImagemosaicImage 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 StackingOrderStackingOrderStackingOrderStackingOrderstackingOrder 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'"default""default""default""default" angegeben, so wird die kanonische Ordnung (Bilder in der Reihenfolge in ImagesImagesImagesImagesimages) verwendet.

Mit TransformDomainTransformDomainTransformDomainTransformDomaintransformDomain kann festgelegt werden, ob auch die Definitionsbereiche von ImagesImagesImagesImagesimages transformiert werden. Da die Transformation der Definitionsbereiche Zeit kostet, kann dieser Parameter dazu verwendet werden, festzulegen, ob dies erwünscht ist. Wenn TransformDomainTransformDomainTransformDomainTransformDomaintransformDomain auf 'false'"false""false""false""false" gesetzt wird, wird der Definitionsbereich der Eingabebilder ignoriert. Somit werden die kompletten Bilder transformiert.

Als Ausgabe gibt der Parameter MosaicMatrices2DMosaicMatrices2DMosaicMatrices2DMosaicMatrices2DmosaicMatrices2D eine Menge von 3x3 projektiven Transformationsmatrizen, die für jedes Bild in ImagesImagesImagesImagesimages die Abbildung des Bildes an seine Position im Mosaik beschreibt.

Ausführungsinformationen

Parameter

ImagesImagesImagesImagesimages (input_object)  (multichannel-)image-array objectHImageHImageHobject (byte / uint2 / real)

Eingabebilder.

MosaicImageMosaicImageMosaicImageMosaicImagemosaicImage (output_object)  (multichannel-)image objectHImageHImageHobject * (byte / uint2 / real)

Ergebnisbild.

StartImageStartImageStartImageStartImagestartImage (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Index des zentralen Eingabebildes.

MappingSourceMappingSourceMappingSourceMappingSourcemappingSource (input_control)  integer-array HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Indizes der Ausgangsbilder der Transformationen.

MappingDestMappingDestMappingDestMappingDestmappingDest (input_control)  integer-array HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Indizes der Zielbilder der Transformationen.

HomMatrices2DHomMatrices2DHomMatrices2DHomMatrices2DhomMatrices2D (input_control)  hom_mat2d-array HHomMat2D, HTupleHTupleHtuple (real) (double) (double) (double)

Array von 3x3 projektiven Transformationsmatrizen.

StackingOrderStackingOrderStackingOrderStackingOrderstackingOrder (input_control)  string(-array) HTupleHTupleHtuple (string / integer) (string / int / long) (HString / Hlong) (char* / Hlong)

Reihenfolge der Bilder im Mosaik.

Defaultwert: 'default' "default" "default" "default" "default"

Wertevorschläge: 'default'"default""default""default""default"

TransformDomainTransformDomainTransformDomainTransformDomaintransformDomain (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Sollen die Regionen der Eingabebilder auch transformiert werden?

Defaultwert: 'false' "false" "false" "false" "false"

Werteliste: 'false'"false""false""false""false", 'true'"true""true""true""true"

MosaicMatrices2DMosaicMatrices2DMosaicMatrices2DMosaicMatrices2DmosaicMatrices2D (output_control)  hom_mat2d-array HHomMat2D, HTupleHTupleHtuple (real) (double) (double) (double)

Array von 3x3 projektiven Transformationsmatrizen, die die Lage der Bilder im Mosaik bestimmen.

Beispiel (HDevelop)

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)

Vorgänger

proj_match_points_ransacproj_match_points_ransacProjMatchPointsRansacProjMatchPointsRansacProjMatchPointsRansac, proj_match_points_ransac_guidedproj_match_points_ransac_guidedProjMatchPointsRansacGuidedProjMatchPointsRansacGuidedProjMatchPointsRansacGuided, vector_to_proj_hom_mat2dvector_to_proj_hom_mat2dVectorToProjHomMat2dVectorToProjHomMat2dVectorToProjHomMat2d, hom_vector_to_proj_hom_mat2dhom_vector_to_proj_hom_mat2dHomVectorToProjHomMat2dHomVectorToProjHomMat2dHomVectorToProjHomMat2d

Siehe auch

projective_trans_imageprojective_trans_imageProjectiveTransImageProjectiveTransImageProjectiveTransImage, projective_trans_image_sizeprojective_trans_image_sizeProjectiveTransImageSizeProjectiveTransImageSizeProjectiveTransImageSize, projective_trans_regionprojective_trans_regionProjectiveTransRegionProjectiveTransRegionProjectiveTransRegion, projective_trans_contour_xldprojective_trans_contour_xldProjectiveTransContourXldProjectiveTransContourXldProjectiveTransContourXld, projective_trans_point_2dprojective_trans_point_2dProjectiveTransPoint2dProjectiveTransPoint2dProjectiveTransPoint2d, projective_trans_pixelprojective_trans_pixelProjectiveTransPixelProjectiveTransPixelProjectiveTransPixel

Literatur

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.

Modul

Matching