Skip to content

gen_cube_map_mosaicGenCubeMapMosaicGenCubeMapMosaicgen_cube_map_mosaicT_gen_cube_map_mosaicπŸ”—

Short descriptionπŸ”—

gen_cube_map_mosaicGenCubeMapMosaicGenCubeMapMosaicgen_cube_map_mosaicT_gen_cube_map_mosaic β€” Create 6 cube map images of a spherical mosaic.

SignatureπŸ”—

gen_cube_map_mosaic( image Images, out image Front, out image Rear, out image Left, out image Right, out image Top, out image Bottom, hom_mat2d CameraMatrices, hom_mat2d RotationMatrices, number CubeMapDimension, string StackingOrder, string Interpolation )void GenCubeMapMosaic( const HObject& Images, HObject* Front, HObject* Rear, HObject* Left, HObject* Right, HObject* Top, HObject* Bottom, const HTuple& CameraMatrices, const HTuple& RotationMatrices, const HTuple& CubeMapDimension, const HTuple& StackingOrder, const HTuple& Interpolation )static void HOperatorSet.GenCubeMapMosaic( HObject images, out HObject front, out HObject rear, out HObject left, out HObject right, out HObject top, out HObject bottom, HTuple cameraMatrices, HTuple rotationMatrices, HTuple cubeMapDimension, HTuple stackingOrder, HTuple interpolation )def gen_cube_map_mosaic( images: HObject, camera_matrices: Sequence[float], rotation_matrices: Sequence[float], cube_map_dimension: int, stacking_order: MaybeSequence[Union[str, int]], interpolation: str ) -> Tuple[HObject, HObject, HObject, HObject, HObject, HObject]

Herror T_gen_cube_map_mosaic( const Hobject Images, Hobject* Front, Hobject* Rear, Hobject* Left, Hobject* Right, Hobject* Top, Hobject* Bottom, const Htuple CameraMatrices, const Htuple RotationMatrices, const Htuple CubeMapDimension, const Htuple StackingOrder, const Htuple Interpolation )

HImage HImage::GenCubeMapMosaic( HImage* Rear, HImage* Left, HImage* Right, HImage* Top, HImage* Bottom, const HHomMat2DArray& CameraMatrices, const HHomMat2DArray& RotationMatrices, Hlong CubeMapDimension, const HTuple& StackingOrder, const HString& Interpolation ) const

HImage HImage::GenCubeMapMosaic( HImage* Rear, HImage* Left, HImage* Right, HImage* Top, HImage* Bottom, const HHomMat2DArray& CameraMatrices, const HHomMat2DArray& RotationMatrices, Hlong CubeMapDimension, const HString& StackingOrder, const HString& Interpolation ) const

HImage HImage::GenCubeMapMosaic( HImage* Rear, HImage* Left, HImage* Right, HImage* Top, HImage* Bottom, const HHomMat2DArray& CameraMatrices, const HHomMat2DArray& RotationMatrices, Hlong CubeMapDimension, const char* StackingOrder, const char* Interpolation ) const

HImage HImage::GenCubeMapMosaic( HImage* Rear, HImage* Left, HImage* Right, HImage* Top, HImage* Bottom, const HHomMat2DArray& CameraMatrices, const HHomMat2DArray& RotationMatrices, Hlong CubeMapDimension, const wchar_t* StackingOrder, const wchar_t* Interpolation ) const (Windows only)

HImage HImage.GenCubeMapMosaic( out HImage rear, out HImage left, out HImage right, out HImage top, out HImage bottom, HHomMat2D[] cameraMatrices, HHomMat2D[] rotationMatrices, int cubeMapDimension, HTuple stackingOrder, string interpolation )

HImage HImage.GenCubeMapMosaic( out HImage rear, out HImage left, out HImage right, out HImage top, out HImage bottom, HHomMat2D[] cameraMatrices, HHomMat2D[] rotationMatrices, int cubeMapDimension, string stackingOrder, string interpolation )

DescriptionπŸ”—

gen_cube_map_mosaicGenCubeMapMosaic creates 6 cube map images of a spherical mosaic Frontfrontfront, Leftleftleft, Rearrearrear, Rightrightright, Toptoptop and Bottombottombottom from the input images passed in Imagesimagesimages. The pose of the images in space, which is used to compute the position of the images with respect to the surface of the sphere, can be determined with stationary_camera_self_calibrationStationaryCameraSelfCalibration. The camera and rotation matrices computed with stationary_camera_self_calibrationStationaryCameraSelfCalibration can be used in CameraMatricescameraMatricescamera_matrices and RotationMatricesrotationMatricesrotation_matrices. A spherical mosaic can only be created from images that were taken with a stationary camera (see stationary_camera_self_calibrationStationaryCameraSelfCalibration).

The width and height of the output cube map images can be selected by setting the parameter CubeMapDimensioncubeMapDimensioncube_map_dimension. The value represents the width and height in pixels.

The mode in which the images are added to the mosaic is given by StackingOrderstackingOrderstacking_order. For \(\textrm{StackingOrder} = '\textit{voronoi}'\), the points in the mosaic image are determined from the Voronoi cell of the respective input image. This means that the gray values are taken from the points of the input image to whose center the pixel in the mosaic image has the smallest distance on the sphere. This mode has the advantage that vignetting and uncorrected radial distortions are less noticeable in the mosaic image because they typically are symmetric with respect to the image center. Alternatively, with the choice of parameters described in the following, a mode can be selected that has the same effect as if the images were painted successively into the mosaic image. Here, the order in which the images are added to the mosaic image is important. Therefore, an array of integer values can be passed in StackingOrderstackingOrderstacking_order. 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" is given instead of an array of integers, the canonical order (images in the order used in Imagesimagesimages) will be used. Hence, if neither 'voronoi'"voronoi" nor 'default'"default" are used, StackingOrderstackingOrderstacking_order must contain a permutation of the numbers 1,…,\(n\), where \(n\) is the number of images passed in Imagesimagesimages. It should be noted that the mode 'voronoi'"voronoi" cannot always be used. For example, at least two images must be passed to use this mode. Furthermore, for very special configurations of the positions of the image centers on the sphere, the Voronoi cells cannot be determined uniquely. With \(\textrm{StackingOrder} = '\textit{blend}'\), an additional mode is available, which blends the images of the mosaic smoothly. This way seams between the images become less apparent. The seam lines between the images are the same as in 'voronoi'"voronoi". This mode leads to visually more appealing images, but requires significantly more resources. If the mode 'voronoi'"voronoi" or 'blend'"blend" cannot be used for whatever reason the mode is switched internally to 'default'"default" automatically.

The parameter Interpolationinterpolationinterpolation selects the desired interpolation mode for creating the cube maps. 'bilinear'"bilinear" and 'bicubic'"bicubic" interpolation is available for all modes of StackingOrderstackingOrderstacking_order. 'nearest_neighbor'"nearest_neighbor" is only available if StackingOrderstackingOrderstacking_order is set to 'default'"default" or 'voronoi'"voronoi".

Execution informationπŸ”—

Execution information
  • Multithreading type: reentrant (runs in parallel with non-exclusive operators).

  • Multithreading scope: global (may be called from any thread).

  • Processed without parallelization.

ParametersπŸ”—

Imagesimagesimages (input_object) (multichannel-)image-array β†’ object (byte / uint2 / real)HObject (byte / uint2 / real)HImage (byte / uint2 / real)HObject (byte / uint2 / real)Hobject (byte / uint2 / real)

Input images.

Frontfrontfront (output_object) (multichannel-)image β†’ object (byte / uint2 / real)HObject (byte / uint2 / real)HImage (byte / uint2 / real)HObject (byte / uint2 / real)Hobject * (byte / uint2 / real)

Front cube map.

Rearrearrear (output_object) (multichannel-)image β†’ object (byte / uint2 / real)HObject (byte / uint2 / real)HImage (byte / uint2 / real)HObject (byte / uint2 / real)Hobject * (byte / uint2 / real)

Rear cube map.

Leftleftleft (output_object) (multichannel-)image β†’ object (byte / uint2 / real)HObject (byte / uint2 / real)HImage (byte / uint2 / real)HObject (byte / uint2 / real)Hobject * (byte / uint2 / real)

Left cube map.

Rightrightright (output_object) (multichannel-)image β†’ object (byte / uint2 / real)HObject (byte / uint2 / real)HImage (byte / uint2 / real)HObject (byte / uint2 / real)Hobject * (byte / uint2 / real)

Right cube map.

Toptoptop (output_object) (multichannel-)image β†’ object (byte / uint2 / real)HObject (byte / uint2 / real)HImage (byte / uint2 / real)HObject (byte / uint2 / real)Hobject * (byte / uint2 / real)

Top cube map.

Bottombottombottom (output_object) (multichannel-)image β†’ object (byte / uint2 / real)HObject (byte / uint2 / real)HImage (byte / uint2 / real)HObject (byte / uint2 / real)Hobject * (byte / uint2 / real)

Bottom cube map.

CameraMatricescameraMatricescamera_matrices (input_control) hom_mat2d-array β†’ (real)HTuple (double)HHomMat2D, HTuple (double)Sequence[float]Htuple (double)

(Array of) 3x3 projective camera matrices that determine the internal camera parameters.

RotationMatricesrotationMatricesrotation_matrices (input_control) hom_mat2d-array β†’ (real)HTuple (double)HHomMat2D, HTuple (double)Sequence[float]Htuple (double)

Array of 3x3 transformation matrices that determine rotation of the camera in the respective image.

CubeMapDimensioncubeMapDimensioncube_map_dimension (input_control) number β†’ (integer)HTuple (Hlong)HTuple (int / long)intHtuple (Hlong)

Width and height of the resulting cube maps.

Default: 10001000
Restriction: CubeMapDimension >= 0

StackingOrderstackingOrderstacking_order (input_control) string(-array) β†’ (string / integer)HTuple (HString / Hlong)HTuple (string / int / long)MaybeSequence[Union[str, int]]Htuple (char* / Hlong)

Mode of adding the images to the mosaic image.

Default: 'voronoi'"voronoi"
Suggested values: 'blend', 'voronoi', 'default'"blend", "voronoi", "default"

Interpolationinterpolationinterpolation (input_control) string β†’ (string)HTuple (HString)HTuple (string)strHtuple (char*)

Mode of image interpolation.

Default: 'bilinear'"bilinear"
Suggested values: 'nearest_neighbor', 'bilinear', 'bicubic'"nearest_neighbor", "bilinear", "bicubic"

ExampleπŸ”—

(HDevelop)


* 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_cube_map_mosaic (Images, Front, Left, Rear, Right, Top, Bottom, \
                     CameraMatrix, RotationMatrices, 1000, 'default', \
                     'bicubic')

* 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_cube_map_mosaic (Images, Front, Left, Rear, Right, Top, Bottom, \
                     CameraMatrix, RotationMatrices, 1000, 'default', \
                     'bicubic')

ResultπŸ”—

If the parameters are valid, the operator gen_cube_map_mosaicGenCubeMapMosaic returns the value 2 (H_MSG_TRUE). If necessary an exception is raised.

Combinations with other operatorsπŸ”—

Combinations

Possible predecessors

stationary_camera_self_calibrationStationaryCameraSelfCalibration

Alternatives

gen_spherical_mosaicGenSphericalMosaic, gen_projective_mosaicGenProjectiveMosaic

ReferencesπŸ”—

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.

ModuleπŸ”—

Matching