CvStereoBMState的文档,用cv::StereoBM计算视差



在OpenCV文档中没有充分解释Konolige的块匹配算法的应用。CvStereoBMState的参数影响cv::StereoBM计算差值的精度。然而,这些参数没有文档化。我将在下面列出这些参数,并描述我所理解的。也许有人可以添加一个参数的描述,这是不清楚的。

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

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

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

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

斑点范围和大小:基于块的匹配器经常产生"斑点";靠近物体的边界,其中匹配窗口捕捉一侧的前景和背景另一方面。在这个场景中,匹配器似乎也是在桌子上的投影纹理中寻找小的虚假匹配。为了消除这些伪影,我们对视差图像进行后处理由speckle_size和speckle_range控制的散斑过滤器参数。Speckle_size是a视差团被忽略为"散斑"。Speckle_range控制如何接近的价值差异必须被认为是相同的一部分blob。

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

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

uniqueness_ratio: 另一个后过滤步骤。如果最佳匹配视差不是远远好于搜索范围内的其他差异,像素被过滤掉。你可以试着调整一下Texture_threshold和散斑过滤仍然可以通过虚假的比赛。

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

还可以查看关于选择立体声参数的ROS教程。

相关内容

  • 没有找到相关文章

最新更新