我正在尝试使用立体相机进行场景重建,但通常只能获得稀疏点云(即,超过一半的图像没有任何适当的深度信息)。

我意识到立体处理算法依赖于图像中纹理的存在,并且具有一些可以调整以获得更好结果的参数,例如视差范围或相关窗口大小。但是,尽管我调整了这些参数,但我仍然无法获得与使用Kinect等有源传感器所获得的结果几乎遥不可及的结果。这是因为与相邻区域相对应的点云通常没有足够的重叠区域来使我获得匹配,因此严重损害了重建。

我对计算机视觉专家的提问如下:一般而言,我该怎么做才能获得更密集的点云(无需随意修改我的办公环境)?

评论

这是一个很好的问题,但我认为需要更多细节。您尝试过什么算法来计算匹配?您能否阐明“相邻区域”和“重叠”的含义。

当我说“相邻区域”时,是指物理空间中不相等但具有非空交集的部分,我称其为“重叠”。也就是说,会产生点云的区域类型可以在ICP算法中进行匹配和缝合。

关于该算法,我仍在使用可能找到的最简单的解决方案:stereo_image_proc ROS节点,该节点应用了OpenCV中可用的全局块匹配算法。我对听到可能无法通过ROS节点或已知能提供更好结果的其他算法直接访问的参数设置非常感兴趣。

#1 楼

您可以尝试跳过显着点检测,而仅在图像上密集采样(例如网格),然后在每个采样点计算特征描述符。您甚至可能甚至可以为每个像素计算一个描述符。

您可能会失去比例不变性,但是我认为这对于立体视觉不会造成太大的伤害,因为物体大约会达到两个图像中的比例相同。

另一种方法可能是结合多个显着点检测算法:拐角,边缘,斑点等。然后,您必须对所有检测到的点使用相同的特征描述符算法,但是后一部分的实现可能有些棘手。

#2 楼

因此,我过去使用的立体图像处理算法是逐像素实现的。我们只是使用针孔摄像机模型,并用卷尺进行了一些老式的测量,直到我们的深度估计与真实情况相符为止。

一对平行摄像机的方程为:


$ d = $摄像机之间的距离的一半
$ f = $摄像机的焦距(假定相同)
坐标系:

$ x,y,z = $摄像机之间的坐标框架(即摄像机基本框架)
$ u_R,v_R $从机器人的角度来看右摄像机中的摄像机坐标(u是水平的,v是垂直的)
$ u_L,v_L $左照相机中的照相机坐标
注意:照相机坐标的原点位于照相机之间的坐标系(即u轴面向相反的方向)



$ u_L = \ frac {f(xd)} {z} $,$ u_R = \ frac {f(x + d)} {z} $

$ zu_R = f(x + d)$,$ zu_L = f(xd)$

$ z(u_R-u_L)= 2df $

$ z = \ frac {2df} {u_R-u_L} $

$ y = \ frac {v_L * z + df} {f} $
$ x = \ frac {u_L * z + df} {f} $

使用这些方程式,您可以计算出密集的立体云。相机上的每个像素一个。

评论


$ \ begingroup $
感谢您的努力,但是我对立体建模很熟悉。问题通常恰好是左右摄像机中(u,v)坐标之间的对应关系。 muksie提出了一些有关如何处理该问题的想法,而sylvain.joyeux指出了一个很棒的立体声库,可以带来更好的结果,但是...
$ \ endgroup $
–georgebrindeiro
2012年11月24日4:16



#3 楼

当您说“图像的一半以上没有任何适当的深度信息”时,我们遇到的一个问题是,如果到物体的距离等于或小于您的基线(通常与非常广角的摄像机相关联),那么“标准”密集立体声算法就不能很好地工作。我们一直在使用libelas库,其开发人员告诉我们,这称为“大型基准立体声”,这是另一个问题。

评论


$ \ begingroup $
当我说一半的图像没有适当的深度信息时,我的意思是说在所有像素中,只有大约一半具有计算出的视差(不一定形成一个连续的区域)。我与您提到的距离物体/基线比率没有相同的问题,但是听到有关该库的消息非常有趣,这可能是一个问题。谢谢!
$ \ endgroup $
–georgebrindeiro
2012年11月18日下午16:01

$ \ begingroup $
不管哪种方式,由于找到了ROS包装器,因此我将尝试libelas!
$ \ endgroup $
–georgebrindeiro
2012年11月18日在16:04

#4 楼

看看KITTI立体声基准测试领导者。此基准会对算法造成不利影响,因为算法在任何给定的点都不会产生差异,因此,表现最佳的人员会产生密集的输出(即使他们在很多点上没有足够的估计依据)。某些方法具有链接的公共可用代码,您可以尝试一下。

请注意,它们不会因为花费很长时间而受到惩罚,因此,每张图像运行许多方法将花费几分钟的时间,因此可能不适合您的应用程序。尽管引入了许多基于CNN的方法,但效果很好,但仍在不到一秒钟的时间内运行(在GPU上)。这些(CRL)中至少有一个具有公共代码。

如果您仍然没有在图像上获得像样的深度估算,那么您可能只是从可见光中看到可行的极限。方法。从根本上说,该区域必须具有独特的纹理才能很好地匹配点,或者您需要在无纹理的区域进行一些强有力的假设(例如平滑度)的基础。