import cv2
import numpy as np
from matplotlib import pyplot as plt
def opencv_SGBM(left_img, right_img,use_wls=True,sgbm="param1"):
channels = 1 if left_img.ndim == 2 else 3
blockSize = 6
if sgbm == "param1":
paramL = {"minDisparity": 8,
"numDisparities": 4 * 16,
"blockSize": blockSize,
"P1": 8 * 3 * blockSize,
"P2": 32 * 3 * blockSize,
"disp12MaxDiff": 12,
"uniquenessRatio": 10,
"speckleWindowSize": 50,
"speckleRange": 32,
"preFilterCap": 63,
"mode": cv2.STEREO_SGBM_MODE_SGBM_3WAY
}
elif sgbm == "param2":
paramL = {"minDisparity": 0,
"numDisparities": 5 * 16,
"blockSize": blockSize * 3,
"P1": 8 * 3 * blockSize,
"P2": 32 * 3 * blockSize,
"disp12MaxDiff": 50,
"uniquenessRatio": 6,
"speckleWindowSize": 150,
"speckleRange": 32,
"preFilterCap": 63,
"mode": cv2.STEREO_SGBM_MODE_SGBM_3WAY
}
else:
paramL = {'minDisparity': 0,
'numDisparities': 128,
'blockSize': blockSize,
'P1': 8 * channels * blockSize ** 2,
'P2': 32 * channels * blockSize ** 2,
'disp12MaxDiff': 1,
'preFilterCap': 63,
'uniquenessRatio': 15,
'speckleWindowSize': 100,
'speckleRange': 1,
'mode': cv2.STEREO_SGBM_MODE_SGBM_3WAY
}
matcherL = cv2.StereoSGBM_create(**paramL)
# 计算视差图
dispL = matcherL.compute(left_img, right_img)
dispL = np.int16(dispL)
# WLS滤波平滑优化图像
if use_wls:
# paramR = paramL
# paramR['minDisparity'] = -paramL['numDisparities']
# matcherR = cv2.StereoSGBM_create(**paramR)
matcherR = cv2.ximgproc.createRightMatcher(matcherL)
dispR = matcherR.compute(right_img, left_img)
dispR = np.int16(dispR)
lmbda = 80000
sigma = 1.3
filter = cv2.ximgproc.createDisparityWLSFilter(matcher_left=matcherL)
filter.setLambda(lmbda)
filter.setSigmaColor(sigma)
dispL = filter.filter(dispL, left_img, None, dispR)
dispL = np.int16(dispL)
# 除以16得到真实视差(因为SGBM算法得到的视差是×16的)
dispL[dispL < 0] = 0
dispL = dispL.astype(np.float32) / 16.
cv2.imwrite("../test.pfm", dispL)
plt.imshow(dispL, 'gray')
plt.show()
if __name__ == '__main__':
left = cv2.imread("im0.png",0)
right = cv2.imread("im1.png",0)
opencv_SGBM(left,right)
没有合适的资源?快使用搜索试试~ 我知道了~
SGBM计算视差图、匹配代价python版
资源推荐
资源详情
资源评论
收起资源包目录
SGBM.zip (1个子文件)
SGBM.py 3KB
共 1 条
- 1
资源评论
C恰恰
- 粉丝: 2
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功