OpenCV-Python立体图像的深度图

在本章节中,

  • 我们将学习到如何通过立体图像来创建深度图。

立体图像的深度图基础

在上一章节中,我们看到了一些基本概念像是线性约束和其他相关术语。我们同时也看到,如果我们有两个相同场景的图像,我们便可以直观的获取到其深度信息。下面便是一张图片和一些用以证明这种直观现象的数学公式(图片提供:(译者注:这里原文中就没写出处)

OpenCV立体图像的深度图

stereo depth image

上图包含等边三角形。写出其等效方程则如下:
$$
{\notag}
disparity = x - x' = \frac{Bf}{Z}
$$
$$x$$和$$x'$$是图像平面上的点对应的 3D 场景点与相机投影中心之间的距离。$$B$$是两个摄像机之间的距离(这是我们知道的),$$F$$是相机的焦距(早已知晓)。所以长话短说,上面的等式便是说一个场景点的深度是与相应图像点及其相机投影中心的距离差成反比的。所以通过这个信息,我们边可以推导出图像中所有像素的深度。

所以它将在两个图象之间进行匹配。我们已经看到过如何使用线性约束使这个操作更快更准确。一旦寻找到匹配点,我们便可以找到其视差。让我们看看我们如何使用 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 的值,你可以获得更好的结果。

OpenCV立体图像的深度图

disparity map image

这里有一些参数是你学习 StereoBM 时了解过的,您可能需要对参数进行微调以获得更好,更平滑的结果。

参数:

  • texture_threshold: 过滤掉没有足够纹理以进行可靠匹配的区域。
  • Speckle range and size: 基础块匹配器通常会在物体边界产生“斑点”,其中匹配窗口在一侧捕获前景而在另一侧捕获背景。在此场景中,似乎匹配器还在桌子上的投影纹理中发现了小的伪匹配。为了解决这些问题,我们使用由 speckle_size 和 speckle_range 参数控制的散斑滤波器对视差图像进行后处理。speckle_size 是像素数,低于该数量的视差斑点被视为“散斑”。speckle_range 控制值差异的接近程度,必须被视为同一个斑点的一部分。
  • Number of disparities: 窗口滑过的像素数。这个参数越大,其可见深度就越大,但也需要更多的计算量。
  • min_disparity: 从左侧 x 点向右进行搜索的偏移量。
  • uniqueness_ratio: 另一个后处理滤波。如果最佳匹配视差不足够好于搜索范围中的每个其他视差,这些像素就会被过滤掉。如果 texture_threshold 和噪点滤波仍然使错误匹配通过。
  • prefilter_size and prefilter_cap: 预处理滤波参数,用于标准化图像亮度与提升纹理用以准备块匹配。通常你不需要调整它们。

赞(1)
未经允许不得转载:极客笔记 » OpenCV-Python立体图像的深度图

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
OpenCV-Python介绍
OpenCV-Python 教程在Windows安装OpenCV-Python在Fedora上安装OpenCV-Python在Ubuntu系统中安装OpenCV—Python
OpenCV-Python GUI功能
OpenCV-Python图像入门OpenCV-Python视频入门OpenCV-Python绘图功能OpenCV-Python鼠标作为画笔OpenCV-Python作为调色板的跟踪栏
OpenCV-Python 核心操作
OpenCV-Python图像基本操作OpenCV-Python图像的算术运算OpenCV-Python性能测量和改进技术
OpenCV-Python 图像处理
OpenCV-Python改变颜色空间OpenCV-Python图像的几何变换OpenCV-Python图像阈值OpenCV-Python平滑图像OpenCV-Python形态转换OpenCV-Python图像梯度OpenCV-Python Canny边缘检测OpenCV-Python图像金字塔OpenCV-Python轮廓入门OpenCV-Python轮廓特征OpenCV-Python轮廓属性OpenCV-Python更多轮廓功能OpenCV-Python轮廓层次结构OpenCV-Python直方图-查找,绘图,分析OpenCV-Python直方图均衡OpenCV-Python 2D直方图OpenCV-Python直方图反投影OpenCV-Python图像转换OpenCV-Python模板匹配OpenCV-Python霍夫线变换OpenCV-Python霍夫圆变换OpenCV-Python基于分水岭算法的图像分割OpenCV-Python基于 GrabCut 算法的交互式前景提取
OpenCV-Python 特征检测
OpenCV-Python理解特征OpenCV-Python Harris 角点检测OpenCV-Python Shi-Tomasi 角点检测和追踪的良好特征OpenCV-Python SIFT 简介(尺度不变特征变换)OpenCV-Python SURF 简介(加速鲁棒特性)OpenCV-Python角点检测的 FAST 算法OpenCV-Python BRIEF(二进制鲁棒独立基本特征)OpenCV-Python ORB算法OpenCV-Python特征匹配OpenCV-Python特征匹配+单应性查找对象
OpenCV-Python 视频分析
OpenCV-Python Meanshift 和 CamshiftOpenCV-Python光流OpenCV-Python背景减法
OpenCV-Python 相机校准和3D重建
OpenCV-Python相机校准OpenCV-Python姿势估计OpenCV-Python线性几何OpenCV-Python立体图像的深度图
OpenCV-Python 机器学习
OpenCV-Python K-最近邻算法OpenCV-Python 使用 kNN 进行手写识别OpenCV-Python 理解 SVMOpenCV-Python 使用 SVM 进行手写数据识别OpenCV-Python 理解 K-Means 聚类OpenCV-Python 中的 K-Means 聚类
OpenCV-Python 计算摄影
OpenCV-Python 图像去噪OpenCV-Python 图像修复OpenCV-Python 高动态范围(HDR)