adjust_mosaic_imagesT_adjust_mosaic_imagesAdjustMosaicImagesAdjustMosaicImagesadjust_mosaic_images调整拼接图像(算子)

名称

adjust_mosaic_imagesT_adjust_mosaic_imagesAdjustMosaicImagesAdjustMosaicImagesadjust_mosaic_images — 对全景图像应用自动色彩校正。

签名

adjust_mosaic_images(Images : CorrectedImages : From, To, ReferenceImage, HomMatrices2D, EstimationMethod, EstimateParameters, OECFModel : )

Herror T_adjust_mosaic_images(const Hobject Images, Hobject* CorrectedImages, const Htuple From, const Htuple To, const Htuple ReferenceImage, const Htuple HomMatrices2D, const Htuple EstimationMethod, const Htuple EstimateParameters, const Htuple OECFModel)

void AdjustMosaicImages(const HObject& Images, HObject* CorrectedImages, const HTuple& From, const HTuple& To, const HTuple& ReferenceImage, const HTuple& HomMatrices2D, const HTuple& EstimationMethod, const HTuple& EstimateParameters, const HTuple& OECFModel)

HImage HImage::AdjustMosaicImages(const HTuple& From, const HTuple& To, Hlong ReferenceImage, const HTuple& HomMatrices2D, const HString& EstimationMethod, const HTuple& EstimateParameters, const HString& OECFModel) const

HImage HImage::AdjustMosaicImages(const HTuple& From, const HTuple& To, Hlong ReferenceImage, const HTuple& HomMatrices2D, const HString& EstimationMethod, const HString& EstimateParameters, const HString& OECFModel) const

HImage HImage::AdjustMosaicImages(const HTuple& From, const HTuple& To, Hlong ReferenceImage, const HTuple& HomMatrices2D, const char* EstimationMethod, const char* EstimateParameters, const char* OECFModel) const

HImage HImage::AdjustMosaicImages(const HTuple& From, const HTuple& To, Hlong ReferenceImage, const HTuple& HomMatrices2D, const wchar_t* EstimationMethod, const wchar_t* EstimateParameters, const wchar_t* OECFModel) const   ( Windows only)

static void HOperatorSet.AdjustMosaicImages(HObject images, out HObject correctedImages, HTuple from, HTuple to, HTuple referenceImage, HTuple homMatrices2D, HTuple estimationMethod, HTuple estimateParameters, HTuple OECFModel)

HImage HImage.AdjustMosaicImages(HTuple from, HTuple to, int referenceImage, HTuple homMatrices2D, string estimationMethod, HTuple estimateParameters, string OECFModel)

HImage HImage.AdjustMosaicImages(HTuple from, HTuple to, int referenceImage, HTuple homMatrices2D, string estimationMethod, string estimateParameters, string OECFModel)

def adjust_mosaic_images(images: HObject, from_val: Sequence[int], to: Sequence[int], reference_image: int, hom_matrices_2d: Sequence[float], estimation_method: str, estimate_parameters: MaybeSequence[str], oecfmodel: str) -> HObject

描述

adjust_mosaic_imagesadjust_mosaic_imagesAdjustMosaicImagesAdjustMosaicImagesAdjustMosaicImagesadjust_mosaic_images 执行全景图中图像的辐射调整。待校正的图像需通过 ImagesImagesImagesImagesimagesimages 参数传递,校正后的图像将通过 CorrectedImagesCorrectedImagesCorrectedImagesCorrectedImagescorrectedImagescorrected_images 参数返回。

参数 FromFromFromFromfromfromToToToTototo 必须包含全景图中所有图像对的源索引和目标索引。每组图像对的投影 3x3 矩阵需通过 HomMatrices2DHomMatrices2DHomMatrices2DHomMatrices2DhomMatrices2Dhom_matrices_2d 传递。用于亮度和白平衡参考的图像通过参数 ReferenceImageReferenceImageReferenceImageReferenceImagereferenceImagereference_image 待定。

这意味着,一张图像将指定“理想”的亮度和白平衡设置。所有其他图像都将被校正,使其亮度和白平衡与参考图像一致。换言之,参考图像本身不会被修改,但所有其他图像都会被调整。

EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethodestimation_method 用于选择采用快速但精度较低的确定方法,还是采用较慢但精度更高的确定方法。通过将 EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethodestimation_method 设置为 'standard'"standard""standard""standard""standard""standard"'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard" 来实现。

基于 'standard'"standard""standard""standard""standard""standard" 的方法仅采用每对图像重叠区域内所有图像的平均灰度值差异。而 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard" 方法则明确考虑重叠区域内每个像素的灰度值差异。

在所有情况下最小化的误差函数均通过计算对应灰度值之间差异的平方和来获得。

单个方法的可用性取决于所选的 EstimateParametersEstimateParametersEstimateParametersEstimateParametersestimateParametersestimate_parameters,该参数决定了用于估计辐射调整项的模型。通过选择 'vignetting'"vignetting""vignetting""vignetting""vignetting""vignetting" 选项,始终可以确定图像中的渐晕程度。但若选择此项,则必须将 EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethodestimation_method 设置为 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard"。对于其余辐射调整项,可提供三种不同选项:

图像渐晕的估算基于众所周知的 方法。该方法假设图像中心不存在渐晕现象,且渐晕随视角增大而按上述方程增加。

1. 基于加法模型的图像调整。该方法仅适用于曝光或白平衡差异极小的图像调整。选择此方法时,需将 EstimateParametersEstimateParametersEstimateParametersEstimateParametersestimateParametersestimate_parameters 设置为 'add_gray'"add_gray""add_gray""add_gray""add_gray""add_gray"。该模型可以仅使用 EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethodestimation_method = 'standard'"standard""standard""standard""standard""standard" 进行选择,也可以与 EstimateParametersEstimateParametersEstimateParametersEstimateParametersestimateParametersestimate_parameters = 'vignetting'"vignetting""vignetting""vignetting""vignetting""vignetting" 组合使用,并且仅使用 EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethodestimation_method = 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard" 进行选择。

该模型基于以下假设:通过为每张图像(除参考图像外)添加一个独立数值,即可校正图像间的灰度值差异。本质上,对每张图像的修改可表示为对 scale_imagescale_imageScaleImageScaleImageScaleImagescale_image 的调用:
scale_image(Image_n,CorrectedImage_n,1.0,Add_n)scale_image(Image_n,CorrectedImage_n,1.0,Add_n)ScaleImage(Image_n,CorrectedImage_n,1.0,Add_n)ScaleImage(Image_n,CorrectedImage_n,1.0,Add_n)ScaleImage(Image_n,CorrectedImage_n,1.0,Add_n)scale_image(Image_n,CorrectedImage_n,1.0,Add_n)
其中 Add_n 是该图像的校正项。

2. 基于线性模型的图像调整。该模型假设图像由采用线性传递函数的相机拍摄,因此调整项以乘法系数形式表示。选择此模型时,需将 EstimateParametersEstimateParametersEstimateParametersEstimateParametersestimateParametersestimate_parameters 设置为 'mult_gray'"mult_gray""mult_gray""mult_gray""mult_gray""mult_gray"。可通过 EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethodestimation_method = 'standard'"standard""standard""standard""standard""standard"EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethodestimation_method = 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard" 调用该模型。也可通过 EstimateParametersEstimateParametersEstimateParametersEstimateParametersestimateParametersestimate_parameters = 'vignetting'"vignetting""vignetting""vignetting""vignetting""vignetting" 进行组合调用,此时需要将 EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethodestimation_method 设置为 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard"

该模型基于以下假设:通过将每张图像的灰度值乘以一个系数,即可校正图像间的灰度值差异。本质上,对每张图像的修改仍可表示为对 scale_imagescale_imageScaleImageScaleImageScaleImagescale_image 的调用:
scale_image(Image_n,CorrectedImage_n,Mult_n,0)scale_image(Image_n,CorrectedImage_n,Mult_n,0)ScaleImage(Image_n,CorrectedImage_n,Mult_n,0)ScaleImage(Image_n,CorrectedImage_n,Mult_n,0)ScaleImage(Image_n,CorrectedImage_n,Mult_n,0)scale_image(Image_n,CorrectedImage_n,Mult_n,0)
其中 Mult_n 是该图像的校正项。

3. 基于标定模型的图像调整。该模型假设图像由采用非线性传递函数的相机拍摄。通过 OECFModelOECFModelOECFModelOECFModelOECFModeloecfmodel 选定的 OECF 类函数用于近似图像采集过程中实际使用的 OECF。与线性模型类似,校正项以乘法系数形式呈现。通过设置 EstimateParametersEstimateParametersEstimateParametersEstimateParametersestimateParametersestimate_parameters = ['mult_gray','response']["mult_gray","response"]["mult_gray","response"]["mult_gray","response"]["mult_gray","response"]["mult_gray","response"] 可选择此模型,调用时必须指定 EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethodestimation_method = 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard"。若需同时测定渐晕程度,可通过设置 EstimateParametersEstimateParametersEstimateParametersEstimateParametersestimateParametersestimate_parameters = 'vignetting'"vignetting""vignetting""vignetting""vignetting""vignetting" 实现。

该模型与线性模型相似。然而在此情况下,相机可能具有非线性响应特性。这意味着在将图像灰度值与其对应的校正系数相乘之前,必须先将灰度值反投影至线性响应曲线。为此需确定相机的响应特性。由于响应特性通常在图像序列中保持不变,故假设该参数在整个图像序列中为常数。

任何类型的函数都可被视为 OECF 的候选方案。如同 radiometric_self_calibrationradiometric_self_calibrationRadiometricSelfCalibrationRadiometricSelfCalibrationRadiometricSelfCalibrationradiometric_self_calibration 算子所采用的多项式拟合方法,但在拼接应用中的典型图像处理中,这种方法效果欠佳。其根本原因在于多项式拟合需要确定的参数过多。因此,仅能估算更简单的响应函数类型。目前仅提供所谓的拉盖尔(Laguerre)函数作为解决方案。

拉盖尔型 OECF 的响应仅由一个名为 Phi 的参数决定。第一步,将整个灰度值谱(对于 8 位图像而言即 0 至 255 的值)转换为 [0:1] 区间内的浮点数。随后基于此计算 OECF 的反投影,并将所得灰度值再次转换回原始区间。

基于拉盖尔型 OECF 将灰度值逆变换回线性值的过程由下列方程描述:

其中 I_l 为线性灰度值,I_nl 为(非线性)灰度值。

参数 OECFModelOECFModelOECFModelOECFModelOECFModeloecfmodel 仅在选择标定模型时使用。否则,对 OECFModelOECFModelOECFModelOECFModelOECFModeloecfmodel 的任何输入都将被忽略。

参数 EstimateParametersEstimateParametersEstimateParametersEstimateParametersestimateParametersestimate_parameters 也可用于影响算子的性能和内存消耗。通过设置 'no_cache'"no_cache""no_cache""no_cache""no_cache""no_cache" 可禁用内部缓存机制。此开关仅在 EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethodestimation_method 设置为 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard" 时生效。否则将被忽略。禁用内部缓存后,算子将显著降低内存占用,但每次最小化算法迭代时需重新计算对应的灰度值对。因此,仅当计算过程中物理内存耗尽且操作系统开始使用交换空间时,才建议禁用缓存功能。

影响性能的第二种方式是采用子采样。当将 EstimateParametersEstimateParametersEstimateParametersEstimateParametersestimateParametersestimate_parameters 设置为 'subsampling_2'"subsampling_2""subsampling_2""subsampling_2""subsampling_2""subsampling_2" 时,图像会在内部以2倍缩放比例进行缩小处理。尽管提供了建议的取值列表,但不仅限于2和4的倍数,任何整数值都可通过在 EstimateParametersEstimateParametersEstimateParametersEstimateParametersestimateParametersestimate_parameters 中向 subsampling_ 添加该数值来指定。由此,图像数据量得以大幅缩减,从而显著加快了内部最小化计算的速度。事实上,适度采用子采样技术甚至可能获得更佳效果,因为它同时能降低轻微错位像素的影响。尽管当 EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethodestimation_method 设置为 'standard'"standard""standard""standard""standard""standard"时,子采样也会影响最小化过程,但它主要适用于 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard"

关于在应用程序中使用 adjust_mosaic_imagesadjust_mosaic_imagesAdjustMosaicImagesAdjustMosaicImagesAdjustMosaicImagesadjust_mosaic_images 的更多通用说明:

执行信息

参数

ImagesImagesImagesImagesimagesimages (输入对象)  (multichannel-)image-array objectHImageHObjectHImageHobject (byte)

输入图像。

CorrectedImagesCorrectedImagesCorrectedImagesCorrectedImagescorrectedImagescorrected_images (输出对象)  (multichannel-)image-array objectHImageHObjectHImageHobject * (byte)

输出图像。

FromFromFromFromfromfrom (输入控制)  integer-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

源图像列表。

ToToToTototo (输入控制)  integer-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

目标图像列表。

ReferenceImageReferenceImageReferenceImageReferenceImagereferenceImagereference_image (输入控制)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

参考图像。

HomMatrices2DHomMatrices2DHomMatrices2DHomMatrices2DhomMatrices2Dhom_matrices_2d (输入控制)  real-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

投影矩阵。

EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethodestimation_method (输入控制)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

用于校正的估计算法。

默认值: 'standard' "standard" "standard" "standard" "standard" "standard"

值列表: 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard", 'standard'"standard""standard""standard""standard""standard"

EstimateParametersEstimateParametersEstimateParametersEstimateParametersestimateParametersestimate_parameters (输入控制)  string(-array) HTupleMaybeSequence[str]HTupleHtuple (string) (string) (HString) (char*)

待估参数。

默认值: ['mult_gray'] ["mult_gray"] ["mult_gray"] ["mult_gray"] ["mult_gray"] ["mult_gray"]

建议值: 'add_gray'"add_gray""add_gray""add_gray""add_gray""add_gray", 'mult_gray'"mult_gray""mult_gray""mult_gray""mult_gray""mult_gray", 'response'"response""response""response""response""response", 'vignetting'"vignetting""vignetting""vignetting""vignetting""vignetting", 'subsampling_2'"subsampling_2""subsampling_2""subsampling_2""subsampling_2""subsampling_2", 'subsampling_4'"subsampling_4""subsampling_4""subsampling_4""subsampling_4""subsampling_4", 'no_cache'"no_cache""no_cache""no_cache""no_cache""no_cache"

OECFModelOECFModelOECFModelOECFModelOECFModeloecfmodel (输入控制)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

将采用的 OECF 模型。

默认值: ['laguerre'] ["laguerre"] ["laguerre"] ["laguerre"] ["laguerre"] ["laguerre"]

值列表: 'laguerre'"laguerre""laguerre""laguerre""laguerre""laguerre"

示例(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)
adjust_mosaic_images(Images,CorrectedImages,From,To,1,HomMatrices2D, \
                     'gold_standard',['mult_gray','response'],'laguerre')

结果

如果参数有效,算子 adjust_mosaic_imagesadjust_mosaic_imagesAdjustMosaicImagesAdjustMosaicImagesAdjustMosaicImagesadjust_mosaic_images 返回值 2 ( H_MSG_TRUE )。如有必要,则抛出异常。

可能的前趋

stationary_camera_self_calibrationstationary_camera_self_calibrationStationaryCameraSelfCalibrationStationaryCameraSelfCalibrationStationaryCameraSelfCalibrationstationary_camera_self_calibration

可能的后继

gen_spherical_mosaicgen_spherical_mosaicGenSphericalMosaicGenSphericalMosaicGenSphericalMosaicgen_spherical_mosaic

参考文献

David Hasler, Sabine Süsstrunk: Mapping colour in image stitching applications. Journal of Visual Communication and Image Representation, 15(1):65-90, 2004.

模块

基础