基于机器视觉的积木分类器

[复制链接]
beijinren | 2007-5-25 04:21:00 | 显示全部楼层

基于机器视觉的积木分类器

果到现在你还认为乐高积木仅仅是玩具的话,那么你应该看看这个模型,机器视觉(Machine Vision)可以说是很复杂的系统,但在这里,我们通过ROBOLAB软件轻松实现了一个基于机器视觉的积木分类器。

基于机器视觉的积木分类器

主要部件:RCX: 1 马达:2 光感:1 乐高摄像头:1

编程语言:ROBOLAB 2.5以上

特殊部件:4*4和4*6的黄色(或白色)积木块,本系统的目的就是将这两种大小不一样的积木区分开。

日期

2002/3/13--2002/3/17 版本1.0 完成

2003/2/21 做了一些改动,增加了一个光感(安装在积木掉落区,用于检测积木是否掉落到分类传送带上面)。

未来的改进

1.硬件部分

a. 添加加工部分,例如冲压等,使这个系统不但可以分类,还可以根据不同的积木进行不同的加工。

b.包装机,将分类好的积木打包。

c. 将上面多种功能合并在一起,组成一个完整的自动加工中心。

2.软件部分

更智能化,能分拣不同形状的积木,能避免各种意外情况,例如能避免两块或多块积木同时通过摄像头。

为什么需要视觉系统?

据统计,人类获得的信息有90%以上的来自于视觉(眼睛),可见视觉对人类的重要性。做一个很简单的试验,你先站立起来,然后闭上你的眼睛,现在,将你的一只脚提起,看一看你能支持多久,一般人很快就支持不住了,这是因为没有眼睛给你定位,如此简单的一个动作,同样需要视觉,可以想象它的重要性。

在很多领域里,机器视觉同样重要,在工业领域,机器视觉可以用于产品质量检测、分类,机器人定位,包装……,在医疗领域里,机器视觉可以用于病理分析、细胞统计……,在交通运输领域里,机器视觉可以用于集装箱的管理、交通事故判别、无需停车的收费站…。下面是一个工业用的机器视觉系统的系统图:

在汽车焊接工厂里,大量使用机器人来焊接,效率大大提高,但是,如何检测机器人焊接的质量呢?我们同样可以使用机器视觉系统。我曾经参观过一个啤酒瓶瓶盖的生产现场,每一条生产线在1秒钟就能生产40个瓶盖,在这些瓶盖中,有很小一部分质量有问题,例如密封圈不全、瓶盖印字不清楚等等。想象一下,如果使用人来检验,需要多少个人?100个?10000个?幸运的是,使用机器视觉,只要一套就可以了。也许你不相信,一瓶啤酒生产出来,只要通过十套机器视觉系统——瓶子质量检测、瓶盖检测、液面检测……

在日常生活中,我们最常见的机器视觉系统就是超市中的条形码阅读机(几乎每一个超市的收钱工作都由它完成!!!)。

模型的详细资料

整个系统与工业上的机器视觉系统类似,由生产流水线、摄像头、RCX、红外发射器和计算机组成。其系统图如下:


系统原理图

由于RCX本身并没有图像采集分析能力,所以由摄像头获得的图像首先进入计算机里(通过USB接口),在计算机里,我们通过ROBOLAB的影像中心(Vision Center)的运算(在这个系统中,主要计算积木的大小),然后,影像中心将计算结果通过红外发射器发送到RCX中,最后RCX根据这个结果控制流水线的方向,将两种大小的积木分在不同的地方。整个系统的实物图如下:


系统实物图(旧版本图,新版本多了一个光感)

整个系统的软件分两部分,一部分是Vision Center中的图像分析,另一部分是RCX的程序。

首先介绍图像分析,对于使用C语言,图像分析算法的编写一般非常复杂,对大部分人来说甚至是不可能完成的任务,但是,在ROBOLAB中,很多算法(例如二值化、数学形态、块[Blob]分析)已经做好,只要你设定一些参数就可以了,非常方便,当然图像处理的基本知识还是需要的。

在ROBOLAB中,摄像头可以看作一个可以自己定义功能的传感器,不过这个传感器不可以安装在RCX上,也不能直接使用RCX来读取数值。而是先通过计算机的运算(具体的算法可以自己来定义),然后通过红外发射器发射到RCX。

将积木放在摄像头可是范围内的传送带上面,我们可以看到一张彩色的积木图像。为了区分大小不同的积木,我们首先定义一个能计算积木大小的传感器,首先对图像二值化,根据光线条件选择不同的阀值,使黄色的积木从黑色的传送带分离出来,然后输出积木占整个画面的比例,如下图:

虽然处理后的结果并不完美,画面上面还有一些干扰信号,这是因为我们没有使用专业的灯光系统(在工业上使用机器视觉系统中,灯光系统非常重要,甚至决定整个系统是否成功。),另外,我们还没有使用去干扰的图像处理算法(例如数学形态等)。不过,对于我们的系统,这种效果已经足够了。在我这个模型中,大积木占了43%左右,小积木占了33%左右,我们选取38%作为中间值,用这个值来区分大小积木就可以了。

将这个传感器保存为BrickSorter,回到Vision Center,我们将BrickSorter作为保存在红色容器中,并不断将这个值发送到RCX中,其设定如下图:


在RCX的程序中,我们只要处理计算机发来的传感器的值就可以,程序如下:

在程序中,我们认定,如果传感器的值大于10,认为有积木到达摄像头拍摄范围内,如果在一定时间内(视传送带的速度而定)如果不超过38(就是上面所得到的中间值),就认为通过的是小积木,让马达C逆时针转动;相反,如果大于38,就认为是大积木,让马达C顺时针转动。

系统运行结果如下:


大小积木分别放在两边

冰雪爱肖 | 2014-9-27 23:35:37 | 显示全部楼层
谢谢了饿~~~~~~~












有她没她毁他日久生情代替他陪着她  ||  有他没他想他人生漫漫爱着他念着他

普林艾尔  http://www.preair.cn小店出售各类空气处理设备,淘宝店铺搜索“方凌电器”就可以找到。
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则