您的当前位置:首页正文

测距仪

2022-05-18 来源:意榕旅游网


第二届辽宁省电子设计竞赛 技术论文(或设计方案)

项目名称:基于视觉的光影娱乐系统的设计

方案

参赛单位(公章): 指导教师:刘振宇

参赛队员:崔智 毕思曼 张安琪 提交时间:2016.1.14

第一章 作品意义及创新点

1.1作品意义

随着社会高度发展,人们的娱乐方式和益智方式发生了很大的改变。我们所做的是一个提高孩子想象力的益智产品。初步设想是通过图像识别,判定孩子放在指定区域的物体的形状及颜色,根据不同的形状颜色提供不同的情景。简之,该作品是一个娱乐性的产品。 1.2本次设计的设计创意及亮点

因为是室内娱乐项目,距离不会太远,所以我们选择激光测距,判断物体距离摄像头距离以便后期图像处理。测距方法已经成熟,我们的重点在图像处理方面。首先我们捕捉物体图像,因为图像中含有噪声,我们首先要进行灰度化和去噪处理,来判断物体颜色。然后通过扫描物体判断形状。最后,通过电脑演示出影像,使孩子得到快乐。

第二章 原理概述

主要是为了捕捉图像,然后识别图像中形状和颜色。主要有四个步骤:(1)图像灰度化处理(2)图像模糊化处理(3)计算图像边缘(4)根据图像边缘数据及颜色做物体定位。我们将进行分别介绍。 2.1 激光测距

首先,我们进行测距,把激光笔放置在照相机正下方,保持相机镜头的光轴是平行的。这种方法只能应用于短距离(<2m)使用。因为通过相似三角形进行计算,若是有小的偏差就会被放大。如图:

图2—1

激光笔的激光照射在物体表面,照射出一个激光点,在网络摄像头的焦平面上形成这个激光点的图像。在短距离内,相机的焦点不会发生大的变动,激光笔的位置固定,高度也不会改变,所以除了h都是常数,我们得到D和H的关系成反比。像素是一个计量单位,所以我们要重新定义高度h与激光点的像素到图像中心的距离成正比。我们计算相似三角形的比例系数。在此将不赘述。 2.2 灰度图处理

我们首先要将图像进行灰度处理,以便后续的图像处理的计算量可以少一些。灰度处理后的图像与彩色图形一样,反映了整幅图像和局部的色度和亮度等级分布和特征。进行灰度处理之后,图像中的每个像素只有一个值,这个值就是

像素灰度值。它决定了像素的亮暗程度。

目前,灰度图处理主要有两种方法。第一种方法是求出每一个像素的R、G、B三个分量的平均值,然后将这个平均值赋给这个像素的三个分量。这种方法直接采用GetPixel/SetPixel,GDI+中提供的GetPixel方法来读取像素的颜色,并加以计算,然后在使用SetPixel方法将计算后的值应用到像素上去。在GDI+中,颜色信息就可以使用32位来保存,红色、绿色、蓝色和透明度分别占8位,每个分量有256个取值,这样一个颜色信息就可以用一个向量(Red、Green、Blue、Alpha)来表示。应用到原像素点的值r=(像素点的红色分量+像素点的绿色分量+像素点的蓝色分量)/3。第二种方法是使用ColorMatrix类,定义在System.Drawing.Imaging,定义一个5*5数组,ColorMatrix对象配合ImageAttributes类一起使用,实际上GDI+里的颜色通过ImageAttributes对象SetColorMatrix进行的。R=0.299*像素点的红色分量+0.587*像素点的绿色分量+0.114*像素点的蓝色分量。

在这个项目中,采用第一种方法进行灰度化。采用r=(像素点的红色分量+像素点的绿色分量+像素点的蓝色分量)/3。 2.3图像模糊化处理

将图片灰度化处理之后,我们进行模糊化处理。在图像中含有噪声,所以我们要进行去噪。去噪和模糊化处理有很多种方法,我们采用基于模糊连通度的阈值分割算法。模糊,可以理解为每个像素都取周边像素的平均值。“中间值”取周围的平均值,是数据上的平滑化。我们通过激光确定了图像中心,在图像中心会反射一个白光斑以确定物体坐标,通过模糊化处理,将白光斑模糊成黑色。在实验过程中,我们要不断调整颜色滤波器位置来检验白光斑位置,然后舍弃黑色区域。修改源代码去检测移动物体的边缘。 2.4计算图形边缘

要计算图形边缘,需要获取图形的边缘点,进而根据边缘点来计算判断图形的形状等特征。要获得边缘点需要对这一片区域进行blob分析。

首先要注意的是,我们假设输入的不同颜色对象要在一个黑色背景之下。如果不是黑色的背景,那么应该把它变成黑色的使用, 可以利用颜色过滤器将不同的颜色过滤成黑色。

Blob分析是指对图像中具有相同像素的连通域进行分析,该连通区域称为Blob。Blob分析可为机器视觉应用提供图像中的斑点的数量、位置、形状和方向,还可以提供相关斑点间的拓扑结构。因为 Blob分析是一种对闭合目标形状进行分析处理的基本方法。在进行Blob分析以前,必须把图像分割为构成斑点(Blob)和局部背景的像素集合。Blob分析一般从场景的灰度图像着手进行分析。在Blob分析以前,图像中的每一像素必须被指定为目标像素或背景像素。典型的目标像素被赋值为1,背景像素被 赋值为0。当图像被分割为目标像素和背景像素后,必须进行连通性分析,以便将目标图像聚合为目标像素或斑点的连接体。信息集合数组值包含着每个检测到的blob分析和它的形状,重心,颜色标准偏差等。

在blob分析之后,计算图形的边缘点即获取边缘像素。由blob提供了三种方法来获取边缘像素,分别是

GetBlobsleftAndRightEdges、

GetBlobsTopAndBottomEdges以及GetBlobsEdgePoints。

先是以行为准进行扫描,找到最左以及最右的边缘点,再以以列为准进行扫描,找到最上以及最下的边缘点最后连通在一起。

图2—2

2.5根据图形边缘数据及颜色做物体定位

边缘特征是图像最基本的特征。边缘是图像性区域和另一个属相区域的交界区,是区域性属性发生突变的地方,是图像中不确定性最大的地方,也是图像信息最集中的地方,图像的边缘包含着丰富的信息。当把边界从目标图像中提取出来后,目标物体的信息能够更直接的展现在人们面前,对于用计算机处理目标更为有利。图像的边缘有方向和幅值两个特性。通常沿边缘的走向灰度变化平缓,垂直于边缘走向的像素灰度变化剧烈。根据灰度变化的特点,常见的边缘可分为节约型、房顶型和凸圆型。

图像的边缘检测主要分为四步:

(1) 滤波。边缘检测主要基于导数计算,但受噪声影响。滤波器在降低噪声的同时也导致边缘强度的损失。

(2) 增强。增强算法将领域中灰度有显著变化的点突出显示。一般通过计算梯度幅度值完成。

(3) 检测。在有些图像中梯度值较大的并不是边缘点。最简单的边缘检测是梯度阈值判定。

(4) 定位。精确确定边缘的位置。

计算图形边缘点之后,我们要做的就是定位输入图像中的每个单独的对象,使用Blob Counter完成。

// create instance of blob counter

BlobCounter blobCounter = new BlobCounter( ); // process input image

blobCounter.ProcessImage( bitmap ); // get information about detected objects

Blob[] blobs = blobCounter.GetObjectsInformation( );

图2—3

第三章 作品形象及功能模拟

3.1以圆检测为例。

圆检测算法的思想是,所有圆的边缘点到圆心的距离都相等,距离等于圆的半径。当然做不同的图像处理任务可能发生一定程度扭曲,所以一些边缘像素可能接近或进一步圆的中心。但这距离中心的变化不应太大了,我们认为设置一定范围。如果它太大,可能比大多数圆形以外的对象。对于一个给定的圆的边缘像素很容易找到圆心和半径为指定的点集(GetBoundingRectangle()

当我们估计圆的半径和中心,我们需要做的是通过形状的边缘像素的列表来计算其距离并估计中心点,检查与估计的差异——提供边缘点到圆心之间的距离和估计半径。

现在,当我们计算边缘点与圆心之间的平均距离来确定形状,估计是否为圆,我们只需要检查是否落入某些值范围。如果它太大,那么这意味着指定的形状并不是一个圆。理想的值应该是接近0,意味着所有指定图形为一个标准的圆。但是,正如我们已经提到的,我们可以允许一些不规整的形状。

对于存在不是标准圆形的图形,失真限制应该是依靠形状的大小来规定,所以目标图形的大小决定了失真范围的大小。相对失真限值是可配置的,所以用户可以影响可接受的失真和精密圆的识别水平。在实验中,我发现价值(3%)工作得十分好。

相对变形限制适用的方法,但有一个问题,我们可能需要解决。如果我们处理小圆圈,10 x10像素的大小,计算失真限制就等于0.3。如果一个圆有一些变形,那么它可能不被认为是圆。例如,我们可能会做一些图像处理圈x10 9或11 x10的大小、可能导致失真超出规定的范围。为了避免这种情况我们可以添加额外的参数,达到最低可接受的失真。

所有我们需要做的是比较以前计算的平均距离的最大距离。如果它是小于等于最大距离,然后是一个圆,否则这意味着形状很可能不是一个圈。

最后,这是一个小示例展示如何使用/测试这个方法和结果:

图3—1

图3—2

因篇幅问题不能全部显示,请点此查看更多更全内容