目标

在本节中,

我们将学习根据立体图像创建深度图。

基础

在上一节中,我们看到了对极约束和其他相关术语等基本概念。我们还看到,如果我们有两个场景相同的图像,则可以通过直观的方式从中获取深度信息。下面是一张图片和一些简单的数学公式证明了这种想法。

上图包含等效三角形。编写它们的等式将产生以下结果:

disparity=x−x′=BfZdisparity = x - x' = \frac{Bf}{Z}disparity=x−x′=ZBf​

xxx和x′x'x′是图像平面中与场景点3D相对应的点与其相机中心之间的距离。BBB是两个摄像机之间的距离(我们知道),fff是摄像机的焦距(已经知道)。简而言之,上述方程式表示场景中某个点的深度与相应图像点及其相机中心的距离差成反比。因此,利用此信息,我们可以得出图像中所有像素的深度。

因此,它在两个图像之间找到了对应的匹配项。我们已经看到了Epiline约束如何使此操作更快,更准确。一旦找到匹配项,就会发现差异。让我们看看如何使用OpenCV做到这一点。

代码

下面的代码片段显示了创建视差图的简单过程。

import numpy as np

import cv2 as cv

from matplotlib import pyplot as plt

imgL = cv.imread('tsukuba_l.png',0)

imgR = cv.imread('tsukuba_r.png',0)

stereo = cv.StereoBM_create(numDisparities=16, blockSize=15)

disparity = stereo.compute(imgL,imgR)

plt.imshow(disparity,'gray')

plt.show()

下面的图像包含原始图像(左)及其视差图(右)。如你所见,结果受到高度噪声的污染。通过调整numDisparities和blockSize的值,可以获得更好的结果。

当你熟悉StereoBM时,会有一些参数,可能需要微调参数以获得更好,更平滑的结果。参数:

texture_threshold:过滤出纹理不足以进行可靠匹配

区域斑点范围和大小:基于块的匹配器通常会在对象边界附近产生“斑点”,其中匹配窗口捕获一侧的前景和背景 在另一场景中,匹配器似乎还在桌子上投影的纹理中找到小的虚假匹配项。为了消除这些伪像,我们使用由speckle_size和speckle_range参数控制的散斑滤镜对视差图像进行后处理。speckle_size是将视差斑点排除为“斑点”的像素数。speckle_range控制必须将值差异视为同一对象的一部分的程度。

视差数量:滑动窗口的像素数。它越大,可见深度的范围就越大,但是需要更多的计算。

min_disparity:从开始搜索的左像素的x位置开始的偏移量。

uniqueness_ratio:另一个后过滤步骤。如果最佳匹配视差不足够好于搜索范围中的所有其他视差,则将像素滤出。如果texture_threshold和斑点过滤仍在通过虚假匹配,则可以尝试进行调整。

prefilter_size和prefilter_cap:预过滤阶段,可标准化图像亮度并增强纹理,以准备块匹配。通常,你不需要调整这些。

附加资源

Ros stereo img processing wiki page

练习

OpenCV样本包含生成视差图及其3D重建的示例。查看OpenCV-Python示例代码stereo_match.py​​

python 立体图像_OpenCV-Python 立体图像的深度图 | 五十二相关推荐

  1. opencv threshold_OpenCV-Python 立体图像的深度图 | 五十二

    目标 在本节中, 我们将学习根据立体图像创建深度图. 基础 在上一节中,我们看到了对极约束和其他相关术语等基本概念.我们还看到,如果我们有两个场景相同的图像,则可以通过直观的方式从中获取深度信息.下面 ...

  2. OpenCV系列之立体图像的深度图 | 五十二

    目标 在本节中, 我们将学习根据立体图像创建深度图. 基础 在上一节中,我们看到了对极约束和其他相关术语等基本概念.我们还看到,如果我们有两个场景相同的图像,则可以通过直观的方式从中获取深度信息.下面 ...

  3. OpenCV-Python 立体图像的深度图 | 五十二

    目标 在本节中, 我们将学习根据立体图像创建深度图. 基础 在上一节中,我们看到了对极约束和其他相关术语等基本概念.我们还看到,如果我们有两个场景相同的图像,则可以通过直观的方式从中获取深度信息.下面 ...

  4. python中的scipy基础知识_Python机器学习(五十二)SciPy 基础功能

    默认情况下,所有NumPy函数都可以在SciPy(命名空间)中使用.当导入SciPy时,不需要显式地导入NumPy函数.NumPy的主要对象是n次多维数组ndarray,SciPy构建在ndarray ...

  5. [Python从零到壹] 五十二.图像增强及运算篇之图像掩膜直方图和HS直方图

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  6. python绘制汉字_OpenCV Python 绘制中文字

    By 凌顺 2019年9月12日 本示例使用的OpenCV版本是:4.1.1 运行Python的编辑器:Jupyter notebook 示例目的 通过使用PLI在图片上添加中文字符. PIL(Pyt ...

  7. python 创建画板_OpenCV +Python 制作画板

    首先声明一下,本例思路不是博主原创,博主在前人的代码上进行了个性化的修改,制作了一个简单的画图工具.下面附上自己的理解,与君共勉. 效果图 画图工具实现 代码 # coding:utf-8 impor ...

  8. python血条游戏代码_零基础快速学十二课Python完整游戏代码,使用「格式符%」来处理...

    十二课Python不同数据类型的拼接方式,使用[格式符%]来处理 不过它还没有全部解决:打印出每局结果,三局两胜打印最终战果.这就是版本3.0需要做的事情. 打印战果,三局两胜. 对比2.0版本,在3 ...

  9. python无法运行图像_OpenCV Python不使用imread()打开图像

    我不完全清楚为什么会发生这种情况,但我正在制作一个程序,我有很多问题试图让opencv打开图像使用imread.我一直有错误说图像是0px宽,0px高.这对我来说没有多大意义,所以我到处找了找,也没有 ...

最新文章

  1. 360浏览器登录_360安全浏览器12下载-360安全浏览器12最新版下载
  2. 【科技金融】某平台互金产品设计流程和运营策略
  3. 【26】Python Iterator笔记
  4. kafka 串讲:架构模型、角色功能梳理
  5. 服务器禁止head 请求_编写下载服务器。 第四部分:有效地执行HEAD操作
  6. 计组学习笔记(一):浮点数的表示和运算
  7. boss上这样沟通,更容易得到面试机会
  8. .net 创建计划任务开机后自动以管理员身份启动运行 win7 ~ win10
  9. tree 先序遍历 叶子结点_编程:按先序序列输出二叉树的叶子结点
  10. python植物大战僵尸代码
  11. 1分钟教你快速使用C#查找和替换PDF文件中的文本
  12. 制作纯净的U盘启动盘(避免纯净系统安装后却内置垃圾软件)
  13. 两位共阳极数码管c语言,89c51驱动两位共阳极数码管倒计时显示程序,60秒到30秒能实现,但从30秒到90秒不能实现,请高手帮忙!...
  14. C# 工具类分享(7~14)
  15. PAMTRI:用于车辆重新识别的姿势感知多任务学习
  16. Photoshop中出现“要求96和8之间的整数。已插入最接近的数值”解决方法
  17. linux 编译安装TRMPdump(libRTMP)
  18. 【转贴】合格的高级程序员
  19. win8安装CH341SER.INF 预安装失败
  20. 李文星家属起诉BOSS直聘索赔230万;乐视网又停牌;余承东否认华为推区块链手机丨价值早报

热门文章

  1. 腾讯财报:业务换防,谁来扛起未来发展的大旗?
  2. java邻接表无向图的创建_邻接表无向图(三) 之Java详解
  3. python如何读取配置文件获取url以及hhead_python爬虫小工具:(模块:copyhreaders,直接复制头文件,无须挨个添加双引号)...
  4. mysql 类型_MySQL-约束类型
  5. Buuctf(pwn) ciscn_2019_n_5
  6. Hadoop环境搭建教学(一)运行环境,集群规划介绍;
  7. (Pwn)CTF工具 ROPgadget 的安装与使用介绍
  8. C语言strncmp()函数(把 str1 和 str2 进行比较,最多比较前 n 个字节)
  9. OpenCV Mat类详解和用法(官网原文)
  10. 【中级软考】测试用例 Test Case