树莓派 机器视觉,树莓派 视觉系统开发

  树莓派 机器视觉,树莓派 视觉系统开发

  随着树莓Pi超低价计算模块的发布,依托其简单的编程环境、简单的硬件扩展和丰富的开发资源,我们有可能利用树莓Pi打造出大量的产品。

  Pi具有强大的多媒体处理能力,但由于在Pi上编程通常简单直接,要充分利用其多媒体系统并对其VideoCore模块进行编程就比较复杂。

  Argon Design精通此类系统上的编程,可以在Raspberry Pi上优化多媒体算法。为了评估计算模块的能力,展示我们的技能,我们设计了这个展览。

  这个展览是关于立体深度感知的——用两台相距一定距离的相机,从不同的视角拍摄物体,获得深度信息。同时,Raspberry Pi计算模块的另一个令人兴奋的特性是它支持双摄像头(标准的Raspberry Pi只支持单摄像头)。

  # # #立体深度感知

  —————————

  深度感知的文献中已经记载了很多好的算法。他们中的许多人使用相同的视频压缩算法,Argon Design在这方面有丰富的经验。这一切都是基于将图像划分成块,并且对于每个图像中的每个块,在一个或多个其他图片中搜索“匹配”的块。

  然而,与视频压缩相比,深度感知需要更可靠的结果。文献中也记载了许多提高输出的基本算法。因为这只是一个概念证明,我们的标准是选择那些不需要太长时间实现的改进算法。这些算法不需要大量的计算,并且可以给出相当好的改进结果。基于块的视频压缩和我们的最终算法之间最基本的区别是:

  比较两台已知间距的相机同时拍摄的两张照片。这意味着我们在测量视差,通过它可以得到相机和物体之间的距离。对于视频压缩,我们会比较同一台摄像机在不同时期拍摄的几张图片,所以这个算法是为了测量运动。

  假设摄像机都是水平对齐的。这样就把二维的搜索降到了一维,节省了大量的处理时间。这需要摄像机校准,但我们可以使用已知的方法来校准,手动或自动。

  根据以下两篇文章,使用更精确(但耗时)的方法来测量两件物品之间的相关性:

   [1].heiko Hirschller,“实时相关立体视觉的改进”,CVPR,2001年

   [2].Olivier Faugeras等人,“基于实时相关的立体声:算法、实现和应用”,INRIA 1993年

  特别是,我们决定将[2]中的C5”相关函数与[1]中提到的多窗口方案相结合。一般来说,我们的程序可以使用55窗口方案,也可以使用77窗口方案。77方案需要更长的计算时间,但会稍微精确一些。

  # # #性能

  ——————————

  使用了三种不同版本的实现:

  原版本使用Python和NumPy评估其他方案的准确性。

  使用C语言版本,并在转换中使用尽可能多的算法来增强效果。最大的改进来自于对代码的精心编排,避免了多余的计算。我们还用一个自定义的排序网络来代替一般的排序算法(多窗口方案中使用的算法),速度提高了4倍左右。

  使用VideoCore的视频处理单元(VPU)的汇编程序使用C版本的结构,但利用了VPU的架构特性(如其16路向量单元和16KB处理器本地存储器)。

  不同版本的中等尺寸(768576像素)图像的处理时间约为:

  Python,在x86上(~3GHz): 63秒

  Python,x86平台(~ 3GHz): 63秒

  C,在x86上(~3GHz): 56毫秒

  C,x86平台(~ 3 GHz):56毫秒

  C,在Pi臂内核上(700MHz): 1秒

  C,树莓Pi ARM内核(700MHz): 1秒

  视频核心VPU (250MHz)上的汇编程序:90毫秒

  装配,VideoCore视频处理单元(250 MHz):90毫秒

  请注意,VideoCore版本在x86平台上只比C版本多花50%左右的时间,而x86平台比VideoCore的时钟速度快12倍。

  我们还编写了一个演示程序,该程序将从两个相机获取图像,处理它们并以彩色显示计算出的深度数据。摄像头的处理和显示会增加少量的补偿,补偿我们把图像尺寸缩小到VGA (640480)。

  最终帧速率为12fps。概念证明就够了,同时也在一定程度上展示了图像处理的工作,我们可以用合理的开发速度在树莓Pi上实现。

  # # #应用程序

  我们创建的示例程序可以用以下三种不同的方式显示。

  仅显示摄像机的原始图像。

  将视差数据转换为彩色数据,并覆盖在图像上

  移除离摄像机一定距离的所有点。

  结果截图如下,同时附上一些使用设备的照片。

  然而,能做的不仅是这些,还有:

  将两台或多台相机的照片拼接成一幅全景图

  Argon以前做过的一个项目是使用扩展卡尔曼滤波器将摄像机的运动与场景中的对象运动分开。结合这些可以生成环境的动态3D地图。

  对象的一部分将在显示程序的背景中被切掉。这个问题可以通过组合边缘检测滤波的结果来解决。

  该算法非常适合在FPGA上执行,因为大多数计算可以并行进行。因此,上述任何内容都可以很容易地改进为1080p30或4K视频的实时处理。

  # # #使用的技能

  【软件工程】(http://www.argondesign.com/what-we-do/#软件_工程),

  [处理器架构](http://www.argondesign.com/what-we-do/#处理器架构),

  【算法与运算】(http://www.argondesign.com/what-we-do/#算法_数学),

  【图像处理】(http://www.argondesign.com/what-we-do/#图像_处理),

  [多媒体](http://www.argondesign.com/what-we-do/#多媒体)

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: