binocular_disparity_msbinocular_disparity_msBinocularDisparityMsBinocularDisparityMsbinocular_disparity_ms双目视差多扫描线(算子)

名称

binocular_disparity_msbinocular_disparity_msBinocularDisparityMsBinocularDisparityMsbinocular_disparity_ms — 使用多扫描线优化计算校正后的立体图像对的视差。

签名

binocular_disparity_ms(ImageRect1, ImageRect2 : Disparity, Score : MinDisparity, MaxDisparity, SurfaceSmoothing, EdgeSmoothing, GenParamName, GenParamValue : )

Herror binocular_disparity_ms(const Hobject ImageRect1, const Hobject ImageRect2, Hobject* Disparity, Hobject* Score, const Hlong MinDisparity, const Hlong MaxDisparity, const Hlong SurfaceSmoothing, const Hlong EdgeSmoothing, const char* GenParamName, const char* GenParamValue)

Herror T_binocular_disparity_ms(const Hobject ImageRect1, const Hobject ImageRect2, Hobject* Disparity, Hobject* Score, const Htuple MinDisparity, const Htuple MaxDisparity, const Htuple SurfaceSmoothing, const Htuple EdgeSmoothing, const Htuple GenParamName, const Htuple GenParamValue)

void BinocularDisparityMs(const HObject& ImageRect1, const HObject& ImageRect2, HObject* Disparity, HObject* Score, const HTuple& MinDisparity, const HTuple& MaxDisparity, const HTuple& SurfaceSmoothing, const HTuple& EdgeSmoothing, const HTuple& GenParamName, const HTuple& GenParamValue)

HImage HImage::BinocularDisparityMs(const HImage& ImageRect2, HImage* Score, Hlong MinDisparity, Hlong MaxDisparity, Hlong SurfaceSmoothing, Hlong EdgeSmoothing, const HTuple& GenParamName, const HTuple& GenParamValue) const

HImage HImage::BinocularDisparityMs(const HImage& ImageRect2, HImage* Score, Hlong MinDisparity, Hlong MaxDisparity, Hlong SurfaceSmoothing, Hlong EdgeSmoothing, const HString& GenParamName, const HString& GenParamValue) const

HImage HImage::BinocularDisparityMs(const HImage& ImageRect2, HImage* Score, Hlong MinDisparity, Hlong MaxDisparity, Hlong SurfaceSmoothing, Hlong EdgeSmoothing, const char* GenParamName, const char* GenParamValue) const

HImage HImage::BinocularDisparityMs(const HImage& ImageRect2, HImage* Score, Hlong MinDisparity, Hlong MaxDisparity, Hlong SurfaceSmoothing, Hlong EdgeSmoothing, const wchar_t* GenParamName, const wchar_t* GenParamValue) const   ( Windows only)

static void HOperatorSet.BinocularDisparityMs(HObject imageRect1, HObject imageRect2, out HObject disparity, out HObject score, HTuple minDisparity, HTuple maxDisparity, HTuple surfaceSmoothing, HTuple edgeSmoothing, HTuple genParamName, HTuple genParamValue)

HImage HImage.BinocularDisparityMs(HImage imageRect2, out HImage score, int minDisparity, int maxDisparity, int surfaceSmoothing, int edgeSmoothing, HTuple genParamName, HTuple genParamValue)

HImage HImage.BinocularDisparityMs(HImage imageRect2, out HImage score, int minDisparity, int maxDisparity, int surfaceSmoothing, int edgeSmoothing, string genParamName, string genParamValue)

def binocular_disparity_ms(image_rect_1: HObject, image_rect_2: HObject, min_disparity: int, max_disparity: int, surface_smoothing: int, edge_smoothing: int, gen_param_name: MaybeSequence[str], gen_param_value: MaybeSequence[str]) -> Tuple[HObject, HObject]

描述

binocular_disparity_msbinocular_disparity_msBinocularDisparityMsBinocularDisparityMsBinocularDisparityMsbinocular_disparity_ms 通过多扫描线优化算法计算两幅校正后的立体图像 ImageRect1ImageRect1ImageRect1ImageRect1imageRect1image_rect_1ImageRect2ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 之间的视差。生成的视差图像将存储在 DisparityDisparityDisparityDisparitydisparitydisparity 中。与 binocular_distance_msbinocular_distance_msBinocularDistanceMsBinocularDistanceMsBinocularDistanceMsbinocular_distance_ms 不同,其结果不会转换为距离值。

对于此任务,可使用三种算子: binocular_disparitybinocular_disparityBinocularDisparityBinocularDisparityBinocularDisparitybinocular_disparitybinocular_disparity_mgbinocular_disparity_mgBinocularDisparityMgBinocularDisparityMgBinocularDisparityMgbinocular_disparity_mgbinocular_disparity_msbinocular_disparity_msBinocularDisparityMsBinocularDisparityMsBinocularDisparityMsbinocular_disparity_msbinocular_disparitybinocular_disparityBinocularDisparityBinocularDisparityBinocularDisparitybinocular_disparity 在纹理充足的区域能返回稳健结果,但在无纹理区域失效。binocular_disparity_mgbinocular_disparity_mgBinocularDisparityMgBinocularDisparityMgBinocularDisparityMgbinocular_disparity_mg 会对低纹理区域进行插值,但会模糊不连续性。binocular_disparity_msbinocular_disparity_msBinocularDisparityMsBinocularDisparityMsBinocularDisparityMsbinocular_disparity_ms 则能保留不连续性并进行部分插值。

binocular_disparity_msbinocular_disparity_msBinocularDisparityMsBinocularDisparityMsBinocularDisparityMsbinocular_disparity_ms 需要一张参考图像 ImageRect1ImageRect1ImageRect1ImageRect1imageRect1image_rect_1 和一张搜索图像 ImageRect2ImageRect2ImageRect2ImageRect2imageRect2image_rect_2,两者都必须经过校正,即对应像素必须具有相同的行坐标。如果违反此假设,可通过 calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCamerascalibrate_camerasgen_binocular_rectification_mapgen_binocular_rectification_mapGenBinocularRectificationMapGenBinocularRectificationMapGenBinocularRectificationMapgen_binocular_rectification_mapmap_imagemap_imageMapImageMapImageMapImagemap_image 算子对图像进行校正。

ImageRect1ImageRect1ImageRect1ImageRect1imageRect1image_rect_1ImageRect2ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 的宽度可以不同,但高度必须相同。给定 ImageRect1ImageRect1ImageRect1ImageRect1imageRect1image_rect_1 中的某个像素,通过在 ImageRect2ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 的对应行中搜索并基于相似度度量匹配两个像素,即可选取 ImageRect2ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 中与其同源的像素。视差值即 ImageRect1ImageRect1ImageRect1ImageRect1imageRect1image_rect_1 中每个像素需移动的像素数量,以到达 ImageRect2ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 中对应的像素。搜索空间受最小视差值 MinDisparityMinDisparityMinDisparityMinDisparityminDisparitymin_disparity 和最大视差值 MaxDisparityMaxDisparityMaxDisparityMaxDisparitymaxDisparitymax_disparity 限制。若最小和最大视差值设置为空元组,则自动采用给定图像 ImageRect1ImageRect1ImageRect1ImageRect1imageRect1image_rect_1ImageRect2ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 的最大可能范围。

binocular_disparitybinocular_disparityBinocularDisparityBinocularDisparityBinocularDisparitybinocular_disparity 类似,可采用粗到细方案来提升运行效率。通过将 GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name 设为 'method'"method""method""method""method""method"GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value 设为 'fast'"fast""fast""fast""fast""fast" 即可启用粗到细方案。默认方法为 'accurate'"accurate""accurate""accurate""accurate""accurate"。该方案所需内存显著减少,运行速度远快于 'accurate'"accurate""accurate""accurate""accurate""accurate" 方法,尤其在处理大尺寸图像或 MinDisparityMinDisparityMinDisparityMinDisparityminDisparitymin_disparityMaxDisparityMaxDisparityMaxDisparityMaxDisparitymaxDisparitymax_disparity 范围较大的场景时效果显著。该方案的另一优势在于:遍历金字塔时会自动估算 MinDisparityMinDisparityMinDisparityMinDisparityminDisparitymin_disparityMaxDisparityMaxDisparityMaxDisparityMaxDisparitymaxDisparitymax_disparity 的范围。 因此,既不需要设置 MinDisparityMinDisparityMinDisparityMinDisparityminDisparitymin_disparity,也不需要设置 MaxDisparityMaxDisparityMaxDisparityMaxDisparitymaxDisparitymax_disparity。但需注意, 'fast'"fast""fast""fast""fast""fast" 方法生成的视差图像精度低于默认的 'accurate'"accurate""accurate""accurate""accurate""accurate" 方法,尤其在视差突变处,'fast'"fast""fast""fast""fast""fast" 方法对不连续性的保留精度较低。若将 'method'"method""method""method""method""method" 设为 'very_fast'"very_fast""very_fast""very_fast""very_fast""very_fast",可进一步缩短运行时间。但该方法基于诸多假设,可能导致视差在不连续处产生平滑化。默认情况下,粗到细方案的层级数量由系统自动估算。也可通过将 GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name 设为 'num_levels'"num_levels""num_levels""num_levels""num_levels""num_levels" 并为 GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value 赋予层级数值来显式设定层级数量。

相似度度量可通过将 GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name 设为 'similarity_measure'"similarity_measure""similarity_measure""similarity_measure""similarity_measure""similarity_measure" 并为 GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value 赋予所需值来指定。无论采用默认选项 'census_dense'"census_dense""census_dense""census_dense""census_dense""census_dense" 还是 'census_sparse'"census_sparse""census_sparse""census_sparse""census_sparse""census_sparse",相似度度量均基于人口普查变换(Census transform)实现。经人口普查变换的图像中,每个像素都包含其周围支撑窗口内强度拓扑信息。 'census_dense'"census_dense""census_dense""census_dense""census_dense""census_dense" 采用9×7像素的密集窗口,而 'census_sparse'"census_sparse""census_sparse""census_sparse""census_sparse""census_sparse" 采用15×15像素的稀疏窗口,仅评估其中部分像素。'census_dense'"census_dense""census_dense""census_dense""census_dense""census_dense" 更适用于精细结构, 'census_sparse'"census_sparse""census_sparse""census_sparse""census_sparse""census_sparse" 在低纹理区域表现更稳健。

为从相似度测量中计算视差,通过多扫描线方法优化中间结果。该优化在低纹理区域增强稳健性,同时避免视差图像中出现模糊的不连续性。优化过程由 SurfaceSmoothingSurfaceSmoothingSurfaceSmoothingSurfaceSmoothingsurfaceSmoothingsurface_smoothingEdgeSmoothingEdgeSmoothingEdgeSmoothingEdgeSmoothingedgeSmoothingedge_smoothing 参数控制。 SurfaceSmoothingSurfaceSmoothingSurfaceSmoothingSurfaceSmoothingsurfaceSmoothingsurface_smoothing 控制表面内部的平滑度。高值会抑制单像素级视差差异。 EdgeSmoothingEdgeSmoothingEdgeSmoothingEdgeSmoothingedgeSmoothingedge_smoothing 控制边缘的出现频率与形态。低值允许更多边缘存在,高值则导致边缘数量减少且形态趋于圆润。两参数合理取值范围通常为 0 至 100。若两参数均设为零,则不执行优化。

生成的视差值存储于单通道图像 DisparityDisparityDisparityDisparitydisparitydisparity 中。每个视差值的质量度量存储于 ScoreScoreScoreScorescorescore 中,该值包含参考像素优化相似度测量的最佳(最低)结果。

此外,还提供了两个可选的后处理步骤。当 GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name 设置为 'consistency_check'"consistency_check""consistency_check""consistency_check""consistency_check""consistency_check"GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value 设置为 'true'"true""true""true""true""true"(默认值)时,将执行一致性检查。由于结果同时依赖于正向匹配和反向匹配,此操作可增强返回匹配结果的稳健性。若将 GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value 设为 'false'"false""false""false""false""false" 则关闭该功能。

通过将 GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name 设为 'sub_disparity'"sub_disparity""sub_disparity""sub_disparity""sub_disparity""sub_disparity"GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value 设为 'true'"true""true""true""true""true"(默认值)来执行视差的亚像素级优化。若将 GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value 设为 'false'"false""false""false""false""false" 则关闭该功能。

最后,有两个可选参数用于控制粗到细方案。若将 GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name 设为 'num_levels'"num_levels""num_levels""num_levels""num_levels""num_levels",则 GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value 的数值决定了使用的金字塔数量。将 GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value 设为 'auto'"auto""auto""auto""auto""auto" 时,金字塔数量将自动计算。这是 'num_levels'"num_levels""num_levels""num_levels""num_levels""num_levels" 的默认值,对大多数应用场景而言已足够适用。此外,将 GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name 设为 'disparity_offset'"disparity_offset""disparity_offset""disparity_offset""disparity_offset""disparity_offset" 可调整粗到细方案在不连续区域的质量。GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value 数值越高,运行时所需时间越长。默认值为 3,对多数应用而言已足够。

该算子的运行时间与图像宽度、图像高度及视差范围近似呈线性关系。因此,对于大尺寸图像,应尽可能缩小视差范围。粗到细方案(通过将 GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name 设为 'method'"method""method""method""method""method"GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value 设为 'fast'"fast""fast""fast""fast""fast"'very_fast'"very_fast""very_fast""very_fast""very_fast""very_fast" 实现)的运行时间与图像宽度和图像高度近似呈线性关系。对于小尺寸图像和窄视差范围,粗到细方案的运行时间可能超过 'accurate'"accurate""accurate""accurate""accurate""accurate" 方案。

执行信息

参数

ImageRect1ImageRect1ImageRect1ImageRect1imageRect1image_rect_1 (输入对象)  singlechannelimage objectHImageHObjectHImageHobject (byte*) *允许用于计算设备

相机 1 的校正图像。

ImageRect2ImageRect2ImageRect2ImageRect2imageRect2image_rect_2 (输入对象)  singlechannelimage objectHImageHObjectHImageHobject (byte*) *允许用于计算设备

相机 2 的校正图像。

DisparityDisparityDisparityDisparitydisparitydisparity (输出对象)  singlechannelimage objectHImageHObjectHImageHobject * (real)

视差图。

ScoreScoreScoreScorescorescore (输出对象)  singlechannelimage objectHImageHObjectHImageHobject * (real)

计算视差的分数。

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

预期视差的最小值。

默认值: -30

值范围: -32768 ≤ MinDisparity MinDisparity MinDisparity MinDisparity minDisparity min_disparity ≤ 32768

限制: MinDisparity <= MaxDisparity

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

预期视差的最大值。

默认值: 30

值范围: -32768 ≤ MaxDisparity MaxDisparity MaxDisparity MaxDisparity maxDisparity max_disparity ≤ 32768

限制: MinDisparity <= MaxDisparity

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

表面平滑处理。

默认值: 50

建议值: 20, 50, 100

限制: SurfaceSmoothing >= 0

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

边缘平滑处理。

默认值: 50

建议值: 20, 50, 100

限制: EdgeSmoothing >= 0

GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name (输入控制)  attribute.name(-array) HTupleMaybeSequence[str]HTupleHtuple (string) (string) (HString) (char*)

多扫描线算法的参数名称。

默认值: []

值列表: 'consistency_check'"consistency_check""consistency_check""consistency_check""consistency_check""consistency_check", 'disparity_offset'"disparity_offset""disparity_offset""disparity_offset""disparity_offset""disparity_offset", 'method'"method""method""method""method""method", 'num_levels'"num_levels""num_levels""num_levels""num_levels""num_levels", 'similarity_measure'"similarity_measure""similarity_measure""similarity_measure""similarity_measure""similarity_measure", 'sub_disparity'"sub_disparity""sub_disparity""sub_disparity""sub_disparity""sub_disparity"

GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value (输入控制)  attribute.value(-array) HTupleMaybeSequence[str]HTupleHtuple (string) (string) (HString) (char*)

多扫描线算法的参数值。

默认值: []

建议值: 'accurate'"accurate""accurate""accurate""accurate""accurate", 'fast'"fast""fast""fast""fast""fast", 'very_fast'"very_fast""very_fast""very_fast""very_fast""very_fast", 'census_dense'"census_dense""census_dense""census_dense""census_dense""census_dense", 'census_sparse'"census_sparse""census_sparse""census_sparse""census_sparse""census_sparse", 'true'"true""true""true""true""true", 'false'"false""false""false""false""false", 'auto'"auto""auto""auto""auto""auto"

示例(HDevelop)

read_image (BaseballL, 'stereo/epipolar/baseball_l')
read_image (BaseballR, 'stereo/epipolar/baseball_r')
binocular_disparity_ms (BaseballL, BaseballR, Disparity, Score, \
                        -40, -10, 50, 50, [], [])

结果

如果参数值正确 binocular_disparity_msbinocular_disparity_msBinocularDisparityMsBinocularDisparityMsBinocularDisparityMsbinocular_disparity_ms 返回值 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, disparity_to_distancedisparity_to_distanceDisparityToDistanceDisparityToDistanceDisparityToDistancedisparity_to_distance, disparity_image_to_xyzdisparity_image_to_xyzDisparityImageToXyzDisparityImageToXyzDisparityImageToXyzdisparity_image_to_xyz

替代

binocular_disparitybinocular_disparityBinocularDisparityBinocularDisparityBinocularDisparitybinocular_disparity, binocular_disparity_mgbinocular_disparity_mgBinocularDisparityMgBinocularDisparityMgBinocularDisparityMgbinocular_disparity_mg, binocular_distancebinocular_distanceBinocularDistanceBinocularDistanceBinocularDistancebinocular_distance, binocular_distance_mgbinocular_distance_mgBinocularDistanceMgBinocularDistanceMgBinocularDistanceMgbinocular_distance_mg, binocular_distance_msbinocular_distance_msBinocularDistanceMsBinocularDistanceMsBinocularDistanceMsbinocular_distance_ms

另见

map_imagemap_imageMapImageMapImageMapImagemap_image, gen_binocular_rectification_mapgen_binocular_rectification_mapGenBinocularRectificationMapGenBinocularRectificationMapGenBinocularRectificationMapgen_binocular_rectification_map, binocular_calibrationbinocular_calibrationBinocularCalibrationBinocularCalibrationBinocularCalibrationbinocular_calibration

模块

三维计量