双目采集图片 视差图(disparity map) UV-视差(UV-disparity)

双目采集图片 视差图(disparity map) UV-视差(UV-disparity)_第1张图片

双目采集图片 视差图(disparity map) UV-视差(UV-disparity)_第2张图片
https://www.mathworks.com/help/vision/ref/disparity.html

根据相机成像原理可知透视投影是多对一的关系,无法根据成像平面上的点确定三维空间中对应的点。
双目采集图片 视差图(disparity map) UV-视差(UV-disparity)_第3张图片
为了消除这种多对一的关系,可以利用双目摄像机:
双目采集图片 视差图(disparity map) UV-视差(UV-disparity)_第4张图片
将左相机放在世界坐标系原点,两个相机参数都一致,结构图如下:
双目采集图片 视差图(disparity map) UV-视差(UV-disparity)_第5张图片
UV-disparity
在这部分中,所有的f都等于fx/dx的值。世界坐标系位于两个相机的中间,且相机pitch角度为theta。
根据成像原理,世界坐标系中的一点在左右相机成像平面上的投影点为右侧的公式。
双目采集图片 视差图(disparity map) UV-视差(UV-disparity)_第6张图片
同时,以成像平面上的principal point为原点建立一个新的坐标系UV,其实不用纠结这个坐标系,可以理解为:后面的所有公式都是基于u-u0和v-v0,相当于做了一个代换而已,从U-V视差还原到原图时,再做一次逆变换就行了。
双目采集图片 视差图(disparity map) UV-视差(UV-disparity)_第7张图片
将图像中需要检测的一些目标,抽象成一些平面来描述,见下图:
双目采集图片 视差图(disparity map) UV-视差(UV-disparity)_第8张图片
每个平面在三维坐标系中的表达式,以及在UV-disparity mapping中的表达式如下:
双目采集图片 视差图(disparity map) UV-视差(UV-disparity)_第9张图片
所以,如果我们再UV-disparity mapping中能找到一条直线,那么就可以逆向找到该条直线所对应的目标,在U-disparity mapping中能找到目标在图像中所对应的行,V-disparity mapping中能找到目标在图像中对应的列。
那么如何构建UV-disparity mapping呢?
U-disparity mapping的行数 = V-disparity mapping 的列数 = 视差最大值+1;
U-disparity mapping的列对应于原始视差图的列;
V-disparity mapping的行对应于原始视差图的行;
V-disparity mapping中(v,d) = 原始视差图中第v行,视差为d的个数。
例如V-disparity mapping的第i行,分别统计原始视差图的第一行中视差为0,1,2,3,4,5 的个数:0,2,0,1,1,1,以此类推。
U-disparity mapping中(d,u) = 原始视差图中第u列,视差为d的个数。

双目采集图片 视差图(disparity map) UV-视差(UV-disparity)_第10张图片
数据集来自KITTI。目前只是做了:左图+右图->视差图->UV-disparity mapping。后面,需要在UV-disparity mapping中进行拟合得到直线,然后逆向获取一些障碍目标的信息。
双目采集图片 视差图(disparity map) UV-视差(UV-disparity)_第11张图片
https://blog.csdn.net/chentravelling/article/details/53671279

Depth Map from Stereo Images
双目采集图片 视差图(disparity map) UV-视差(UV-disparity)_第12张图片
双目采集图片 视差图(disparity map) UV-视差(UV-disparity)_第13张图片

   import numpy as np
   import cv2
   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.imshow(disparity,'gray')
   plt.show()

双目采集图片 视差图(disparity map) UV-视差(UV-disparity)_第14张图片

depth = f*baseline/disparity

双目采集图片 视差图(disparity map) UV-视差(UV-disparity)_第15张图片

你可能感兴趣的:(VSLAM)