OpenCV立体图像深度图Depth Map基础
作者:uncle_ll 发布时间:2021-09-23 22:12:59
目标
在本节中,将学习
根据立体图像创建深度图
基础
在上一节中,看到了对极约束和其他相关术语等基本概念。如果有两个场景相同的图像,则可以通过直观的方式从中获取深度信息。下面是一张图片和一些简单的数学公式证明了这种想法。
上图包含等效三角形。编写它们的等式将产生以下结果:
xxx和x′x'x′是图像平面中与场景点3D相对应的点与其相机中心之间的距离。BBB是两个摄像机之间的距离(已知),fff是摄像机的焦距(已知)。简而言之,上述方程式表示场景中某个点的深度与相应图像点及其相机中心的距离差成反比。因此,利用此信息,可以得出图像中所有像素的深度。
因此,可以在两个图像之间先找到对应的匹配项。一旦找到匹配项,就能获得深度(disparity)。
代码
下面的代码片段显示创建视差图的简单过程。
import cv2
import numpy as np
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.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
:预过滤阶段,可标准化图像亮度并增强纹理,以准备块匹配。通常,不需要调整这些参数
附加资源
docs.opencv.org/4.x/dd/d53/…
Ros stereo img processing wiki page
StereoBM
来源:https://juejin.cn/post/7229330390232809530


猜你喜欢
- 我们有时候,看到几k的日志文件,一大堆,一个一个打开又很麻烦,少看几个,又担心遗漏,这个时候,如果有一个可以合并所有文本文件的工具就好了。下
- PHP count() 函数实例计算 car 节点的子节点个数:<?php $xml=<<<XML<cars&
- 用pandas中的DataFrame时选取行或列:import numpy as npimport pandas as pdfrom pan
- 自动等待及元素执行方法操作元素的一系列方法,只要调用了测试夹函数page,就能引出操作元素的方法:import pytestfrom pla
- 每次使用python获取查询结果的时候,都会纠结一段时间到底用fetchone和fetchall,用不好容易报错,关键在于没有搞清楚它们之间
- HTML中使背景图片自适应浏览器大小实例详解解决办法:1、图片不够大,又background属性不能拉伸图片; 2、只能用个div,把其z-
- 1. 集合 set 简介集合的最大特征是其每个元素都是唯一的,它可以删除、可以增加、也可以通过增删实现替换元素,但是它是没有下标的,你无法通
- 我们已经看到使用WHERE子句的SQL SELECT命令来从MySQL表获取数据。但是,当我们试图给的条件比较字段或列的值为NULL,它不能
- 进制转换进制之间的转换主要是利用十进制完成的。在进制转换的过程中,可以首先将相关进制转换为十进制的,再进行二次转换达到想要的效果。当然在进制
- 说明MySql社区版从5.7.11开始支持基于表的数据加密方案,模块名为keyring_file,支持加密整张表。这种是加密方式其实是基于文
- 今天在做python获取邮件时需要递归调用解析函数才可以解析邮件内容,最后想要将解析出的内容返回时发现返回的是None 可以内容却可以打印出
- 【问题原因】 这个应该是 jquery.datatable 控件本身的一个缺陷。 该控件中的checkbox小插件的id是写死的,所以当有多
- 网上的SQL优化的文章实在是很多,说实在的,我也曾经到处找这样的文章,什么不要使用IN了,什么OR了,什么AND了,很多很多,还有很多人拿出
- html<!--图片轮播 Start--><div class="pics-ul">
- 本文主要给大家介绍了关于Zabbix 2.4.5自带MySQL监控配置使用的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:一、
- 背景:使用pip install SciPy的格式安装python函数库SciPy的时候,发现老是报错,从网上找信息也没找到合适的解决办法,
- 简述从官网下载了Python3.7.4,直接编译安装后,使用pip3出现了报错信息: Can't connect to HTTPS
- 每次讲解SQL Server里的锁和阻塞(Locking & Blocking)都会碰到的问题:在SQL Server里,为什么我们
- Python生成随机验证码,需要使用PIL模块,具体内容如下安装:pip3 install pillow基本使用1. 创建图片from PI
- 前言np.argmax是用于取得数组中每一行或者每一列的的最大值。常用于机器学习中获取分类结果、计算精确度等。函数:numpy.argmax