双目立体匹配修炼之路
作者:互联网
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、双目立体匹配是什么?
思考一个问题:人的双眼是如何观察,感知现实的三维世界呢?
生活中的现象是:你不断的闭上左眼,再睁开,然后去看距离你较近的物体,你会发现这个物体的位置在变化;当你同样的方法去看距离较远的物体时,你会发现没有什么变化。
根据这个现象,我们引入了双目视觉
双目视觉:
(baidu)它是基于视差原理并利用成像设备从不同的位置获取被测物体的两幅图像,通过计算图像对应点间的位置偏差,来获取物体三维几何信息的方法。
视差:
所谓的视差,即同一空间物理点在不同图像中的映像点对应起来后,会有一个相对差别,这个差别,我们称作视差,就是上面所说的当你睁眼闭眼的时候,近处的物体位置好像在变化。
“对极约束”概念:
首先,单眼看世界,比如左眼:Oc就是摄像机镜头中心,红色坐标系理解为相机坐标系,绿色的射线就是你的一束目光,也叫射线Ray,此时镜头中的某物体成像后,处于照片X的处
接着,双眼看世界:你的目光望向同一个物体,Oc为左相机,Oc`为右相机,绿色的ray相交。左边相机成像在X处,右边相机成像在
对极几何(Epipolar Geometry)
接下来这幅图:描述的是两幅视图之间的内在射影关系,与外部场景无关,只依赖于摄像机内参数和这两幅试图之间的的相对姿态
1.基线(baseline):直线Oc-Oc’为基线。
2.对极平面束(epipolar pencil):以基线为轴的平面束。
3.对极平面(epipolar plane):任何包含基线的平面都称为对极平面。
4.对极点(epipole):摄像机的基线与每幅图像的交点。比如,上图中的点e和e’。
5.对极线(epipolar line):对极平面与图像的交线。比如,上图中的直线l和l’。
6.点共面:点x,x’,摄像机中心Oc Oc’,空间点X是5点共面的。
7.极线约束:两极线上点的对应关系
如何计算得到深度呢?
来看一个景深相机的模型:不用过多解释,A,B,D三个点在左边相机中成像位置不同,在右边相机中成像在同一个位置,理由就是这三点都在右边相机的Ray上
这时,假如要得到A距离相机连线的位置,只需知道A点在左右相机成像中的视差即可。
视差公式:D= f * b / d * ps
f=Focal length
b=Baseline
d=Disparity value
ps=Pixel size
D=Depth
二、《Bilateral Grid Learning for Stereo Matching Network》论文学习
1.文章简介
摘要
立体匹配网络的实时性对于自动驾驶、机器人导航和增强现实(AR)等许多应用都是非常重要的。虽然近年来立体匹配网络取得了很大的进展,但在实时性和准确性之间的平衡仍然是一个挑战。本文提出了一种新的基于学习双边网格切片操作的保边代价体积上采样模型。切片层是无参数的,使得我们可以在学习到的导航图的指导下,从低分辨率的成本体中高效地获得高分辨率的高质量成本体。提出的成本量上采样模块可以无缝地嵌入到许多现有的立体匹配网络中,如GCNet、PSMNet和GANET。由此产生的网络在保持相当精度的同时,加速了几倍。在此基础上,我们设计了一个实时网络(称为BGNet),它的性能优于现有的实时深度立体匹配网络,以及一些基于Kitti立体数据集的复杂网络。
从摘要中我们知道,目前双目立体匹配算法一个问题在于实时性和准确性间的一个平衡。而这篇文章的核心应该是"双边学习网格",那什么是双边学习网格呢?想知道什么是双边网格,得先了解双边滤波器
论文学习之路
该章节参考文章:
知乎:双边滤波——作者:Jargon
CSDN:双边滤波和双边网格——作者:亚古兽要进化
CSDN:双边格网(bilateral grid)——作者:flow_specter
知乎:Bilateral Grid直观理解——作者:七海
Paper2007:Real-time Edge-Aware Image Processing with the Bilateral Grid
双边滤波
为什么用双边滤波器呢?因为高斯滤波(均值滤波)去降噪,会较明显地模糊边缘,对于高频细节的保护效果并不明显。而双边滤波(Bilateral filter)是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的
对于高斯滤波,仅用空间距离的权值系数核与图像卷积后,确定中心点的灰度值。即认为离中心点越近的点,其权重系数越大。 双边滤波中加入了对灰度信息的权重,即在邻域内,灰度值越接近中心点灰度值的点的权重更大,灰度值相差大的点权重越小。此权重大小,则由值域高斯函数确定。两者权重系数相乘,得到最终的卷积模板。由于双边滤波需要每个中心点邻域的灰度信息来确定其系数,所以其速度与比一般的滤波慢很多,而且计算量增长速度为核大小的平方.
对图像进行空间域滤波的方法是使用一个结构元素(核)来对原图像进行卷积。该图所展示待滤波图像P,像素值差断崖处即为图像中的某条边缘线,经过空间核Gs,值域核Gr相乘后的双边核,最后达到了保边去噪
看看下面这两张图:
高斯滤波双边滤波
OK,上面所讲其实就是,高斯滤波(均值滤波)很好,但其权值系数仅仅考虑像素空间信息,这样在像素差异较大的图像边缘处,边缘会被模糊掉,所以双边滤波器不但考虑距离中心点像素的远近,还考虑核中心点像素值的大小差距,即考虑邻域灰度信息的权重。但是该权重显然是一个需要不断评估且变化的权重系数,因此速度很慢。那么就有了接下来的双边网格
双边网格
双边滤波速度很慢 —> 加速,双边网格。如何来理解双边网格呢?
我们用下图粗略解释如何利用Bilateral Grid对一维图片进行双边滤波的操作
双边滤波的目的是在保留图片中edge的同时,可以平滑其他非edge部分。上图中的例子是一维图片(图a),两条橙色的线表示的是图片不同位置的像素值(intensity level)。文中提出的数据结构“Bilateral Grid”,其实就是一个 对输入图片扩展了一个维度的tensor(图b),新扩展出的那个range维度,表示的就是原图中的像素值;旧的sapce维度,对应的自然就是原图中的像素位置
传统的双边滤波:
- 通过加权重(range weight)的方式,来控制在一个edge两边的像素的weight相差很大,来达到保留edge的目的
- 而除此之外,双边滤波在平滑非edge的部分上,采取的实际上是高斯模糊(Gaussian kernel)
因此传统的双边滤波,可以说是加权的高斯模糊:通过加权来保留edge
而《Real-time Edge-Aware Image Processing with the Bilateral Grid》文中作者所提出的双边网格:
- 创造了一个高维的Bilateral Grid。为什么要这么做呢?因为这样可以把原图中的edge,在空间上就分隔开(图b)
- 之后,只要直接使用Gaussian kernel,对grid进行卷积,放心地进行平滑操作(图c)。因为此时,不同edge两边的内容在空间上已经被分开了,因此edge不会被模糊
- 最后,从高维的Bilateral Grid中取回原图中各个像素的值(图d)。这一步也很好理解,对于原图中的一个位置x,假设该处的像素值为p,则前往Bilateral Grid中的(x,p)处,该处的值就是原图中像素x被滤波之后的值。
从图c中可以看到,取回的值都是已经被平滑过的值了,因此实现了平滑功能;而edge由于在空间上不相邻的缘故则没有受到影响
看看原文中作者的例子:
可以看到
- 双边网格实际是一个三维数组[横坐标x,纵坐标y,像素值z]
- 双边网格支持积极的下采样
- 通过额外的维度保留了边缘信息
Bilateral Grid为啥速度快呢?
- 双边滤波需要两个不同权值系数的核,扩维后将位置信息和像素值信息分开,不用再去套公式算range weight,bilateral grid将这一过程直接转化为了grid的创建
- grid不一定和原图相同大小,可以被下采样
- 可并行GPU计算
至此:双边滤波可以简单的理解为在空间域内考虑到色彩域的信息,综合权重进行滤波,但是直接根据双边滤波权重的公式进行计算的话,常常在速度上令人着急,因此提出了在双边网格上模拟双边滤波的想法,在三维上既能够考虑到色彩域的信息,又能够加快速度。
现在将快速双边滤波的过程简洁的描述为: splat/blur/slice, 也就是在图像上进行采样操作,投影到3D网格上,在3D上进行滤波,再内插出每个( x , y ) (x,y)(x,y)上的值,重建出滤波后的影像。
三、常用数据集
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
标签:立体匹配,Bilateral,双目,滤波,网格,像素,修炼,Grid,双边 来源: https://blog.csdn.net/weixin_46200756/article/details/120555934