【OpenCV-Python】教程:6-4 Depth Map from Stereo Images 立体图像的深度图

2024-02-09 22:10

本文主要是介绍【OpenCV-Python】教程:6-4 Depth Map from Stereo Images 立体图像的深度图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OpenCV Python Depth Map from Stereo Images 立体图像的深度图

【目标】

  • 通过立体图像创建一个深度图

【理论】

上一节中,我们学习了一些基本概念,如对极约束和其他一些相关术语。我们还可以看到,如果我们有同一个场景的两张图像,我们可以以一种直观的方式获得深度信息。

在这里插入图片描述

上图包含等价三角形。写出它们的等价方程,得到如下结果:

d i s p a r i t y = x − x ′ = B f Z disparity=x-x'=\frac{Bf}{Z} disparity=xx=ZBf

x x x x ′ x' x为图像平面中与场景点3D对应的点与其相机中心之间的距离。 B B B是两个相机之间的距离(我们知道), f f f是相机的焦距(已经知道)。所以简而言之,上面的方程说的是,场景中一个点的深度与对应图像点与其相机中心的距离之差成反比。因此,有了这些信息,我们可以推导出图像中所有像素的深度。

所以它会在两张图像之间找到对应的匹配。我们已经看到了极线约束如何使这个操作更快更准确。一旦找到匹配,它就会发现差异。

【代码】

在这里插入图片描述

import numpy as np 
import cv2 imgL = cv2.imread("assets/tsukuba_l.png", 0)
imgR = cv2.imread("assets/tsukuba_r.png", 0)stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)
disparity = stereo.compute(imgL, imgR)
disparity = np.uint8(disparity)cv2.imshow("L", imgL)
cv2.imshow("R", imgR)
cv2.imshow("depth", disparity)
cv2.waitKey(0)
cv2.destroyAllWindows()

【接口】

  • StereoSGBM_create
cv.StereoSGBM_create(	[, minDisparity[, numDisparities[, blockSize[, P1[, P2[, disp12MaxDiff[, preFilterCap[, uniquenessRatio[, speckleWindowSize[, speckleRange[, mode]]]]]]]]]]]	) ->	retval

创建 StereoSGBM 对象

  • 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*blockSize*blockSize32*number_of_image_channels*blockSize*blockSize)。
  • disp12MaxDiff: 在左右图差异检查中允许的最大差异(整数像素单位)。将其设置为非正值以禁用检查。
  • preFilterCap: 预过滤图像像素的截断值。该算法首先计算每个像素的x导数,并按 [-preFilterCap, preFilterCap]区间剪辑其值。结果值被传递给 Birchfield-Tomasi像素代价函数。
  • uniquenessRatio: 计算出的最佳(最小)代价函数值应该“赢得”第二个最佳值以认为找到的匹配正确的百分比差额。通常,5-15之间的值就足够了。
  • speckleWindowSize: 平滑视差区域的最大大小,以考虑其噪声斑点和无效。将其设置为0以禁用散斑滤波。否则,将其设置在 50-200范围内。
  • speckleRange: 每个连接组件内的最大视差变化。如果进行散斑滤波,将参数设置为正值,它将隐式乘以 16。通常,12就足够了。
  • mode: 设置为 StereoSGBM::MODE_HH 可运行全尺寸两步动态规划算法,将会消耗 O(W*H*Disparities) 字节,对于640x480 图像来说很大,对于 HD-尺寸图像来说就是巨大的了。缺省值为false。

其他成员见

OpenCV: cv::StereoSGBM Class Reference

【参考】

  1. OpenCV: Depth Map from Stereo Images
  2. Ros stereo img processing wiki page
  3. OpenCV: cv::StereoSGBM Class Reference

这篇关于【OpenCV-Python】教程:6-4 Depth Map from Stereo Images 立体图像的深度图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/695411

相关文章

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Python虚拟环境与Conda使用指南分享

《Python虚拟环境与Conda使用指南分享》:本文主要介绍Python虚拟环境与Conda使用指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python 虚拟环境概述1.1 什么是虚拟环境1.2 为什么需要虚拟环境二、Python 内置的虚拟环境工具

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部