gen_projective_mosaicT_gen_projective_mosaicGenProjectiveMosaicGenProjectiveMosaic (Operator)

Name

gen_projective_mosaicT_gen_projective_mosaicGenProjectiveMosaicGenProjectiveMosaic — Combine multiple images into a mosaic image.

Signature

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   (Windows only)

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)

Description

gen_projective_mosaicgen_projective_mosaicGenProjectiveMosaicGenProjectiveMosaicGenProjectiveMosaic combines the input images contained in the object ImagesImagesImagesImagesimages into a mosaic image MosaicImageMosaicImageMosaicImageMosaicImagemosaicImage. The relative positions of the images are defined by 3x3 projective transformation matrices. The array HomMatrices2DHomMatrices2DHomMatrices2DHomMatrices2DhomMatrices2D contains a sequence of these linearized matrices. The values in MappingSourceMappingSourceMappingSourceMappingSourcemappingSource and MappingDestMappingDestMappingDestMappingDestmappingDest are the indices of the images that the corresponding matrix applies to. MappingSourceMappingSourceMappingSourceMappingSourcemappingSource=4 and MappingDestMappingDestMappingDestMappingDestmappingDest=7 means that the matrix describes the transformation of the image number 4 into the projective plane of image 7. The transformation matrices between the respective image pairs given by MappingSourceMappingSourceMappingSourceMappingSourcemappingSource and MappingDestMappingDestMappingDestMappingDestmappingDest are typically determined with proj_match_points_ransacproj_match_points_ransacProjMatchPointsRansacProjMatchPointsRansacProjMatchPointsRansac.

As usual for operators that access image objects (e.g., select_objselect_objSelectObjSelectObjSelectObj), the images are numbered starting from 1, i.e., MappingSourceMappingSourceMappingSourceMappingSourcemappingSource, MappingDestMappingDestMappingDestMappingDestmappingDest, StartImageStartImageStartImageStartImagestartImage, and StackingOrderStackingOrderStackingOrderStackingOrderstackingOrder) must contain values between 1 and the number of images passed in ImagesImagesImagesImagesimages.

The parameter StartImageStartImageStartImageStartImagestartImage states which image defines the image plane of the final image, that is, which input image remains unchanged in the output image. This is usually an image that is located near the center of the image mosaic.

The origin of MosaicImageMosaicImageMosaicImageMosaicImagemosaicImage and its size are automatically chosen so that all of the input images are completely visible.

The order in which the images are added to the mosaic is given by the array StackingOrderStackingOrderStackingOrderStackingOrderstackingOrder. The first index in this array will end up at the bottom of the image stack while the last one will be on top. If 'default'"default""default""default""default" is given instead of an array of integers, the canonical order (images in the order used in ImagesImagesImagesImagesimages) will be used.

The parameter TransformDomainTransformDomainTransformDomainTransformDomaintransformDomain can be used to determine whether the domains of ImagesImagesImagesImagesimages are also transformed. Since the transformation of the domains costs runtime, this parameter should be used to specify whether this is desired or not. If TransformDomainTransformDomainTransformDomainTransformDomaintransformDomain is set to 'false'"false""false""false""false" the domain of the input images is ignored and the complete images are transformed.

On output, the parameter MosaicMatrices2DMosaicMatrices2DMosaicMatrices2DMosaicMatrices2DmosaicMatrices2D contains a set of 3x3 projective transformation matrices that describe for each image in ImagesImagesImagesImagesimages the mapping of the image to its position in the mosaic.

Execution Information

Parameters

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

Input images.

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

Output image.

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

Index of the central input image.

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

Indices of the source images of the transformations.

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

Indices of the target images of the transformations.

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

Array of 3x3 projective transformation matrices.

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

Stacking order of the images in the mosaic.

Default value: 'default' "default" "default" "default" "default"

Suggested values: 'default'"default""default""default""default"

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

Should the domains of the input images also be transformed?

Default value: 'false' "false" "false" "false" "false"

List of values: 'false'"false""false""false""false", 'true'"true""true""true""true"

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

Array of 3x3 projective transformation matrices that determine the position of the images in the mosaic.

Example (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)

Possible Predecessors

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

See also

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

References

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.

Module

Matching