如何为立体视觉系统选择相机?


18

我正在构建用于UGV的立体视觉系统。该系统适用于将在比赛中使用的机器人,在该比赛中,该机器人可以进行遥控操作,以在大型户外场地中找到相对较小的彩色岩石。我了解如何校准此类系统并处理立体视觉系统的数据。但是,我不知道如何为此类系统选择相机。为立体视觉系统挑选相机的最佳做法是什么?

Answers:


11

从我的头顶上方出发,我将遵循以下选择标准

  • 颜色/黑白-通常,黑白效果更好,因为立体声算法始终只使用一个通道
  • 基线-这实际上取决于场景。使用基线可以控制距离的精确度。基线越宽,视差值越高,距离估计的噪声也越小。较高的基线还意味着您将减少视野之间的重叠。不过,最重要的是,基线越宽,两个视图之间的匹配就越困难。因此结果的质量下降。
  • 快门-对于移动机器人上具有计算机视觉的任何事物,请始终使用全局快门
  • 分辨率-大多数立体声算法的计算量很大。而且您可能不需要那么多3d点。在近场中,采样密度通常就足够了,远场中来自低视差的误差比采样密度更成问题。640x480在大多数情况下都可以。有些芯片的宽高比较大,这有利于重叠,但是使用芯片的子窗口也可以得到相同的效果。
  • 物镜/视野-对于移动户外机器人,我更喜欢较宽的视野而不是狭窄的物镜。或多或少是出于与决议相同的原因。确保您的物镜是刚性的,并具有固定任何运动部件的手段,例如可调节焦距。在大多数情况下,固定焦距还是可以的,因为您会受到基线选择的限制。
  • 触发器-创建自己的立体声装备时,摄像机应支持硬件触发器,理想情况下,一个应触发另一个。
  • 帧率-我认为最不重要的考虑因素。除非您具有强大的处理能力,否则您将获得的信号不会超过5 Hz。因此,您的算法更有可能是瓶颈,而不是芯片或连接。
  • 介面-大多数相机都随附Firewire / USB2 / USB3 / Ethernet。USB2无用,因为它消耗大量CPU。如果您有端口,Firewire很好,但是我认为这些天来对USB3的支持似乎正在下降。对USB3并没有太多经验。以太网非常不错,因为与USB3相比,您现在更有可能找到具有GigEthernet的嵌入式系统。
  • 外壳-尽可能坚固。重新校准是一个烦人的过程。

6

您应该首先计算每秒需要多少帧,以及在该帧速率下可以处理多少相机分辨率。如果没有别的,那将防止您超支或购买不满足您需求的相机。

除此之外,还有多种功能使选择更加困难/有趣。不同的摄像机(尤其是像Axis这样的网络摄像机)使您可以更改图像质量,或为图像流指定最大比特率。某些相机还为您提供快门速度的选择,使您可以选择恒定的曝光时间或恒定的图像平均照度。有些相机比其他相机更敏感(我上次使用此相机是在2009年,我们注意到PS3 Eye在弱光条件下的表现确实不错)。

可能最好的办法是对使用DSLR拍摄的一些静态图像运行图像处理算法,然后尝试减小帧大小和质量,以查看发生故障的地方。


6

您应该注意以下几点:

  • 全局快门基本上意味着所有像素同时被捕获,而滚动快门则以行扫描方式顺序捕获它们。由于您的UGV会四处移动并在捕获的图像上执行立体声算法,因此避免相机移动时发生像差,例如下图所示的异常(摘自Wikipedia),可能很重要:

CMOS照相手机拍摄的行驶中的汽车出现歪斜 表现出部分曝光的照片。 光照条件在照片顶部和底部的曝光之间改变。 涡轮螺旋桨推进器的镜头

  • 某些相机,尤其是火线相机AFAIK,可以实现硬件中的相机同步。当事物四处移动时,这可以极大地改善立体声效果。

  • 安装时,应确保校准后立体声对的外部参数(摄像机之间的相对姿势)的变化不太可能改变。在您的钻机中,这可能更为重要,因为UGV可能会面对户外崎uneven不平的地形,并且物体会振动。

  • 专用的立体声硬件可以直接获取视差图像作为立体声视觉系统的输出,从而减轻了嵌入式计算的负担。它也往往比在软件中运行完全相同的算法要快得多。

与往常一样,您愿意付出的越多,结果就越好。老实说,如果您能够购买像Bumblebee2这样的功能完善的立体声相机,那就是我会做的。否则,如果您的价格偏低,我将只选择Kinect:不太可能以相同的价格获得性能优于其的系统。


问题是室外系统。这有效地排除了Kinect。而且,我们发现Bumblebee随附的算法远非最佳。
2013年

我与您一起讨论Kinect的评论,但是Bumblebee随附的立体声算法不能用您自己的代码代替吗?我指出的最大优势是实际硬件,而不是捆绑的软件。
georgebrindeiro

是的,那是真的。您可以像使用两个普通相机一样使用它,它具有坚固的外壳的优点。
雅各布

不仅如此,还可以使用全球快门,良好的镜头和其他优点
georgebrindeiro

4

这是一个有趣的话题,第一次尝试并不容易。根据经验,这是最重要的事情。

  • 同步。相机必须100%同步。例如,假设UGV以适度的36Km / hr(10m / s)的速度行驶,并以每秒30帧的速度记录帧。也就是说,UGV在每帧将覆盖3m。现在,假设您的同步关闭了1ms,其中一台摄像机将关闭〜0.3m,这很糟糕[就在我的头顶]。同步问题很难发现。

  • 解决方法。在立体声环境中,我们指的是深度分辨率,或者在视差变化的情况下可以解决多少深度。在此处可以找到很好的解释:http ://pub1.willowgarage.com/~konolige/svs/disparity.htm您要查看的方程式是图像焦距和立体基线的函数。。这表示深度分辨力与基线乘以焦距成反比。那就是基线越长,越小越好。这意味着,您可以解决更多的问题。视差的最小变化δŽ˚FδŽδdδd1/2δdδZ=Z2BfδdδZBfδZδd由图像分辨率和所用算法部分控制。为了进行计算,可以安全地假设至少为。选择最好保持保守。δd1/2δd

  • 重叠。您希望摄像机之间有重叠以获取立体声。因此,您需要选择镜头焦距(视野)和基线的组合,以便为应用程序提供足够的重叠。基本上,三角函数可以在板上运行,也可以在快速的matlab / python脚本中运行。

对于UGV,立体声有两种用途。

  1. 导航和姿势估计在这种情况下,您很可能需要较大的基线+长焦距。这样可以使立体声更好地看到和分辨深度,并扩大范围。

  2. 障碍物的检测和避免您可能需要较短的基线和较宽的镜头(较小的焦距),以便您可以专注于离自己很近的事物。

某些UGV可能同时具有立体声设置,用于导航的较大基线窄视场和用于避障的另一或两个。

请务必小心购买。一些公司提供已经建立的立体声设置。在坚固性方面,这些功能很棒,它们不容易丢失校准,并且始终保持同步。问题在于市售的基准线很小。如果您想建立自己的。我猜测您最终会这样做,请确保相机可同步。Firewire非常适合此功能,同一总线上的两个摄像头开箱即用,同步精度为125微秒!USB和Gige凸轮很难同步。将所有组件放在一起时,您要确保镜头完全不会移动,并且基线是刚性的,对于应用程序来说非常刚性。

在选择镜头时也要小心。并非所有镜头都适用于所有相机。镜头也有分辨率。这是另一个主题,这是此http://www.qualitymag.com/articles/90642-qa--selecting-lenses-for-machine-vision-systems上的简短文章


4
您的同步计算是错误的。以10m / s的速度进行30 FPS时,每帧的距离为33cm(不是3m)。同样以该速度1ms也意味着1cm的距离(与FPS无关)。因此,对于这样的速度,毫秒级的同步实际上是一个超级结果!
Kozuch 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.