在OpenCV里使用立体图像深度图

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/caimouse/article/details/102779495

本文将来学习怎么样从立体图像来创建深度图,在前面学习过对极几何的基本知识,从那里就可以直觉地感觉到,由两幅画像就可以找到深度信息。再来看一下对极几何:

从上图可以看出,使用中学数学里相似三角形的公式,就可以推导出下面的公式:

x是左边相机成像平面里最左边与成像点的距离,x′是在右边相机成像平面里最左边与成像点的距离,B是基线的长度,f是相机的焦距,Z是相机距离物品的深度。如下图:

简而言之,上面的公式表明,场景中一个点的深度与对应图像点与其摄像机中心的距离差成反比。通过这个关系,就可以来计算图像上所有点的深度了。因此只需要找到它们匹配点,再计算它们之间的视差,就可以计算点的深度了。下用代码来简单地创建一个深度图:

#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import numpy as np
import cv2
from matplotlib import pyplot as plt

imgL = cv2.imread('tsukuba_l.png',0)
imgR = cv2.imread('tsukuba_r.png',0)

stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)
disparity = stereo.compute(imgL,imgR)
plt.imshow(disparity,'gray')
plt.show()
#
cv2.waitKey(0)
cv2.destroyAllWindows()

结果输出如下:

cv2.StereoSGBM_create([,minDisparity [,numDisparities [,blockSize [,P1 [,P2 [,disp12MaxDiff [,preFilterCap [,uniquenessRatio [,speckleWindowSize [,speckleRange [,mode]]]]]]]]]]]])

 

扫描二维码关注公众号,回复: 7664144 查看本文章

minDisparity

最小可能的差异值。通常情况下,它是零,但有时整流算法可能会改变图像,所以这个参数需要作相应的调整。

numDisparities

最大差异减去最小差异。该值总是大于零。在当前的实现中,该参数必须可以被16整除。

BLOCKSIZE

匹配的块大小。它必须是> = 1的奇数。通常情况下,它应该在3..11的范围内。

P1

控制视差平滑度的第一个参数。见下文。

P2

第二个参数控制视差平滑度。值越大,差异越平滑。P1是相邻像素之间的视差变化加或减1的惩罚。P2是相邻像素之间的视差变化超过1的惩罚。该算法需要P2> P1。请参见stereo_match.cpp示例,其中显示了一些相当好的P1和P2值(分别为8 * number_of_image_channels * SADWindowSize * SADWindowSize和32 * number_of_image_channels * SADWindowSize * SADWindowSize)。

disp12MaxDiff

左右视差检查中允许的最大差异(以整数像素为单位)。将其设置为非正值以禁用检查。

preFilterCap

预滤波图像像素的截断值。该算法首先计算每个像素的x导数,并通过[-preFilterCap,preFilterCap]间隔剪切其值。结果值传递给Birchfield-Tomasi像素成本函数。

uniquenessRatio

最佳(最小)计算成本函数值应该“赢”第二个最佳值以考虑找到的匹配正确的百分比保证金。通常,5-15范围内的值就足够了。

speckleWindowSize

平滑视差区域的最大尺寸,以考虑其噪声斑点和无效。将其设置为0可禁用斑点过滤。否则,将其设置在50-200的范围内。

speckleRange

每个连接组件内的最大视差变化。如果你做斑点过滤,将参数设置为正值,它将被隐式乘以16.通常,1或2就足够好了。

mode

将其设置为StereoSGBM :: MODE_HH以运行全尺寸双通道动态编程算法。它将消耗O(W * H * numDisparities)字节,这对640x480立体声很大,对于HD尺寸的图片很大。默认情况下,它被设置为false。


 

猜你喜欢

转载自blog.csdn.net/caimouse/article/details/102779495