【问题标题】:Calculate actual distance using disparity map on Stereo Images使用立体图像上的视差图计算实际距离
【发布时间】:2020-03-05 17:21:02
【问题描述】:

我正在尝试使用以下代码计算物体与相机的距离。 所以方法是计算左右图像的视差,这将是矩阵格式。 一旦我得到视差,我使用公式深度 = 基线 * 焦距/视差

这里有两个问题:

  1. 为什么深度是负数?
  2. 以及如何使用深度矩阵获取物体与相机的实际距离。深度矩阵基本上给出了我不想要的每个点的距离。我想以米为单位计算物体的实际距离。

    将 numpy 导入为 np 导入系统 导入简历2 从 matplotlib 导入 pyplot 作为 plt %matplotlib 内联

    imgL = cv2.imread('C:/Users/Akash Jain/Documents/ZED/LeftDepth/left000005.png', 0) imgR = cv2.imread('C:/Users/Akash Jain/Documents/ZED/RightDepth/right000005.png', 0)

    立体声 = cv2.StereoBM_create(numDisparities=16, blockSize=5) 视差 = stereo.compute(imgL,imgR) D= 0.12*0.70*672/视差 打印(“差异”,差异) 打印(“深度”,D) plt.imshow(视差,'灰色') plt.show()

【问题讨论】:

  • 不知道为什么它不作为代码
  • 您的相机设置是否平行,图像是否经过校正?

标签: python opencv computer-vision stereo-3d disparity-mapping


【解决方案1】:

简单的Depth = Baseline * focal length/ Disparity 公式仅适用于相机轴平行的情况。假设你有很好的匹配,前束(会聚轴)相机会在图像平面的某些部分造成负视差。

但是,您发布的视差图像似乎也很低质量,这让我怀疑您的匹配也不好:考虑到您的场景,视差在中低部分如此剧烈摆动是否合理?

【讨论】:

  • @Paul,我正在使用 ZED 相机。这个公式是否适用于从 ZED 相机拍摄的图像?
  • 任何关于如何在 python 中进行立体校正的帮助,可以在我使用这个公式计算深度之前完成。
  • ZED 相机确实带有一个相当不错的 SDK github.com/stereolabs/zed-examples。如果您查看深度感应教程,您会看到一个有关如何从相机获取点云的示例。假设点云以相机为中心(很可能是),到该点的距离只是 sqrt(x^2 + y^2 + z^2)。
  • 谢谢@Paul92 我已经浏览了这个链接,并试图构建网站上提到的先决条件。收到错误。运行 build 运行 build_py 创建 build 创建 build\lib.win-amd64-3.6 创建 build\lib.win-amd64-3.6\pyzed 复制 pyzed_init_.py -> build\lib.win-amd64- 3.6\pyzed running build_ext building 'pyzed.sl' extension error: Unable to find vcvarsall.bat
  • @Akash 我不确定你在说什么先决条件,但你得到的错误主要是一个技术问题,来自 ZED 的 github/support 的人可能会提供帮助。理论上是的,您可以将预先录制的图像输入算法并获得相同的结果。但是,我认为他们的实现没有内置此功能,因此我建议您尝试连接相机并按照说明的教程进行操作,然后开始进行修改。
猜你喜欢
  • 2017-04-15
  • 1970-01-01
  • 2013-05-23
  • 2010-10-24
  • 2013-06-10
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
相关资源
最近更新 更多