使用cv :: StereoBM进行差异计算的CvStereoBMState文档

时间:2014-03-25 09:31:37

标签: opencv disparity-mapping

在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,则差异仅有效。

2 个答案:

答案 0 :(得分:3)

speckleWindowSize和speckleRange是函数cv :: filterSpeckles的参数。看一下OpenCV' documentation。 cv :: filterSpeckles用于后处理视差图。它取代了相似差异的斑点(两个相邻值的差值不超过speckleRange),其大小小于或等于speckleWindowSize(形成斑点的像素数)无效差异值(短-16或浮点-1.f) )。

答案 1 :(得分:0)

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,以选择立体声参数。