binocular_distance_mgT_binocular_distance_mgBinocularDistanceMgBinocularDistanceMgbinocular_distance_mg双目距离多重网格(算子)
名称
binocular_distance_mgT_binocular_distance_mgBinocularDistanceMgBinocularDistanceMgbinocular_distance_mg — 使用多重网格方法计算校正后的立体图像对的距离值。
签名
binocular_distance_mg(ImageRect1, ImageRect2 : Distance, Score : CamParamRect1, CamParamRect2, RelPoseRect, GrayConstancy, GradientConstancy, Smoothness, InitialGuess, CalculateScore, MGParamName, MGParamValue : )
Herror T_binocular_distance_mg(const Hobject ImageRect1, const Hobject ImageRect2, Hobject* Distance, Hobject* Score, const Htuple CamParamRect1, const Htuple CamParamRect2, const Htuple RelPoseRect, const Htuple GrayConstancy, const Htuple GradientConstancy, const Htuple Smoothness, const Htuple InitialGuess, const Htuple CalculateScore, const Htuple MGParamName, const Htuple MGParamValue)
void BinocularDistanceMg(const HObject& ImageRect1, const HObject& ImageRect2, HObject* Distance, HObject* Score, const HTuple& CamParamRect1, const HTuple& CamParamRect2, const HTuple& RelPoseRect, const HTuple& GrayConstancy, const HTuple& GradientConstancy, const HTuple& Smoothness, const HTuple& InitialGuess, const HTuple& CalculateScore, const HTuple& MGParamName, const HTuple& MGParamValue)
HImage HImage::BinocularDistanceMg(const HImage& ImageRect2, HImage* Score, const HCamPar& CamParamRect1, const HCamPar& CamParamRect2, const HPose& RelPoseRect, double GrayConstancy, double GradientConstancy, double Smoothness, double InitialGuess, const HString& CalculateScore, const HTuple& MGParamName, const HTuple& MGParamValue) const
HImage HImage::BinocularDistanceMg(const HImage& ImageRect2, HImage* Score, const HCamPar& CamParamRect1, const HCamPar& CamParamRect2, const HPose& RelPoseRect, double GrayConstancy, double GradientConstancy, double Smoothness, double InitialGuess, const HString& CalculateScore, const HString& MGParamName, const HString& MGParamValue) const
HImage HImage::BinocularDistanceMg(const HImage& ImageRect2, HImage* Score, const HCamPar& CamParamRect1, const HCamPar& CamParamRect2, const HPose& RelPoseRect, double GrayConstancy, double GradientConstancy, double Smoothness, double InitialGuess, const char* CalculateScore, const char* MGParamName, const char* MGParamValue) const
HImage HImage::BinocularDistanceMg(const HImage& ImageRect2, HImage* Score, const HCamPar& CamParamRect1, const HCamPar& CamParamRect2, const HPose& RelPoseRect, double GrayConstancy, double GradientConstancy, double Smoothness, double InitialGuess, const wchar_t* CalculateScore, const wchar_t* MGParamName, const wchar_t* MGParamValue) const
(
Windows only)
HImage HCamPar::BinocularDistanceMg(const HImage& ImageRect1, const HImage& ImageRect2, HImage* Score, const HCamPar& CamParamRect2, const HPose& RelPoseRect, double GrayConstancy, double GradientConstancy, double Smoothness, double InitialGuess, const HString& CalculateScore, const HTuple& MGParamName, const HTuple& MGParamValue) const
HImage HCamPar::BinocularDistanceMg(const HImage& ImageRect1, const HImage& ImageRect2, HImage* Score, const HCamPar& CamParamRect2, const HPose& RelPoseRect, double GrayConstancy, double GradientConstancy, double Smoothness, double InitialGuess, const HString& CalculateScore, const HString& MGParamName, const HString& MGParamValue) const
HImage HCamPar::BinocularDistanceMg(const HImage& ImageRect1, const HImage& ImageRect2, HImage* Score, const HCamPar& CamParamRect2, const HPose& RelPoseRect, double GrayConstancy, double GradientConstancy, double Smoothness, double InitialGuess, const char* CalculateScore, const char* MGParamName, const char* MGParamValue) const
HImage HCamPar::BinocularDistanceMg(const HImage& ImageRect1, const HImage& ImageRect2, HImage* Score, const HCamPar& CamParamRect2, const HPose& RelPoseRect, double GrayConstancy, double GradientConstancy, double Smoothness, double InitialGuess, const wchar_t* CalculateScore, const wchar_t* MGParamName, const wchar_t* MGParamValue) const
(
Windows only)
HImage HPose::BinocularDistanceMg(const HImage& ImageRect1, const HImage& ImageRect2, HImage* Score, const HCamPar& CamParamRect1, const HCamPar& CamParamRect2, double GrayConstancy, double GradientConstancy, double Smoothness, double InitialGuess, const HString& CalculateScore, const HTuple& MGParamName, const HTuple& MGParamValue) const
HImage HPose::BinocularDistanceMg(const HImage& ImageRect1, const HImage& ImageRect2, HImage* Score, const HCamPar& CamParamRect1, const HCamPar& CamParamRect2, double GrayConstancy, double GradientConstancy, double Smoothness, double InitialGuess, const HString& CalculateScore, const HString& MGParamName, const HString& MGParamValue) const
HImage HPose::BinocularDistanceMg(const HImage& ImageRect1, const HImage& ImageRect2, HImage* Score, const HCamPar& CamParamRect1, const HCamPar& CamParamRect2, double GrayConstancy, double GradientConstancy, double Smoothness, double InitialGuess, const char* CalculateScore, const char* MGParamName, const char* MGParamValue) const
HImage HPose::BinocularDistanceMg(const HImage& ImageRect1, const HImage& ImageRect2, HImage* Score, const HCamPar& CamParamRect1, const HCamPar& CamParamRect2, double GrayConstancy, double GradientConstancy, double Smoothness, double InitialGuess, const wchar_t* CalculateScore, const wchar_t* MGParamName, const wchar_t* MGParamValue) const
(
Windows only)
static void HOperatorSet.BinocularDistanceMg(HObject imageRect1, HObject imageRect2, out HObject distance, out HObject score, HTuple camParamRect1, HTuple camParamRect2, HTuple relPoseRect, HTuple grayConstancy, HTuple gradientConstancy, HTuple smoothness, HTuple initialGuess, HTuple calculateScore, HTuple MGParamName, HTuple MGParamValue)
HImage HImage.BinocularDistanceMg(HImage imageRect2, out HImage score, HCamPar camParamRect1, HCamPar camParamRect2, HPose relPoseRect, double grayConstancy, double gradientConstancy, double smoothness, double initialGuess, string calculateScore, HTuple MGParamName, HTuple MGParamValue)
HImage HImage.BinocularDistanceMg(HImage imageRect2, out HImage score, HCamPar camParamRect1, HCamPar camParamRect2, HPose relPoseRect, double grayConstancy, double gradientConstancy, double smoothness, double initialGuess, string calculateScore, string MGParamName, string MGParamValue)
HImage HCamPar.BinocularDistanceMg(HImage imageRect1, HImage imageRect2, out HImage score, HCamPar camParamRect2, HPose relPoseRect, double grayConstancy, double gradientConstancy, double smoothness, double initialGuess, string calculateScore, HTuple MGParamName, HTuple MGParamValue)
HImage HCamPar.BinocularDistanceMg(HImage imageRect1, HImage imageRect2, out HImage score, HCamPar camParamRect2, HPose relPoseRect, double grayConstancy, double gradientConstancy, double smoothness, double initialGuess, string calculateScore, string MGParamName, string MGParamValue)
HImage HPose.BinocularDistanceMg(HImage imageRect1, HImage imageRect2, out HImage score, HCamPar camParamRect1, HCamPar camParamRect2, double grayConstancy, double gradientConstancy, double smoothness, double initialGuess, string calculateScore, HTuple MGParamName, HTuple MGParamValue)
HImage HPose.BinocularDistanceMg(HImage imageRect1, HImage imageRect2, out HImage score, HCamPar camParamRect1, HCamPar camParamRect2, double grayConstancy, double gradientConstancy, double smoothness, double initialGuess, string calculateScore, string MGParamName, string MGParamValue)
def binocular_distance_mg(image_rect_1: HObject, image_rect_2: HObject, cam_param_rect_1: Sequence[Union[int, float, str]], cam_param_rect_2: Sequence[Union[int, float, str]], rel_pose_rect: Sequence[Union[int, float]], gray_constancy: float, gradient_constancy: float, smoothness: float, initial_guess: float, calculate_score: str, mgparam_name: MaybeSequence[str], mgparam_value: MaybeSequence[Union[str, float, int]]) -> Tuple[HObject, HObject]
描述
binocular_distance_mgbinocular_distance_mgBinocularDistanceMgBinocularDistanceMgBinocularDistanceMgbinocular_distance_mg 采用多重网格方法计算校正立体图像对的距离值。该算子首先类似于 binocular_disparity_mgbinocular_disparity_mgBinocularDisparityMgBinocularDisparityMgBinocularDisparityMgbinocular_disparity_mg,计算两幅图校正图像
ImageRect1ImageRect1ImageRect1ImageRect1imageRect1image_rect_1 和 ImageRect2ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 之间的视差。随后将所得视差值转换为对应三维世界点到校正立体相机系统的距离值,此过程类似于
disparity_to_distancedisparity_to_distanceDisparityToDistanceDisparityToDistanceDisparityToDistancedisparity_to_distance。DistanceDistanceDistanceDistancedistancedistance 返回单通道图像距离,其中每个灰度值代表相应三维世界点到立体相机系统的距离。与 binocular_distancebinocular_distanceBinocularDistanceBinocularDistanceBinocularDistancebinocular_distance
不同,该算子采用基于多重网格方法的变分法。该方法即使在不含纹理的图像区域也能返回距离值。
输入图像 ImageRect1ImageRect1ImageRect1ImageRect1imageRect1image_rect_1 和 ImageRect2ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 必须是一对校正过的立体图像,即对应点必须具有相同的行坐标。若违反此假设,可通过
calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCamerascalibrate_cameras、gen_binocular_rectification_mapgen_binocular_rectification_mapGenBinocularRectificationMapGenBinocularRectificationMapGenBinocularRectificationMapgen_binocular_rectification_map
和 map_imagemap_imageMapImageMapImageMapImagemap_image。
要将视差转换为距离,必须指定校正摄像机1的内部参数
CamParamRect1CamParamRect1CamParamRect1CamParamRect1camParamRect1cam_param_rect_1、校正摄像机2的内部参数
CamParamRect2CamParamRect2CamParamRect2CamParamRect2camParamRect2cam_param_rect_2,以及相机间的相对姿态
RelPoseRectRelPoseRectRelPoseRectRelPoseRectrelPoseRectrel_pose_rect。相对姿态定义了从校正后的相机系统2到校正后的相机系统1的点变换。这些参数可通过 calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCamerascalibrate_cameras 和
gen_binocular_rectification_mapgen_binocular_rectification_mapGenBinocularRectificationMapGenBinocularRectificationMapGenBinocularRectificationMapgen_binocular_rectification_map 算子获取。
有关该算法及剩余参数的详细说明,请参阅
binocular_disparity_mgbinocular_disparity_mgBinocularDisparityMgBinocularDisparityMgBinocularDisparityMgbinocular_disparity_mg 的文档。
注意
若使用配备远心变焦镜头的相机,DistanceDistanceDistanceDistancedistancedistance 并非定义为某一点到相机的距离,而是定义为该点到由两台相机的y轴及其基线构成的平面的距离(参见
gen_binocular_rectification_mapgen_binocular_rectification_mapGenBinocularRectificationMapGenBinocularRectificationMapGenBinocularRectificationMapgen_binocular_rectification_map)。
对于混合类型的立体设置(即原始相机中一台为透视相机而另一台为远心相机的立体设置;参见
gen_binocular_rectification_mapgen_binocular_rectification_mapGenBinocularRectificationMapGenBinocularRectificationMapGenBinocularRectificationMapgen_binocular_rectification_map),两台相机的校正平面相对于物体的位置会导致非常反直觉的距离值。因此,
binocular_distance_mgbinocular_distance_mgBinocularDistanceMgBinocularDistanceMgBinocularDistanceMgbinocular_distance_mg 不支持混合类型的立体设置。对于混合类型的立体设置,请使用
reconstruct_surface_stereoreconstruct_surface_stereoReconstructSurfaceStereoReconstructSurfaceStereoReconstructSurfaceStereoreconstruct_surface_stereo,其中参考坐标系可任意选择。或者,也可以使用
binocular_disparity_mgbinocular_disparity_mgBinocularDisparityMgBinocularDisparityMgBinocularDisparityMgbinocular_disparity_mg 和 disparity_image_to_xyzdisparity_image_to_xyzDisparityImageToXyzDisparityImageToXyzDisparityImageToXyzdisparity_image_to_xyz。
此外,同时包含配备和未配备超中心镜头的相机的立体设置不受支持。
执行信息
- 多线程类型:可重入(与非独占算子并行运行)。
- 多线程作用域:全局(可从任何线程调用)。
- 在元组级别上自动并行化。
- 在内部数据级别上自动并行化。
参数
ImageRect1ImageRect1ImageRect1ImageRect1imageRect1image_rect_1 (输入对象) singlechannelimage(-array) → objectHImageHObjectHImageHobject (byte / uint2 / real)
相机 1 的校正图像。
ImageRect2ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 (输入对象) singlechannelimage(-array) → objectHImageHObjectHImageHobject (byte / uint2 / real)
相机 2 的校正图像。
DistanceDistanceDistanceDistancedistancedistance (输出对象) singlechannelimage(-array) → objectHImageHObjectHImageHobject * (real)
距离图像。
CamParamRect1CamParamRect1CamParamRect1CamParamRect1camParamRect1cam_param_rect_1 (输入控制) campar → HCamPar, HTupleSequence[Union[int, float, str]]HTupleHtuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*)
校正相机 1 的内部相机参数。
CamParamRect2CamParamRect2CamParamRect2CamParamRect2camParamRect2cam_param_rect_2 (输入控制) campar → HCamPar, HTupleSequence[Union[int, float, str]]HTupleHtuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*)
校正相机 2 的内部相机参数。
RelPoseRectRelPoseRectRelPoseRectRelPoseRectrelPoseRectrel_pose_rect (输入控制) pose → HPose, HTupleSequence[Union[int, float]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
从校正后的相机 2 到校正后的相机 1 的点变换。
元素数量:
7
GrayConstancyGrayConstancyGrayConstancyGrayConstancygrayConstancygray_constancy (输入控制) real → HTuplefloatHTupleHtuple (real) (double) (double) (double)
数据项中灰度值恒定性的权重。
默认值:
1.0
建议值:
0.0, 1.0, 2.0, 10.0
限制:
GrayConstancy >= 0.0
GradientConstancyGradientConstancyGradientConstancyGradientConstancygradientConstancygradient_constancy (输入控制) real → HTuplefloatHTupleHtuple (real) (double) (double) (double)
数据项中梯度恒定性的权重。
默认值:
30.0
建议值:
0.0, 1.0, 5.0, 10.0, 30.0, 50.0, 70.0
限制:
GradientConstancy >= 0.0
SmoothnessSmoothnessSmoothnessSmoothnesssmoothnesssmoothness (输入控制) real → HTuplefloatHTupleHtuple (real) (double) (double) (double)
平滑项相对于数据项的权重。
默认值:
5.0
建议值:
1.0, 3.0, 5.0, 10.0
限制:
Smoothness > 0.0
InitialGuessInitialGuessInitialGuessInitialGuessinitialGuessinitial_guess (输入控制) real → HTuplefloatHTupleHtuple (real) (double) (double) (double)
视差的初步估计。
默认值:
0.0
建议值:
-30.0, -20.0, -10.0, 0.0, 10.0, 20.0, 30.0
CalculateScoreCalculateScoreCalculateScoreCalculateScorecalculateScorecalculate_score (输入控制) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
质量指标是否应返回至 ScoreScoreScoreScorescorescore?
默认值:
'false'
"false"
"false"
"false"
"false"
"false"
建议值:
'true'"true""true""true""true""true", 'false'"false""false""false""false""false"
MGParamNameMGParamNameMGParamNameMGParamNameMGParamNamemgparam_name (输入控制) attribute.name(-array) → HTupleMaybeSequence[str]HTupleHtuple (string) (string) (HString) (char*)
多重网格算法的参数名称。
默认值:
'default_parameters'
"default_parameters"
"default_parameters"
"default_parameters"
"default_parameters"
"default_parameters"
值列表:
'default_parameters'"default_parameters""default_parameters""default_parameters""default_parameters""default_parameters", 'initial_level'"initial_level""initial_level""initial_level""initial_level""initial_level", 'iterations'"iterations""iterations""iterations""iterations""iterations", 'mg_cycle_type'"mg_cycle_type""mg_cycle_type""mg_cycle_type""mg_cycle_type""mg_cycle_type", 'mg_post_relax'"mg_post_relax""mg_post_relax""mg_post_relax""mg_post_relax""mg_post_relax", 'mg_pre_relax'"mg_pre_relax""mg_pre_relax""mg_pre_relax""mg_pre_relax""mg_pre_relax", 'mg_solver'"mg_solver""mg_solver""mg_solver""mg_solver""mg_solver", 'pyramid_factor'"pyramid_factor""pyramid_factor""pyramid_factor""pyramid_factor""pyramid_factor"
MGParamValueMGParamValueMGParamValueMGParamValueMGParamValuemgparam_value (输入控制) attribute.value(-array) → HTupleMaybeSequence[Union[str, float, int]]HTupleHtuple (string / real / integer) (string / double / int / long) (HString / double / Hlong) (char* / double / Hlong)
多重网格算法的参数值。
默认值:
'fast_accurate'
"fast_accurate"
"fast_accurate"
"fast_accurate"
"fast_accurate"
"fast_accurate"
建议值:
'very_accurate'"very_accurate""very_accurate""very_accurate""very_accurate""very_accurate", 'accurate'"accurate""accurate""accurate""accurate""accurate", 'fast_accurate'"fast_accurate""fast_accurate""fast_accurate""fast_accurate""fast_accurate", 'fast'"fast""fast""fast""fast""fast", 'v'"v""v""v""v""v", 'w'"w""w""w""w""w", 'none'"none""none""none""none""none", 'gauss_seidel'"gauss_seidel""gauss_seidel""gauss_seidel""gauss_seidel""gauss_seidel", 'multigrid'"multigrid""multigrid""multigrid""multigrid""multigrid", 'full_multigrid'"full_multigrid""full_multigrid""full_multigrid""full_multigrid""full_multigrid", 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, -1, -2, -3, -4, -5
结果
如果参数值正确 binocular_distance_mgbinocular_distance_mgBinocularDistanceMgBinocularDistanceMgBinocularDistanceMgbinocular_distance_mg 返回值 2 ( H_MSG_TRUE )。当输入为空(没有可用输入图像)时,可设置行为通过算子 set_system('no_object_result',<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>)。如有必要,则抛出异常。
可能的前趋
map_imagemap_imageMapImageMapImageMapImagemap_image
可能的后继
thresholdthresholdThresholdThresholdThresholdthreshold
替代
binocular_distancebinocular_distanceBinocularDistanceBinocularDistanceBinocularDistancebinocular_distance,
binocular_distance_msbinocular_distance_msBinocularDistanceMsBinocularDistanceMsBinocularDistanceMsbinocular_distance_ms,
binocular_disparitybinocular_disparityBinocularDisparityBinocularDisparityBinocularDisparitybinocular_disparity,
binocular_disparity_mgbinocular_disparity_mgBinocularDisparityMgBinocularDisparityMgBinocularDisparityMgbinocular_disparity_mg,
binocular_disparity_msbinocular_disparity_msBinocularDisparityMsBinocularDisparityMsBinocularDisparityMsbinocular_disparity_ms
另见
map_imagemap_imageMapImageMapImageMapImagemap_image,
gen_binocular_rectification_mapgen_binocular_rectification_mapGenBinocularRectificationMapGenBinocularRectificationMapGenBinocularRectificationMapgen_binocular_rectification_map,
binocular_calibrationbinocular_calibrationBinocularCalibrationBinocularCalibrationBinocularCalibrationbinocular_calibration,
disparity_to_distancedisparity_to_distanceDisparityToDistanceDisparityToDistanceDisparityToDistancedisparity_to_distance,
distance_to_disparitydistance_to_disparityDistanceToDisparityDistanceToDisparityDistanceToDisparitydistance_to_disparity,
disparity_image_to_xyzdisparity_image_to_xyzDisparityImageToXyzDisparityImageToXyzDisparityImageToXyzdisparity_image_to_xyz
模块
三维计量