【发布时间】: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)。
-
算法本身是否有任何解释?