如何利用开源软件开发机器人视觉系统

描述

机器人视觉应用程序可以带来一系列复杂的需求,但开源库可以为几乎所有需求提供解决方案。开发人员可以找到从基本的图像处理和对象识别再到运动规划和避免碰撞的开源软件包 。另外,还有有一些关键的开源图像处理软件包,可以帮助开发人员实现复杂的机器人系统。

在可用的开源软件包中,OpenCV可能是使用最广泛、功能最丰富的。OpenCV分发版实现了超过2500种算法,通过一系列模块处理图像处理需求,其中包括以下内容:

core,定义所有其他模块使用的基本数据结构和函数;

imgproc,提供图像处理功能,包括线性和非线性图像滤波、几何图像变换、颜色空间转换、直方图等;

video,支持运动估计,背景减法和对象跟踪算法;

calib3d,提供基本几何算法,摄像机校准,物体姿态估计等;

features2d,提供特征检测器,描述符和描述符匹配;

objdetect,提供对象和预定义类实例的检测;

OpenCV使用c++编写,支持c++、Python、Java和Matlab接口,支持Windows、Linux、Android和Mac OS。OpenCV除了支持单指令、多数据(SIMD)指令集外,还通过GPU模块为许多功能提供基于cuda的GPU加速,通过ocl模块提供OpenCL加速。最近发布的OpenCV 4.0带来了许多性能改进和功能,包括流行的Kinect融合算法的实现。

就其功能而言,OpenCV可能需要一个学习过程,这超出了希望使用机器人视觉快速移动的开发人员的耐心。对于这些开发人员,基于python的SimpleCV也可能是个不错的选择。SimpleCV构建于OpenCV之上,它提供了高级机器人视觉开发人员所需的功能,但也提供了一个可访问的框架,帮助经验较少的开发人员使用简单的Python函数调用来探索基本的机器视觉功能。例如,开发人员可以使用SimpleCV image类中的一个简单内置方法(下面清单中的img. binalize())快速实现常用的函数,比如图像阈值化,最后显示如图1所示的结果。

from SimpleCV import Image, Color, Display  # Make a function that does a half and half image. def halfsies(left,right):      result = left      # crop the right image to be just the right side.     crop   = right.crop(right.width/2.0,0,right.width/2.0,right.height)     # now paste the crop on the left image.      result = result.blit(crop,(left.width/2,0))      # return the results.      return result# Load an image from imgur.img = Image('http://i.imgur.com/lfAeZ4n.png') # binarize the image using a threshold of 90# and invert the results.output = img.binarize(90).invert()# create the side by side image.result = halfsies(img,output)# show the resulting image.result.show()# save the results to a file.result.save('juniperbinary.png')

图1.上面列出的Python代码的结果(来源:SimpleCV)

除了基本的图像处理功能外,OpenCV和SimpleCV还实现了许多高级图像处理算法,机器人系统需要处理对象或在物理环境中安全运行。在许多这些计算中使用的基本数据结构之一是点云 – 表示对象的多维数据点的集合(图2)。从相机获取,对象的点云用于基本的机器人操作,例如对象识别,对齐和拟合。对于使用点云,点云库(PCL)[源代码]实现了过滤,拟合,关键点提取,分割等算法。

图2.基本环面的点云数据集。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分