opencv - 使用 cv::StereoBM 进行视差计算的 CvStereoBMState 文档

标签 opencv disparity-mapping

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

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

最佳答案

speckleWindowSize 和 speckleRange 是函数 cv::filterSpeckles 的参数。看看 OpenCV 的 documentation . cv::filterSpeckles 用于后处理视差图。它用无效视差值(short -16 或 float -1.f)替换大小小于或等于 speckleWindowSize(形成 blob 的像素数)的相似视差(两个相邻值的差不超过 speckleRange)的 Blob ).

关于opencv - 使用 cv::StereoBM 进行视差计算的 CvStereoBMState 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22630356/

相关文章:

python-3.x - np.where的不同类型的结果。x,y在两个条件下互换。我想念什么?

python - OpenCV 将所有文本处理为白底黑字(分割)

python - 'list(contour)' 的结果表示什么?

algorithm - 如何判断图片是否需要旋转

c++ - 使用 LIBELAS 和后过滤算法的视差图不正确

c++ - 为什么用Visual Studio 2017编译openCV3.2会出错?

c++ - opencv stereoRectifyUncalibrated 的问题

c# - Emgu (OpenCV for C#) - 使用 cvStereoRectify 构建视差图

c++ - 视差图后置滤波

python - 使用立体图上的视差图计算实际距离