【问题标题】:Documentation of CvStereoBMState for disparity calculation with cv::StereoBM使用 cv::StereoBM 进行视差计算的 CvStereoBMState 文档
【发布时间】:2014-05-03 01:07:03
【问题描述】:

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 时,才接受计算的差异 d*!+/-1 在搜索范围内。”
  • speckleRange:不确定。
  • trySmallerWindows:???
  • roi1, roi2: 只计算这些区域的视差???不确定。
  • speckleWindowSize:不确定。
  • disp12MaxDiff:不确定,但 calib3d.hpp 中的注释说执行了左右检查。猜测:像素从左图匹配到右图,从右图匹配到左图。仅当原始左侧像素与后向匹配像素之间的距离小于 disp12MaxDiff 时,差异才有效。

【问题讨论】:

  • "minDisparity: [...] 应设置为负值,因为可能出现负差异。" > 这取决于您是否在stereoRectify 中使用了标志CV_CALIB_ZERO_DISPARITY。如果你这样做了,那么minDisparity 应该设置为零或正数,因为在这种情况下,差异不能是负数。至于其他变量,我不知道。
  • @AldurDisciple,至于 minDisparity 参数,我在 stereoRectify 中使用 CV_CALIB_ZERO_DISPARITY,但计算出的差异的最小值是负数(例如 -16)。
  • 算法本身是否有任何解释?

标签: opencv disparity-mapping


【解决方案1】:

depth map from stereo images 上的 Python 教程中更好地描述了这些参数。参数好像是一样的。

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

散斑范围和大小:基于块的匹配器 经常在物体边界附近产生“斑点”,其中 匹配窗口捕捉一侧的前景和背景 在另一。在这个场景中,匹配器似乎也是 在桌子上的投影纹理中找到小的虚假匹配。 为了摆脱这些伪影,我们对视差图像进行后处理 由 speckle_size 和 speckle_range 控制的散斑滤波器 参数。 speckle_size 是像素数,低于该像素数 视差斑点被视为“斑点”。 speckle_range 控制如何 价值差距接近必须被视为相同的一部分 斑点。

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

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

uniqueness_ratio: 另一个后过滤步骤。如果最佳匹配视差不是 比搜索范围内的所有其他视差都好得多, 像素被过滤掉。如果你可以尝试调整这个 texture_threshold 和散斑过滤仍在通过 虚假匹配。

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

还可以查看this ROS tutorial 选择立体声参数。

【讨论】:

【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2021-09-20
    • 1970-01-01
    相关资源
    最近更新 更多