gen_projective_mosaicT_gen_projective_mosaicGenProjectiveMosaicGenProjectiveMosaicgen_projective_mosaic (Operator)
Name
gen_projective_mosaicT_gen_projective_mosaicGenProjectiveMosaicGenProjectiveMosaicgen_projective_mosaic — Kombinieren mehrerer Bilder zu einem Mosaikbild.
Signatur
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_mosaicGenProjectiveMosaicGenProjectiveMosaicGenProjectiveMosaicgen_projective_mosaic setzt die Eingabebilder, welche im
Objekt ImagesImagesImagesImagesimagesimages enthalten sind, zu einem Mosaikbild
MosaicImageMosaicImageMosaicImageMosaicImagemosaicImagemosaic_image zusammen. Die Relativpositionen der Bilder
zueinander werden dabei durch 3x3 projektive
Transformationsmatrizen beschrieben. Das Array
HomMatrices2DHomMatrices2DHomMatrices2DHomMatrices2DhomMatrices2Dhom_matrices_2d besteht aus einer Aufeinanderfolge solcher
linearisierter Matrizen. Die Werte in MappingSourceMappingSourceMappingSourceMappingSourcemappingSourcemapping_source und
MappingDestMappingDestMappingDestMappingDestmappingDestmapping_dest geben an, zwischen welchen Bildern die
zugehörige Matrix anzuwenden ist. MappingSourceMappingSourceMappingSourceMappingSourcemappingSourcemapping_source=4
und MappingDestMappingDestMappingDestMappingDestmappingDestmapping_dest=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 MappingSourceMappingSourceMappingSourceMappingSourcemappingSourcemapping_source und MappingDestMappingDestMappingDestMappingDestmappingDestmapping_dest
gegebenen Bildpaaren werden typischerweise mit
proj_match_points_ransacproj_match_points_ransacProjMatchPointsRansacProjMatchPointsRansacProjMatchPointsRansacproj_match_points_ransac bestimmt.
Wie bei den Bildobjektzugriffsoperatoren (z.B. select_objselect_objSelectObjSelectObjSelectObjselect_obj)
üblich werden die Bilder ab 1 gezählt, d.h.
MappingSourceMappingSourceMappingSourceMappingSourcemappingSourcemapping_source, MappingDestMappingDestMappingDestMappingDestmappingDestmapping_dest, StartImageStartImageStartImageStartImagestartImagestart_image
und StackingOrderStackingOrderStackingOrderStackingOrderstackingOrderstacking_order) müssen Werte zwischen 1 und der Anzahl
der übergebenen Bilder enthalten.
Der Parameter StartImageStartImageStartImageStartImagestartImagestart_image 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 MosaicImageMosaicImageMosaicImageMosaicImagemosaicImagemosaic_image 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 StackingOrderStackingOrderStackingOrderStackingOrderstackingOrderstacking_order 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""default" angegeben, so wird die
kanonische Ordnung (Bilder in der Reihenfolge in ImagesImagesImagesImagesimagesimages)
verwendet.
Mit TransformDomainTransformDomainTransformDomainTransformDomaintransformDomaintransform_domain kann festgelegt werden, ob auch die
Definitionsbereiche von ImagesImagesImagesImagesimagesimages transformiert werden. Da
die Transformation der Definitionsbereiche Zeit kostet, kann dieser
Parameter dazu verwendet werden, festzulegen, ob dies erwünscht
ist. Wenn TransformDomainTransformDomainTransformDomainTransformDomaintransformDomaintransform_domain auf 'false'"false""false""false""false""false" gesetzt
wird, wird der Definitionsbereich der Eingabebilder ignoriert.
Somit werden die kompletten Bilder transformiert.
Als Ausgabe gibt der Parameter MosaicMatrices2DMosaicMatrices2DMosaicMatrices2DMosaicMatrices2DmosaicMatrices2Dmosaic_matrices_2d eine Menge
von 3x3 projektiven Transformationsmatrizen, die
für jedes Bild in ImagesImagesImagesImagesimagesimages die Abbildung des Bildes an seine
Position im Mosaik beschreibt.
Ausführungsinformationen
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Wird ohne Parallelisierung verarbeitet.
Parameter
ImagesImagesImagesImagesimagesimages (input_object) (multichannel-)image-array → objectHImageHObjectHImageHobject (byte / uint2 / real)
Eingabebilder.
MosaicImageMosaicImageMosaicImageMosaicImagemosaicImagemosaic_image (output_object) (multichannel-)image → objectHImageHObjectHImageHobject * (byte / uint2 / real)
Ergebnisbild.
StartImageStartImageStartImageStartImagestartImagestart_image (input_control) integer → HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)
Index des zentralen Eingabebildes.
MappingSourceMappingSourceMappingSourceMappingSourcemappingSourcemapping_source (input_control) integer-array → HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)
Indizes der Ausgangsbilder der Transformationen.
MappingDestMappingDestMappingDestMappingDestmappingDestmapping_dest (input_control) integer-array → HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)
Indizes der Zielbilder der Transformationen.
HomMatrices2DHomMatrices2DHomMatrices2DHomMatrices2DhomMatrices2Dhom_matrices_2d (input_control) hom_mat2d-array → HHomMat2D, HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Array von 3x3 projektiven
Transformationsmatrizen.
StackingOrderStackingOrderStackingOrderStackingOrderstackingOrderstacking_order (input_control) string(-array) → HTupleMaybeSequence[Union[str, int]]HTupleHtuple (string / integer) (string / int / long) (HString / Hlong) (char* / Hlong)
Reihenfolge der Bilder im Mosaik.
Defaultwert:
'default'
"default"
"default"
"default"
"default"
"default"
Wertevorschläge: 'default'"default""default""default""default""default"
TransformDomainTransformDomainTransformDomainTransformDomaintransformDomaintransform_domain (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Sollen die Regionen der Eingabebilder auch
transformiert werden?
Defaultwert:
'false'
"false"
"false"
"false"
"false"
"false"
Werteliste: 'false'"false""false""false""false""false", 'true'"true""true""true""true""true"
MosaicMatrices2DMosaicMatrices2DMosaicMatrices2DMosaicMatrices2DmosaicMatrices2Dmosaic_matrices_2d (output_control) hom_mat2d-array → HHomMat2D, HTupleSequence[float]HTupleHtuple (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_ransacProjMatchPointsRansacProjMatchPointsRansacProjMatchPointsRansacproj_match_points_ransac,
proj_match_points_ransac_guidedproj_match_points_ransac_guidedProjMatchPointsRansacGuidedProjMatchPointsRansacGuidedProjMatchPointsRansacGuidedproj_match_points_ransac_guided,
vector_to_proj_hom_mat2dvector_to_proj_hom_mat2dVectorToProjHomMat2dVectorToProjHomMat2dVectorToProjHomMat2dvector_to_proj_hom_mat2d,
hom_vector_to_proj_hom_mat2dhom_vector_to_proj_hom_mat2dHomVectorToProjHomMat2dHomVectorToProjHomMat2dHomVectorToProjHomMat2dhom_vector_to_proj_hom_mat2d
Siehe auch
projective_trans_imageprojective_trans_imageProjectiveTransImageProjectiveTransImageProjectiveTransImageprojective_trans_image,
projective_trans_image_sizeprojective_trans_image_sizeProjectiveTransImageSizeProjectiveTransImageSizeProjectiveTransImageSizeprojective_trans_image_size,
projective_trans_regionprojective_trans_regionProjectiveTransRegionProjectiveTransRegionProjectiveTransRegionprojective_trans_region,
projective_trans_contour_xldprojective_trans_contour_xldProjectiveTransContourXldProjectiveTransContourXldProjectiveTransContourXldprojective_trans_contour_xld,
projective_trans_point_2dprojective_trans_point_2dProjectiveTransPoint2dProjectiveTransPoint2dProjectiveTransPoint2dprojective_trans_point_2d,
projective_trans_pixelprojective_trans_pixelProjectiveTransPixelProjectiveTransPixelProjectiveTransPixelprojective_trans_pixel
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