OpenCV46:立体图像的深度图|Depth Map
目标
在本节中,将学习
- 根据立体图像创建深度图
基础
在上一节中,看到了对极约束和其他相关术语等基本概念。如果有两个场景相同的图像,则可以通过直观的方式从中获取深度信息。下面是一张图片和一些简单的数学公式证明了这种想法。
上图包含等效三角形。编写它们的等式将产生以下结果:
disparity=x−x′=BfZdisparity = x - x' = \frac{Bf}{Z} disparity=x−x′=ZBf
xxx和x′x'x′是图像平面中与场景点3D相对应的点与其相机中心之间的距离。BBB是两个摄像机之间的距离(已知),fff是摄像机的焦距(已知)。简而言之,上述方程式表示场景中某个点的深度与相应图像点及其相机中心的距离差成反比。因此,利用此信息,可以得出图像中所有像素的深度。
因此,可以在两个图像之间先找到对应的匹配项。一旦找到匹配项,就能获得深度(disparity)。
代码
下面的代码片段显示创建视差图的简单过程。
import cv2
import numpy as np
from matplotlib import pyplot as pltimgL = 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.subplot(131)
plt.imshow(imgL, 'gray')
plt.title('imgL')
plt.xticks([])
plt.yticks([])
plt.subplot(132)
plt.imshow(imgR, 'gray')
plt.title('imgR')
plt.xticks([])
plt.yticks([])
plt.subplot(133)
plt.imshow(disparity, 'gray')
plt.title('disparity')
plt.xticks([])
plt.yticks([])plt.show()
下面的图像包含原始图像(左)及其视差图(右)。如图所见,结果受到高度噪声的污染。通过
调整numDisparities
和blockSize
的值,可以获得更好的结果。
当熟悉StereoBM后,可以微调一些参数以获得更好、更平滑的结果。部分参数如下所示:
texture_threshold
:过滤出没有足够纹理的区域以获得可靠匹配的区域Speckle range 和 size
:基于块的匹配器通常会在对象边界附近产生“斑点”,其中匹配窗口捕获一侧的前景和在另一场景中的背景,在此场景中,匹配器还在桌子上找到的小片虚假匹配。要摆脱这些问题,可以使用speckle_size
和speckle_range
参数来控制后处理的深度图像。speckle_size
是视差斑点下的像素数,speckle_range
控制必须被视为相同斑点的一部分最近距离Number of disparities
:滑动窗口的像素数。越大表明可见深度的范围就越大,但是需要更多的计算代价,最大视差值与最小视差值之差, 窗口大小必须是16的整数倍,int 型min_disparity
:从开始搜索的左像素的x位置开始的偏移量uniqueness_ratio
:另一个后过滤步骤。如果最佳匹配视差不足够好于搜索范围中的所有其他视差,则将像素滤出。如果texture_threshold
和斑点过滤仍在通过虚假匹配,则可以尝试进行调整prefilter_size和prefilter_cap
:预过滤阶段,可标准化图像亮度并增强纹理,以准备块匹配。通常,不需要调整这些参数
附加资源
https://docs.opencv.org/4.x/dd/d53/tutorial_py_depthmap.html
Ros stereo img processing wiki page
StereoBM
OpenCV46:立体图像的深度图|Depth Map相关推荐
- OpenCV中的立体图像创建深度图
OpenCV中的立体图像创建深度图 1. 效果图 2. 源码 参考 这篇博客将介绍如何从立体图像创建深度图. 1. 效果图 原图 VS 视差图效果如下: 可以看到结果受到高度噪音的污染.通过调整 nu ...
- python 立体图像_OpenCV-Python 立体图像的深度图 | 五十二
目标 在本节中, 我们将学习根据立体图像创建深度图. 基础 在上一节中,我们看到了对极约束和其他相关术语等基本概念.我们还看到,如果我们有两个场景相同的图像,则可以通过直观的方式从中获取深度信息.下面 ...
- opencv threshold_OpenCV-Python 立体图像的深度图 | 五十二
目标 在本节中, 我们将学习根据立体图像创建深度图. 基础 在上一节中,我们看到了对极约束和其他相关术语等基本概念.我们还看到,如果我们有两个场景相同的图像,则可以通过直观的方式从中获取深度信息.下面 ...
- opencv-python 立体图像的深度图
目标: 本章节你需要学习以下内容: 我们将学习如何从立体图像创建深度图. 基础 在上一节中我们学习了对极约束的基本概念和相关术语.如果同一场景有两幅图像的话我们在直觉上就可以获得图像的深度信息.下面是 ...
- OpenCV系列之立体图像的深度图 | 五十二
目标 在本节中, 我们将学习根据立体图像创建深度图. 基础 在上一节中,我们看到了对极约束和其他相关术语等基本概念.我们还看到,如果我们有两个场景相同的图像,则可以通过直观的方式从中获取深度信息.下面 ...
- OpenCV-Python 立体图像的深度图 | 五十二
目标 在本节中, 我们将学习根据立体图像创建深度图. 基础 在上一节中,我们看到了对极约束和其他相关术语等基本概念.我们还看到,如果我们有两个场景相同的图像,则可以通过直观的方式从中获取深度信息.下面 ...
- python立体图形_Python/OpenCV:从立体图像计算深度图
我有两个立体图像,我想用它来计算深度图.虽然我不知道C/C++,但我知道python--所以当我发现this tutorial时,我很乐观.Python/OpenCV:从立体图像计算深度图 不幸的是, ...
- python 怎么得到图像深度图 软件_Python/OpenCV:从立体图像计算深度图
我有两个立体图像要用来计算深度图.虽然我不幸不知道C/C++,但我知道Python--所以当我发现this tutorial时,我是乐观的. 不幸的是,教程似乎有些过时了.它不仅需要调整以运行(将&q ...
- python 深度 视差 计算_OpenCV-Python教程:49.立体图像的深度图
基础 在上一节,我们看到了极线约束和其他相关术语.我们也看到了如果我们有同一场景的两张图像,我们可以从直觉的方法从里面获得更多信息.下面是一个图像,和一些数学公式证明这个直觉 上面的图包含等面积三角形 ...
- Python+OpenCV:立体图像深度图(Depth Map from Stereo Images)
Python+OpenCV:立体图像深度图(Depth Map from Stereo Images) 理论 If we have two images of same scene, we can g ...
最新文章
- 收藏 | 图像分割深度学习从零开始学习路线
- python多项式运算_python – 用于计算“多项式系数”的numpy / scipy函数
- 自学python要下载什么软件-想自学Python,如何才能坚持下来?
- Python基础教程:类的特殊成员及高级特性
- Jenkins发布MVC应用程序
- cf769D(枚举位或运算)
- 计算机启动和linux启动
- SqlServer查询语句中用到的锁
- OC 观察者模式(通知中心,KVO)
- 全局唯一标识符 (GUID)
- php楼梯有n级台阶,楼梯问题的一些解决方法
- java jsp聊天系统_jsp 在线客服聊天源码(websocket)
- 解决out.print()爆红问题
- 系统分析员到底做什么?
- api zoom 实现自动预定_一种基于Web端API的网络地图图片自动截取拼接的方法与流程...
- 顶尖领导者的52条法则!
- 2020年十大办公室装修设计建议!
- 农产品电商app开发的主要价值与功能分析
- 亚马逊开店店铺选品技巧分析
- 阿里云 oss多文件上传
热门文章
- python中对文件、文件夹,目录的基本操作
- 混淆工具javascript-obfuscator使用简介
- Android 7.0(API 24)以上调用系统安装包问题
- 解决libxml2不支持中文的问题
- python 多继承冲突_python:super()对多继承的影响
- 相机标定-opencv
- mysql数据库错误调试_云函数写MySQL数据库,显示调用失败,但调试写库成功,问题大吗?...
- C++ unordered_map初始化
- 一键搞定JavaEE应用 JRE+Tomcat+Mysql-JaveEE绿色运行环境JTM0 9版
- 小型网站项目完整部署流程(Windows操作系统)