11

OpenCV 文档中没有充分解释 Konolige 块匹配算法的应用。CvStereoBMState 的参数影响由 cv::StereoBM 计算的视差的准确性。但是,这些参数没有记录。我将在下面列出这些参数并描述我所理解的。也许有人可以添加参数的描述,这些都不清楚。

  • preFilterType:确定在计算视差之前对图像应用哪个过滤器。可以是 CV_STEREO_BM_XSOBEL(Sobel 滤波器)或 CV_STEREO_BM_NORMALIZED_RESPONSE(可能与平均强度不同???)
  • preFilterSize:前置过滤器的窗口大小(宽度=窗口高度,负值)
  • preFilterCap:将输出剪辑到 [-preFilterCap, preFilterCap]。区间外的值会发生什么变化?
  • SADWindowSize:左侧和右侧图像中比较窗口的大小,其中计算绝对差的总和以找到相应的像素。
  • minDisparity:考虑的最小视差。默认为零,如果可能出现负视差,则应设置为负值(取决于相机视图之间的角度和被测物体到相机的距离)。
  • numberOfDisparities:视差搜索范围 [minDisparity, minDisparity+numberOfDisparities]。
  • textureThreshold:仅在纹理大于(或至少等于?)此阈值的位置计算视差。纹理是如何定义的???周围窗口的差异???
  • uniquenessRatio:引自 calib3d.hpp:“仅当 SAD(d) >= SAD(d*) (1 + uniquenessRatio/100.) 对于搜索范围内的任何 d != d +/-1 时,才接受计算的差异 d*。 "
  • 斑点范围:不确定。
  • 尝试更小的Windows:???
  • roi1, roi2: 只计算这些区域的视差???不确定。
  • speckleWindowSize:不确定。
  • disp12MaxDiff:不确定,但 calib3d.hpp 中的注释说,执行了左右检查。猜测:像素从左图匹配到右图,从右图匹配到左图。仅当原始左侧像素和后向匹配像素之间的距离小于 disp12MaxDiff 时,差异才有效。
4

2 回答 2

3

speckleWindowSize 和 speckleRange 是函数 cv::filterSpeckles 的参数。查看 OpenCV 的文档。cv::filterSpeckles 用于对视差图进行后处理。它用无效的视差值(短 -16 或浮点 -1.f )。

于 2015-02-10T15:15:32.840 回答
0

参数在立体图像深度图的 Python 教程中有更好的描述。参数似乎是一样的。

texture_threshold:过滤掉没有足够纹理进行可靠匹配的区域

散斑范围和大小:基于块的匹配器通常会在对象边界附近产生“散斑”,其中匹配窗口在一侧捕捉前景,在另一侧捕捉背景。在这个场景中,匹配器似乎也在桌子上的投影纹理中发现了小的虚假匹配。为了消除这些伪影,我们使用由 speckle_size 和 speckle_range 参数控制的散斑滤波器对视差图像进行后处理。speckle_size 是视差斑点被视为“散斑”的像素数。speckle_range 控制值差异的接近程度必须被视为同一 blob 的一部分。

视差数:将窗口滑过多少像素。它越大,可见深度的范围越大,但需要更多的计算。

min_disparity:开始搜索的左侧像素的 x 位置的偏移量。

uniqueness_ratio: 另一个后过滤步骤。如果最佳匹配视差没有比搜索范围内的所有其他视差足够好,则过滤掉该像素。如果 texture_threshold 和散斑过滤仍然允许虚假匹配,您可以尝试调整它。

prefilter_size 和 prefilter_cap:预过滤阶段,标准化图像亮度并增强纹理,为块匹配做准备。通常你不需要调整这些。

另请查看有关选择立体声参数的ROS 教程。

于 2019-05-22T10:48:37.130 回答