OpenCV立体图像深度图Depth Map基础

作者:uncle_ll 时间:2021-09-23 22:12:59 

目标

在本节中,将学习

  • 根据立体图像创建深度图

基础

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

OpenCV立体图像深度图Depth Map基础

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

OpenCV立体图像深度图Depth Map基础

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()

下面的图像包含原始图像(左)及其视差图(右)。如图所见,结果受到高度噪声的污染。通过

调整numDisparitiesblockSize的值,可以获得更好的结果。

OpenCV立体图像深度图Depth Map基础

当熟悉StereoBM后,可以微调一些参数以获得更好、更平滑的结果。部分参数如下所示:

texture_threshold:过滤出没有足够纹理的区域以获得可靠匹配的区域

Speckle range 和 size:基于块的匹配器通常会在对象边界附近产生“斑点”,其中匹配窗口捕获一侧的前景和在另一场景中的背景,在此场景中,匹配器还在桌子上找到的小片虚假匹配。要摆脱这些问题,可以使用speckle_sizespeckle_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

标签:OpenCV,立体图像,深度图,Depth,Map
0
投稿

猜你喜欢

  • TensorFlow实现Batch Normalization

    2023-02-03 05:20:15
  • Python实现矩阵转置的方法分析

    2023-07-03 21:56:46
  • 好用的asp防SQL注入代码

    2008-10-24 08:36:00
  • 从trim原型函数看js正则表达式的性能

    2008-12-11 13:55:00
  • jsp下页面跳转的几种方法小结

    2023-07-22 00:38:07
  • Google的产品设计指导思想

    2008-03-23 14:15:00
  • python在Windows8下获取本机ip地址的方法

    2023-07-31 17:10:44
  • JMail(4.3版本)发信asp代码

    2007-08-03 12:40:00
  • Django实现分页功能

    2023-04-04 11:00:56
  • Python 队列Queue和PriorityQueue解析

    2023-07-15 20:31:11
  • 用Python制作mini翻译器的实现示例

    2021-07-26 02:48:09
  • 如何解决MySQL的客户端不支持鉴定协议

    2008-11-27 17:10:00
  • PHP面向对象程序设计之类常量用法实例

    2023-11-22 15:17:39
  • ASP中RegExp对象正则表达式语法及相关例子

    2007-08-12 17:46:00
  • Python中利用原始套接字进行网络编程的示例

    2023-06-22 18:02:03
  • python学习print中format的用法示例

    2023-06-03 14:21:57
  • python datetime时间格式的相互转换问题

    2023-12-22 01:04:29
  • python信号量,条件变量和事件详解

    2021-10-06 18:14:23
  • 解决IE下提示“无法打开Internet站点 已终止操作”的错误

    2009-03-04 12:04:00
  • WPF自定义搜索框代码分享

    2023-07-18 23:31:04
  • asp之家 网络编程 m.aspxhome.com