作用
创建StereoSGBM(semi-global block matching)对象。该对象实现了半全局匹配算法。文章来源:https://www.toymoban.com/news/detail-446988.html
原型
cv.StereoSGBM_create([, minDisparity[, numDisparities[, blockSize[, P1[, P2[, disp12MaxDiff[, preFilterCap[, uniquenessRatio[, speckleWindowSize[, speckleRange[, mode]]]]]]]]]]]) -> retval文章来源地址https://www.toymoban.com/news/detail-446988.html
参数
- minDisparity:最小可能的差异值。正常情况下,它为零,但有时校正算法会移动图像,因此需要相应地调整此参数。
- numDisparities:disparity的搜索范围,即最大差异减去最小差异。该值始终大于零。在当前的实现中,这个参数必须可以被16整除。
- blockSize:块的线性大小。大小应该是奇数(因为块位于当前像素的中心)。更大的块大小意味着更平滑,但不太准确的视差图。较小的块大小会给出更详细的视差图,但算法找到错误对应的几率更高。一般在3到11之间。
- P1:控制视差平滑度的第一个参数,是相邻像素之间视差变化为1的惩罚。值越大,视差越平滑。
- P2:控制视差平滑度的第二个参数,是相邻像素之间视差变化超过1的惩罚。值越大,视差越平滑。该算法要求P2>P1。
- disp12MaxDiff:左右视差检查中允许的最大差异(以整数像素为单位)。将其设置为非正值以禁用检查。
- preFilterCap:预滤波图像像素的截断值。该算法首先计算每个像素的x方向的导数,并按[-preFilterCap,preFilterCap]间隔剪裁其值。结果值被传递到Birchfield-Tomasi像素代价函数。
- uniquenessRatio:最佳(最小)计算成本函数值应超过第二最佳值的百分比,满足此百分比的条件下才认为找到的匹配是正确的。通常,5-15范围内的值就足够好了。
- speckleWindowSize:考虑其噪声斑点的平滑差距区域的最大尺寸,并使之无效。把它设置为0以禁用斑点过滤。否则,将它设置在50-200范围内的某个地方。
- speckleRange:每个连接组件内的最大视差变化。如果进行斑点过滤,将参数设置为正值,它将被隐式地乘以16。通常,1或2就足够了。
- mode:默认情况下,它设置为false。若将其设置为MODE_HH,将运行完整的双过程动态规划算法。
代码示例
import cv2
def estimate_depth(left_path, right_path, show=True):
# 读取左右两张图像
img_left = cv2.imread(left_path, 0)
img_right = cv2.imread(right_path, 0)
height, width = img_left.shape[:2]
# 初始化stereo block match对象
stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)
# 获取视差图
disparity = stereo.compute(img_left, img_right)
if show:
# 将视差图归一化
# min_val = disparity.min()
# max_val = disparity.max()
# disparity = np.uint8(6400 * (disparity - min_val) / (max_val - min_val))
# 显示视差图
cv2.imshow('disparity image', disparity)
cv2.imwrite('disparity.jpg', disparity)
cv2.waitKey(0)
estimate_depth('images/view1.png', 'images/view5.png')
到了这里,关于Python cv.StereoSGBM_create方法参数与用法详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!