1.背景补充
主动立体相机和被动立体相机的主要区别在于它们获取立体视觉信息的方式
主动立体相机12:
- 主动立体视觉是指寻找最佳的视角去重建目标或者场景1。
- 主动视觉的实现方式通常有:改变环境中的光照条件、改变相机的视角、移动相机自身位置等,其目的是提高感知结果的质量1。
- 主动立体视觉还包括没有先验的场景信息去主动识别或是跟踪,存在与环境的交互1。
- 结构光法采用主动投射已知图案的方法来实现匹配特征点,达到较高的精度,同时也扩展了适用范围2。
被动立体相机134:
- 被动视觉是指观察者不主动调整观测场景或者自身的参数1。
- 被动立体需要用到两台投影机,是因为被动立体需要同时投放出不同角度的影像,分别输入人体的左右眼球,让人看到的是立体影像4。
- 被动式立体视觉要求被测物体有纹理特征,对于一些没有纹理特征的,可以辅助一些特征,例如散斑等,人为造一些纹理特征5。
2.框架思想
VPP框架的主要思想是根据双目几何和深度传感器的测量,在左右图像上虚拟投影一个与场景一致的图案,使得对应的像素在两个图像中更加相似和区分度更高【 可以增强两幅图像中两个像素的视觉外观,使它们尽可能相似,尽可能与邻居不同 】,就像有一个虚拟的智能投影仪在场景中发射信号一样。
在左右图像上虚拟投影一个与场景一致的图案的主要目的是增强双目相机的视觉对应问题。在双目视觉中,我们需要找到左右图像中相同物体的对应像素,这是立体匹配的关键步骤。然而,由于照明、纹理、颜色等因素的影响,找到正确的对应关系可能是一个挑战。
通过在左右图像上虚拟投影一个与场景一致的图案,我们可以使对应的像素在两个图像中更加相似,从而提高立体匹配的准确性。同时,这种方法也可以增加像素的区分度,使得不同的像素在图案上有不同的表现,从而减少匹配的歧义性。
根据本文框架处理后得到的目标和参考图,下一步可以进行立体匹配的步骤如下:
- 选择一个合适的立体匹配算法或网络,例如传统的半全局匹配(Semi-Global Matching, SGM)[27],或者基于深度学习的PSMNet [8],RAFT-Stereo [41]等。
- 将虚拟投影后的目标和参考图作为输入,计算每个像素的视差(disparity),即左右图像中对应点的水平偏移量。视差与深度(depth)有反比关系,即视差越大,深度越小,表示物体离相机越近。
- 根据视差图和已知的相机参数(如焦距和基线距离),将视差转换为深度,得到稠密的深度图。深度图可以用来进行三维重建,场景理解,增强现实等应用。
本文框架的优势在于,通过虚拟投影,可以增强图像的局部区分性,减少匹配的歧义性,提高立体匹配的准确性和鲁棒性。本文框架还可以处理遮挡区域,避免在前景和背景之间投影相同的模式,从而降低误匹配的风险。本文框架不依赖于特定的物理投影器,因此可以在任何环境和距离下工作,也不会受到阳光等干扰。本文框架还可以与现有的立体匹配方法结合使用,无需对原有的算法或网络进行大幅修改或重新训练。
3.虚拟投影原理
Such a disparity value represents the offset needed to obtain the location along the same epipolar line of the corresponding point IR(x′, y) in the target image with x′ = x − d(x, y).
如何根据深度值计算两幅图像中对应点的位置。它假设了一个已经校准的立体相机,也就是说,两个相机的图像是在同一水平线上的。它用了以下的公式:
d(x,y)=b⋅f/z(x,y)
其中,
-
d(x,y) 是视差,也就是左右图像中对应点的水平距离;
-
b 是相机的基线,也就是两个相机中心的距离;
-
f 是相机的焦距;
-
z(x,y) 是左图像中点 (x,y) 的深度值。
根据这个公式,我们可以得到右图像中对应点的横坐标 x′,它等于左图像中的横坐标 x 减去视差 d(x,y),即:
x′=x−d(x,y)
这样,我们就可以在同一水平线上找到两幅图像中的对应点,从而进行立体匹配。
4.不同的虚拟图案的生成策略
为了正确地产生幻觉并简化匹配,对应的点应该尽可能相似,因此提出了两种增强策略:随机模式和基于直方图的模式
随机模式
直接从均匀分布中随机采样算子A
基于直方图的模式
如何使用直方图来选择图像中的颜色模式。首先,对于参考图像中的点 (x, y),我们在它和目标图像中的点 (x’, y) 上分别考虑一个高度为3,长度为L的窗口。然后,计算这两个窗口上的直方图,并将它们相加。
接下来,算子 A(x, x’, y) 会选择使得直方图中的距离最大的颜色。
这个距离是通过函数 hdist(i) 来计算的,它返回填充的直方图柱子中距离最小的一个。具体来说,对于直方图中的每一个颜色 i,hdist(i) 的计算公式为:
hdist(i)={min{∣i−il∣,∣i−ir∣},il∈[0,i[:H(il)>0,ir∈]i,255]:H(ir)>0
其中,il 和 ir 分别是颜色 i 左边和右边的填充柱子。
如果直方图 H 中的每一个柱子都被填充了,那么就选择出现次数最少的颜色。这样,我们就可以根据直方图来选择图像中的颜色模式了。
选择使得直方图中的距离最大的颜色原因: 是为了保证选取的颜色具有足够的区分度。在图像处理中,我们希望选取的颜色能够尽可能地反映出图像的特征。如果选择的颜色在直方图中的距离较小,那么这个颜色可能就无法有效地区分图像中的不同区域。而如果选择的颜色在直方图中的距离较大,那么这个颜色就能够更好地反映出图像的特征,从而提高图像处理的效果。
5. 处理遮挡的区域
由于立体设置中不可避免地存在遮挡区域,即使假设深度传感器与参考相机完全对齐,我们也可能无法在两个视图上一致地投影图案,如下图左边部分【点P被参考相机和深度传感器框住到那时由于鸭子的遮挡,导致目标相机并不能正确投影P】所示。
1. BKGD策略
至关重要的是检测撞击被遮挡区域的点,以避免在参考图像和目标图像上分别在被遮挡像素和遮挡像素上投影相同的图案。
深度点被分类为被遮挡是通过一个简单而有效的启发式方法来实现的。
具体来说,将(x, y)点的视差d扭曲(映射)到坐标(x’, y)处的一个类似于网格的结构W中。
如果出现碰撞 - 即,多个d映射到同一位置(x’, y) - 则保留最大的d。然后,W中的每个点(xo, yo)如果满足以下不等式,就被分类为被遮挡,至少对于一个在rx × ry补丁内的邻居W(x, y):
其中,λ, γ, rx, ry, t是超参数。最后,被遮挡的点被反向映射回来,得到一个遮挡掩码o。这就是深度点如何被分类为被遮挡的。这个过程可以帮助我们避免在参考图像和目标图像上投影相同的模式,从而减少在遮挡处的模糊性。
"BKGD"指的是处理立体成像中的遮挡的一种策略。
当一个深度点被分类为被遮挡时,系统可以避免在参考图像和目标图像上投影相同的模式,分别在被遮挡和遮挡像素上。这被称为"NO"投影策略。然而,"BKGD"投影策略涉及到在前景(在目标图像中)和背景(在参考图像中)上投影相同的模式,这可能会增加遮挡处的模糊性。在"NO"和"BKGD"策略之间的选择取决于立体成像任务的具体要求。
当深度点被分类为遮挡时,我们可以忽略在参考和目标图像上的投影(“NO”投影策略)。然而,"BKGD"投影策略涉及在前景(在目标图像中)和背景(在参考图像中)上投影相同的模式。这可能会增加遮挡处的模糊性,因为在遮挡和遮挡像素上投影了相同的模式。
如下图所示
2. FGD策略
FGD:这种策略中,我们避免在参考图像和目标图像上进行投影,而是将参考图像中的原始内容替换为目标图像中的内容。
这并不改变前景(源自Q的光线)上正确匹配的外观【对点Q的虚拟投影关系并不会变】,但会刺激立体匹配器建立与目标图像中的同一点(x’,y)的第二个对应关系,即与源自P的像素(x,y)的对应关系。
此外,参考图像的左边界上的点会在目标图像外部投影模式。尽管这对于传统的算法来说是无关紧要的,但我们仍然在那里进行投影,以避免深度立体网络的预测中出现伪影。