Opencv 用于使用cv::StereoBM计算视差的CvStereoBMState文档

Opencv 用于使用cv::StereoBM计算视差的CvStereoBMState文档,opencv,disparity-mapping,Opencv,Disparity Mapping,OpenCV文档中没有充分说明Konolige块匹配算法的应用。CvStereoBMState的参数影响cv::StereoBM计算差异的准确性。但是,这些参数没有记录在案。我将在下面列出这些参数,并描述我的理解。也许有人可以添加一个参数的描述,这些参数还不清楚 preFilterType:确定在计算差异之前对图像应用哪个过滤器。可以是CV_STEREO_BM_XSOBEL(Sobel滤波器)或CV_STEREO_BM_归一化_响应(可能与平均强度不同?) preFilterSize:预过滤器

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

  • preFilterType:确定在计算差异之前对图像应用哪个过滤器。可以是CV_STEREO_BM_XSOBEL(Sobel滤波器)或CV_STEREO_BM_归一化_响应(可能与平均强度不同?)
  • preFilterSize:预过滤器的窗口大小(宽度=窗口高度,负值)
  • preFilterCap:将输出剪辑到[-preFilterCap,preFilterCap]。间隔之外的值会发生什么变化
  • SADNowsSize:左侧和右侧图像中比较窗口的大小,其中计算绝对差值之和以找到相应的像素
  • 心智差异:考虑到的最小差异。默认值为零,如果可能出现负差异(取决于摄影机视图之间的角度以及测量对象到摄影机的距离),则应将其设置为负值
  • NumberOfDistances:差异搜索范围[minDisparity,minDisparity+NumberOfDistances]
  • textureThreshold:仅在纹理大于(或至少等于?)此阈值的位置计算视差。纹理是如何定义的???周围窗口中的差异
  • uniquenessRatio:引用calib3d.hpp:“仅当搜索范围内的任何d!=d+/-1时,才接受计算的视差d*(d)>=SAD(d*)(1+uniquenessRatio/100)。”
  • 范围:不确定
  • trySmallerWindows:
  • roi1、roi2:仅计算这些地区的差异???不确定
  • 不确定
  • disp12MaxDiff:不确定,但calib3d.hpp中的一条评论说,执行了左右检查。猜测:从左图像到右图像以及从右图像到左图像的像素匹配。仅当原始左侧像素和背面匹配像素之间的距离小于disp12MaxDiff时,差异才有效

斑点窗口大小和斑点范围是函数cv::filterSpeckles的参数。看看OpenCV。
cv::filterSpeckles用于对视差贴图进行后期处理。它用无效的视差值(short-16或float-1.f)替换大小小于或等于斑点窗口大小(形成斑点的像素数)的相似视差的斑点(两个相邻值的差值不超过斑点范围)。

上的Python教程中更好地描述了参数。参数似乎是相同的

纹理\u阈值:过滤掉没有足够纹理的区域 用于可靠匹配

斑点范围和大小:基于块的匹配器 通常在对象边界附近产生“斑点”,其中 匹配窗口捕捉一侧的前景和背景 另一方面。在这个场景中,匹配者似乎也在 在表上的投影纹理中查找小的伪匹配。 为了消除这些伪影,我们使用 由散斑大小和散斑范围控制的散斑滤波器 参数。斑点大小是一个像素数,低于该像素数 视差斑点被称为“斑点”。斑点范围控制如何 相近的价值差异必须被视为相同的一部分 斑点

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

最小视差:与x位置的偏移 开始搜索的左侧像素的

唯一性\u比率: 另一个后期过滤步骤。如果最佳匹配视差不是 比搜索范围内的任何其他差异都要好得多, 像素被过滤掉了。如果需要,可以尝试调整此选项 纹理阈值和斑点滤波仍在进行中 假火柴

预滤器大小和预滤器盖:预滤器 相位,使图像亮度正常化并增强图像中的纹理 块匹配的准备。通常你不需要调整 这些


还可以查看选择立体参数。

“minDisparity:[…]应设置为负值,因为可能存在负差异。”>这取决于您是否在
立体矫正
中使用了标志
CV\u CALIB\u ZERO\u disparence
。如果您这样做了,那么
minDisparity
应该设置为零或正数,因为在这种情况下,差异不能为负数。至于其他变量,我不知道。@AldurDisciple,至于minDisparity参数,我在StereoRective中使用了CV_CALIB_ZERO_视差,但计算的视差最小值为负数(例如-16)。算法本身是否有解释?欢迎链接到解决方案,但是请确保你的答案在没有它的情况下是有用的:这样你的其他用户就会知道它是什么以及它为什么在那里,然后引用你链接到的页面中最相关的部分,以防目标页面不可用。