基于OpenMV颜色快识别系统的设计与实现.docx

上传人:b****1 文档编号:15126238 上传时间:2023-07-01 格式:DOCX 页数:30 大小:951.32KB
下载 相关 举报
基于OpenMV颜色快识别系统的设计与实现.docx_第1页
第1页 / 共30页
基于OpenMV颜色快识别系统的设计与实现.docx_第2页
第2页 / 共30页
基于OpenMV颜色快识别系统的设计与实现.docx_第3页
第3页 / 共30页
基于OpenMV颜色快识别系统的设计与实现.docx_第4页
第4页 / 共30页
基于OpenMV颜色快识别系统的设计与实现.docx_第5页
第5页 / 共30页
基于OpenMV颜色快识别系统的设计与实现.docx_第6页
第6页 / 共30页
基于OpenMV颜色快识别系统的设计与实现.docx_第7页
第7页 / 共30页
基于OpenMV颜色快识别系统的设计与实现.docx_第8页
第8页 / 共30页
基于OpenMV颜色快识别系统的设计与实现.docx_第9页
第9页 / 共30页
基于OpenMV颜色快识别系统的设计与实现.docx_第10页
第10页 / 共30页
基于OpenMV颜色快识别系统的设计与实现.docx_第11页
第11页 / 共30页
基于OpenMV颜色快识别系统的设计与实现.docx_第12页
第12页 / 共30页
基于OpenMV颜色快识别系统的设计与实现.docx_第13页
第13页 / 共30页
基于OpenMV颜色快识别系统的设计与实现.docx_第14页
第14页 / 共30页
基于OpenMV颜色快识别系统的设计与实现.docx_第15页
第15页 / 共30页
基于OpenMV颜色快识别系统的设计与实现.docx_第16页
第16页 / 共30页
基于OpenMV颜色快识别系统的设计与实现.docx_第17页
第17页 / 共30页
基于OpenMV颜色快识别系统的设计与实现.docx_第18页
第18页 / 共30页
基于OpenMV颜色快识别系统的设计与实现.docx_第19页
第19页 / 共30页
基于OpenMV颜色快识别系统的设计与实现.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于OpenMV颜色快识别系统的设计与实现.docx

《基于OpenMV颜色快识别系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于OpenMV颜色快识别系统的设计与实现.docx(30页珍藏版)》请在冰点文库上搜索。

基于OpenMV颜色快识别系统的设计与实现.docx

基于OpenMV颜色快识别系统的设计与实现

`

 

本科生(设计)

论文题目

基于OpenMV的颜色块识别系统

设计与实现

学号

1428406031

姓名

凌中洋

指导教师姓名

侯嘉、陈和炯

学院名称

电子信息学院

年级/专业

14通信工程(嵌入式)

论文提交日期

2018年5月130日

 

摘要

作为机器视觉模块的重要技术之一的OpenMV(OpenMachinevision)开放视觉模块,是当下嵌入式计算机视觉领域的一个研究热点。

OpenMV视觉模块对于颜色块识别、追踪与测距系统的实现,在背景颜色与目标颜色相近程度、光照强度、颜色块与镜头的距离发生改变时,都会对测试结果产生较大的影响。

因此分析这些改变时对我所设计的OpenMV颜色块识别追踪与测距系统产生的影响是有必要的。

本文主要的工作内容是:

首先研究分析OpenMV的颜色块识别与测距系统模型的设计,然后研究了OpenMV视觉模块的基本原理和MicroPython语言的编写,接着对背景颜色与目标颜色的相近程度和颜色块与镜头距离改变时系统的误差做了比较与说明,最终完成了1)基于OpenMV的颜色块识别与追踪系统设计;2)颜色块目标测距系统的设计。

试验结果表明:

1)OpenMV颜色块识别系统进行颜色块识别时,如果背景的颜色与目标色块的颜色太过接近,则会出现多个色块识别的情况,并不能分离出背景与色块;2)当OpenMV颜色块测距系统进行测距时,如果目标颜色块距离过远则会发生测得的距离与实际距离相差较多。

关键词:

OpenMV,颜色块识别,颜色块追踪,颜色块测距

作者:

凌中洋

指导教师:

侯嘉

陈和炯

Abstract

OpenMV(OpenMachinevision),whichisoneoftheimportanttechnologiesofmachinevisionmodules,isahottopicinthefieldofembeddedcomputervision.

Therealizationofthecolorblockrecognition,trackinganddistancemeasurementsystembytheOpenMVvisionmodulewillhaveagreaterimpactonthetestresultswhenthebackgroundcolorisclosetothetargetcolor,thelightintensity,andthedistancebetweenthecolorblockandthelens.Therefore,theanalysisofthesechangesisnecessaryforthedesignofOpenMVcolorblockrecognitiontrackingandrangingsystem.

Themainworkofthispaperis:

Firstly,itanalyzesandanalyzesthedesignofOpenMV'scolorblockidentificationandrangingsystemmodel.ThenitstudiesthebasicprincipleofOpenMVvisionmoduleandthewritingofMicroPythonlanguage,andthenthesimilaritybetweenbackgroundcolorandtargetcolor.Theerrorofthesystemwhenthecolorblockandthelensdistancearechangediscomparedandillustrated.Finally,1)thedesignofthecolorblockrecognitionandtrackingsystembasedonOpenMViscompleted;2)thecolorblocktargetdistancemeasurementsystemisdesigned.

Experimentalresultsshowthat:

1)WhentheOpenMVcolorblockrecognitionsystemperformscolorblockrecognition,ifthebackgroundcoloristooclosetothecolorofthetargetcolorblock,multiplecolorblockidentificationsituationswilloccur,andthebackgroundandcolorblockscannotbeseparated.;2)WhentheOpenMVcolorblockdistancemeasurementsystemperformsdistancemeasurement,ifthetargetcolorblockistoofarapart,themeasureddistancewilldifferfromtheactualdistance.

Keywords:

OpenMV,Colorblockidentification,Colorblocktracking,

Colorblockdistancemeasurement

WrittenbyLingZhongyang

SupervisedbyHouJia

ChenHejiong

前言

在算机技术和电子技术飞速进展的现代,作为人类认知世界的最主要来源,也是人类猎取,表达和传递信息的重要手段的图像,在人们的日常生活中发挥着不可代替的重要作用。

用计算机进行图像处理的愈加频繁使数字图像处理技术迅速进展,OpenMV(OpenMachinevision,开放视觉模块)开源计算机视觉库作为当下嵌入式计算机视觉领域的重要研究技术,具有功能强大、开源、低成本的优点,是国内外爱好者的研究热点。

本文以OpenMV和MicroPython语言的基本理论为基础,做出了基于OpenMV的颜色块识别与追踪、测距系统的设计。

并在此基础上,在背景颜色与目标颜色相近程度、光照强度、颜色块与镜头的距离发生改变时,对系统的识别准确度做了一些比较。

围绕OpenMV颜色块识别、追踪与测距系统的设计与实现,本文的结构安排如下:

第一章介绍了与本课题相关的OpenMV的研究背景,国内外一些研究现状以及本文的研究内容和研究目标。

第二章阐述了基于OpenMV的颜色块识别、追踪和测距系统的基本原理,并建立系统的设计模型以及一些设计中所应用的算法。

第三章介绍了基于OpenMV的颜色块识别、追踪和测距系统的MicroPython语言的部分代码及代码功能。

第四章介绍了基于OpenMV的颜色块识别、追踪与测距系统的实现,并在一些参数发生改变时,对设计的系统的识别准确度做了一些比较。

最终总结全文,并对基于OpenMV视觉模块的各种更加深入的系统设计的前景做出了展望。

第一章绪论

1.1研究背景

在计算机技术和电子技术的飞速进展的今天,图像作为人类观察世界、了解世界的最主要手段,据统计,人类认知世界有70%-80%的信息是通过图像猎取的[1]。

随着数字图像处理技术快速进展,OpenCV(OpenSourceComputerVisionLibraray,开源计算机视觉库)成为在图像处理和计算机视觉方面的热门技术,OpenCV是由C函数以及一部分不多的C++类组成,来实现计算机视觉方面和图像处理的通用算法如3D重建、目标分割、目标识别、特征检测、运动分析、特征跟踪等的由Intel公司资助的开源视觉库[2],也是国内外爱好者使用的视觉模块便利快捷的技术。

而OpenMV作为一个集成了一部分OpenCV核心算法的单片机视觉模块,也受到了广大视觉研究爱好者的喜爱。

OpenMV是一个功能强大的机器视觉模块,它相比其他视觉模块,具有开源并且成本低的有点。

OpenMV以STM32F767CPU芯片以及OV7725摄像头芯片为核心,在硬件模块看上去很小巧情况下,通过C语言卓效地实现了机器视觉的核心算法。

OpenMV还提供Python编程接口,所以可以使用自己编写的Python语言来实现想要的OpenMV的各种不同的机器视觉功能[3]。

寻觅色块、人脸检测、眼球检测、边缘检测、目标跟踪等都是OpenMV上的机器视觉算法。

这些算法可以用来实现多种功能,包括入侵检测、跟踪标记的目标、残次品筛选、人脸识别跟踪等。

一些简洁的Python程序的编写,就可以使OpenMV完成各种的任务。

轻便灵活的设计让OpenMV可以应用在更多意想不到的地方,比如设计出具有人脸识别功能的机器人,设计出具有视觉巡线的小车,能感知周边的摄像头等[3]。

本文研究的是基于OpenMV的颜色块识别、追踪与测距系统的设计与实现。

1.2国内外现状

目前对OpenMV视觉模块的研究,国内外进展势头都很迅猛。

在国内,2010年4月王小波,刘慧英在VC++6.0的环境下,用OpenCV的编程获得了较为理想的车辆轮廓线,实现了的对车辆轮廓的检测[4]。

2011年尹俊超、刘直芳对基于OpenMV的运动目标检测和追踪方案进行了研究,最终实现了对一个场景中的多个不同目标同时检测和追踪,提取目标特性并标记出目标的运动轨迹[5]。

同年7月,秦小文、温志芳、乔维维等人在研究了OpenCV的特点及结构,并通过图像形态学和平滑处理为例介绍了OpenCV在数字图像处理上的应用[6]。

2012年,黄佳提出了基于OpenNI、OpenCV、OpenGL视觉库的检测与跟踪动态目标的检测系统[7]。

2013年12月,赵健和张东泉通过分析和优化基于OpenCV的手势识别算法,最终0~9的简洁手势识别率可以超过97%[8]。

同年12月份,雷建锋和汪伟实现了基于OpenCV的图像阈值分割[9]。

2016年,杜聪阐述了OpenCV的特点、运行环境、操作、应用领域等,强调了OpenCV在图形处理技术领域中的重要作用[10]。

2016年,郭中华,苑俊英,伍冯洁等人对基于OpenMV人脸识别进行了研究,并将人此技术应用在了智能社区的门禁系统上[11]。

同年9月份,李华琛进行了基于OpenCV的图像边缘检测技术的三种不同算子实现边缘检测算法的对比研究[12]。

同年11月份,吕昆和金晅宏进行了基于OpenMV的车牌识别的研究并提出了一种很有用的方法[13]。

国外对OpenCV以及OpenMV的研究则更加深入,YAMAMOTOKenji、SENOHTakanori、KURITATaiichiro在2010年通过OpenCV成功实现了2D和3D的转换[14]。

同年2月,JunBurden、MalcolmCleland等人进行了基于OpenCV和Python在自行车赛道上进行团队转换时跟踪单个骑车人的研究[15]。

Nvidia也在同年为OpenCV应用程序开发添加GPU加速[16]。

2012年,CoombsJoseph、Prabhu等人克服了将OpenCV移植到TI嵌入式ARM+DSP平台的挑战[17]。

KirllKornyakov在2013年研究了在IOS上使用OpenCV并公布了教学手册[18]。

2015年2月,IWayanAgusSuryawibawa等人发表了基于Android的OpenCV草药识别[19]。

2018年,LTriyono、EHPratisto等人使用OpenCV的手语翻译器应用程序[20]。

1.3本文主要研究内容

本文的主要内容是基于OpenMV的颜色块识别、追踪与测距系统的设计与实现。

课题实施主要分为:

1.资料收集以及当前研究现状分析;

2.了解OpenMV视觉模块和Python语言的基本原理;

3.颜色块识别追踪与测距算法的研究;

4系统调试与试验结果分析;

5完善课题设计。

图1-1的设计系统流程图阐述了我在设计这些系统时所采纳的算法、各个系统之间的关系以及系统所产生的一些问题。

图1-1设计系统流程图

第二章OpenMV颜色块识别系统设计的分析

2.1颜色块识别与追踪系统的分析与原理

要实现基于OpenMV的颜色块识别与追踪系统的设计,经过查阅资料,我将系统的设计归结于以下几点。

要识别颜色块,首先利用阈值进行二值化,二值图像是经过二值化后的图像亮度值只(0)黑和(255)白两种状态。

二值化在图像识别与分析中的地位是十分重要的,这种简洁的图像模式,在空间上使它对像素的关系有很好的表现力。

因为我们要识别的图像是彩色的,我所使用的是Lab(CIE(CommissionInternationalEclairage,国际照明委员会)1976(L*,a*,b*)色彩空间的非正式缩写)颜色空间,Lab颜色空间中,L重量代表Luminosity,即照明度,L的取值范围是[0,100],0表示纯黑色,100则代表纯白色;a和b则是两个不同颜色的颜色轴,a的取值范围是[-128,127],-128代表绿色,127代表红色;b的取值范围是[-128,127],-128代表蓝色,127代表黄色。

所以我们有(minL,maxL,minA,maxA,minB,maxB)这三个阈值,一共六个值。

图2-1是Lab颜色空间的示意图:

图2-1Lab颜色空间示意图[21]

然后,进行联通域检索,连通域检索运用八连通域算法,通过对图像进行的逐行逐列的扫描,按照算法一定的规章标记连通区域,来得到对象的个数,同时统计每一个区域所包含的像素个数,再用标尺转换最终就可以得到想要测得的区域面积,在阈值编辑器上使自己想要的目标显示出来,就可以识别所需要的目标颜色块。

实现颜色块的追踪所采用的是CamShift(ContinuouslyAdaptiveMeanShift,不断适应改变)算法,它是由Mean-Shift算法为基础,在Mean-Shift算法上做了改进,改进后,它能够自主调节搜索窗口的大小以此来适应目标的大小,CamShift算法可以跟踪视频中目标尺寸的改变而进行改变。

它是一种半自动追踪算法,需要手动标记出需要追踪的目标。

CamShift算法是以视频或者图像中运动目标的颜色信息当做特征作为基本思想,对拍摄的图像的每一张分别用Mean-Shift的的算法运算,而且将上一张图像搜索窗口的大小和目标的正中心作为下一步Mean-shift的搜索窗口大小和中心的起点,再一步一步迭代,最终实现OpenMV对目标颜色块的追踪。

因为CamShift算法每一步实施搜索之前就会将搜索窗的大小以及位置设置成目标色块当前的中心的大小和位置,而目标颜色块通常在这区域周边,所以CamShift算法会使搜索时间缩短;另外,当颜色块目标的运动时,颜色每一帧的改变并不会太大(除非发生重大事故),所以CamShift算法的鲁棒性十分良好。

图2-2就是CamShift追踪算法的基本流程:

图2-2CamShift跟踪算法流程

2.2颜色块测距系统的分析与原理

要实现基于OpenMV的颜色块测距系统,首先得要在2.1颜色块识别与追踪系统的基础上再做出测距的公式加入程序才能获得测距功能。

首先识别颜色块,利用阈值进行二值化,识别彩色图像,使用Lab颜色空间,在OpenMVIDE上得出(minL,maxL,minA,maxA,minB,maxB)六个值。

然后,进行联通域检索,在阈值编辑器上使自己想要的目标显示出来。

接着,用CamShift算法实现颜色块追踪,因为要得出目标颜色块的实时距离,所以得在目标改变的情况下也能测距,所以要在识别和追踪的基础上进行测距。

测距的基本模型原理图如图2-3所示:

图2-3测距原理模型

图中我们可以发觉:

(2.1)

这里

为摄像头视角的一半;

为纸板高度;

为纸板令画面满屏时距离镜头的距离;

为摄像头画面上的高度;

为假想的画面与镜头的距离。

由公式(2.1)我们可以作变换得:

(2.2)

图中我们还可以得到:

(2.3)

这里

是小球边缘与镜头的水平线夹角;

是画面中小球的半径;

是小球的实际半径;

是小球距离镜头的距离,也就是我们要测得的距离。

由公式(2.3)我们可以变换得到:

(2.4)

将公式(2.2)带入公式(2.4)可以得到:

(2.5)

由于

在一定情况下是一个定值,所以我们把

设为

,则公式(2.5)可以变形为:

(2.6)

根据公式(2.6),我们只要设置出

的值,并且在识别图像的时候让OpenMV识别出

的值,就可以比较轻松地测得OpenMV视觉模块与目标颜色块的距离。

第三章Python代码的编写

3.1MicroPython语言简介

Python是一种面向对象的解释型计算机程序设计语言,它由荷兰人GuidovanRossum于1989年发明,第一个公开发行版发行于1991年。

设计者开发时总的指导思想是,对于一个特定的问题,只要有一种最好的方法来解决就好了。

Python是纯粹的自由软件,源代码和解释器CPython遵循GPL(GNUGeneralPublicLicense)协议。

Python语法简洁清楚,特色之一是强制用空白符(whitespace)作为语句缩进。

Python具有丰富和强大的库。

它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。

常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有格外要求的部分,用更合适的语言改写。

但是在使用扩展类库时需要考虑平台问题,某些可能不能跨平台的实现。

Python在设计上坚持了清楚划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。

2017年7月20日,IEEE公布2017年编程语言排行榜:

Python高居首位。

MicroPython语言是Python中的一种精简和高效的实现编程语言,它包含了Python标准库的一个小子集,并且进行了在微控制器和受限环境中的运行上的优化。

借助MicroPython,用户可以通过编译Python脚本语言来实现硬件底层的访问和控制,比如控制LED灯泡、LCD显示器、访问SD卡、读取电压以及控制电动机等。

3.2识别与追踪系统流程图与代码编写

根据基于OpenMV的颜色块识别与追踪系统的分析和原理,设计代码实现所需要的程序流程图,如图3-1所示。

首先引入摄像头、图像和时间模块,然后设置目标颜色的Lab阈值,接着重置摄像头,调整像素格式、窗口分辨率、摄像头等待时间并关闭白平衡,再开始计时,拍摄图像,调用的snapshot()函数返回一个image对象,如果找到了目标颜色块,就迭代目标并标记出来,最终计算开始计时后到标记目标的时间,并转化为帧率即可。

图3-1识别与追踪系统流程图

 

Pyhon设置目标阈值代码的描述:

 

Target_01=(minL,maxL,minA,maxA,minB,maxB)

#设置目标色块的阈值,括号里面的六个值分别是L的最大值和最小值,a的最大值和最小值,b的最大值和最小值(minL,maxL,minA,maxA,minB,maxB),这些值在图像下面的L、a和b的三个坐标图中可以获得。

 

Pyhon设置摄像头过程代码的描述:

 

Sensor.reset()

#重置摄像头

sensor.set_pixformat(sensor.RGB565)

#设置像素格式

sensor.set_framesize(sensor.QVGA)

#选择窗口分辨率

sensor.skip_frames(10)

#设置等待时间10ms

sensor.set_auto_whitebal(False)

#关闭白平衡

clock=time.clock()

Pyhon计时函数代码的描述:

 

#计时函数

while(True):

clock.tick()

#开始计时

img=sensor.snapshot()

#拍摄一张照片,snapshot()函数返回一个image对象

blobs=img.find_blobs([Target_01],area_threshold=150)

ifblobs:

#如果找到了目标颜色

print(blobs)

forbinblobs:

#迭代找到的目标颜色区域

 

img.draw_rectangle(b[0:

4])

#用矩形标记出目标颜色区域

img.draw_cross(b[5],b[6])

#在目标颜色区域的中心画十字形标记

print(clock.fps())

#计算自tick()之后过去的时间t,并转换为帧率fps

#并在终端打印出来

3.3测距系统流程图与代码编写

根据基于OpenMV的颜色块测距系统的分析和原理以及前面所说的颜色块识别与追踪的分析和原理,设计出代码实现所需要的程序流程图,如图3-2所示。

前面的引入模块和对摄像头的调整都与3.2的识别与追踪系统一样,开始计时后,我们需要用(2.6)所得的距离公式来让OpenMV测出距离,首先设置K的值,并用识别与追踪系统识别并计算出目标半径,再带入公式(2.6),即可测出目标与摄像头的距离

图3-2测距系统流程图

 

Pyhon计时函数代码的描述:

 

clock=time.clock()

#计时函数

K=250

#K是我们计算出来的常数

defcalc_radius(blob):

#计算图像中色块的半径

return(blob.w()+blob.h())/2

while(True):

clock.tick()

#开始计时

img=sensor.snapshot()

#拍摄一张照片,snapshot()函数返回一个image对象

blobs=img.find_blobs([Target_02])

#寻觅目标颜色的色块

iflen(blobs)==1:

blob=blobs[0]

img.draw_rectangle(blob.rect())

img.draw_cross(blob.cx(),blob.cy())

#在biob周围画矩形框

img_ball_r=calc_radius(blob)

#图像中色块的半径

ball_distance=K/img_ball_r

#色块离镜头的距离

print("目标距离:

%d厘米

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2