《本科毕业设计Kinect在农产品采集方面的应用.doc》由会员分享,可在线阅读,更多相关《本科毕业设计Kinect在农产品采集方面的应用.doc(35页珍藏版)》请在三一办公上搜索。
1、本科毕业设计Kinect在农产品采集方面的应用摘 要快速、准确、实时获取农作物涨势图像信息已经成为数字农业生产管理的趋势和必要手段,而深度图像信息包含彩色图像所没有的三维信息,是农作物信息采集的重要补充。本文采用微软公司开发的一款廉价传感器设备Kinect for Windows尝试用于农产品采集方面的应用,包括在水稻图像的预处理、水果分级系统等方面的应用,旨在于将高科技技术应用于精细农作业的生产与管理,让农作业的生产与管理更加科学与方便化。本文先是对Kinect在各个领域上的应用进行阐述,然后深入探究了Kinect的构造和工作原理,继而对Kinect的深度成像进行了初步研究,论文在水稻冠层和
2、水果分类做了初步探索,利用Kinect获取水稻及水果的RGBD图像,根据其深度信息,从空间维度,将水稻冠层进行快速分割、提取,为后续水稻冠层信息分析打下基础。利用深度信息及几何原理获取水果的高度和直径,可为水果分级提供依据。关键词:Kinect RGBD 水稻冠层分割 深度信息 Kinect in the acquisition of agricultural productsRuan XiaoZhao(College of Engineering, South China Agricultural University, Guangzhou 510642, China)Abstract: F
3、ast, accurate, real-time acquisition of crop rise image information has become a necessary means of digital agriculture production and management trend, but the depth image information contains no 3D information of color image, is an important supplement to the crop information collection. This pape
4、r uses a low-cost sensor devices called Kinect for Windows developed by the Microsoft Corp attempts to application for agricultural products of the acquisition, including the application in rice image preprocessing, fruit grading system, aimed at the production and management of high-tech in fine ag
5、ricultural work, make the production and management of agricultural work more scientific and convenient.This paper first elaborates on the application of Kinect in various fields, and then in-depth study of the structure and working principle of Kinect, and then to Kinect depth imaging is studied, t
6、he paper made a preliminary exploration in rice canopy and fruit classification, RGBD image acquisition of rice and fruit by Kinect, according to its depth information, from the spatial dimension, the rice canopy fast segmentation, extraction, analysis to lay the foundation for subsequent rice canop
7、y information. The fruit to obtain using depth information and geometric principle of height and diameter, can provide the basis for the classification of fruit.Key words: kinect RGBD rice canopy segmentation depth information目 录1 前言11.1 课题的研究背景11.2 Kinect在各领域的应用11.2.1 医疗领域的应用11.2.2 教育领域的应用11.2.3 机器
8、人视觉与控制领域的应用21.2.4 体育运动竞技研究21.2.5 娱乐领域的应用21.2.6 零售领域的应用22 基于Kinect开发的原理22.1 Kinect for Windows硬件组成及其深度成像原理22.1.1 Kinect for Windows 的硬件组成32.1.2 Kinect的核心芯片42.1.3 Kinect for Windows的核心部件42.1.4 Kinect 相关技术规格52.1.5 Kinect深度成像原理62.1.6 深度测量技术62.1.7 光源标定方法62.2 软件开发平台72.2.1 .NET Framework(.NET 框架)72.2.2 公共语
9、言运行库82.2.3 类库92.2.4 C# 编程语言102.3 搭建农业信息监测平台103 Kinect在农业信息采集中的应用123.1 基于Kinect的水稻冠层分割123.1.1 水稻的彩色图像和深度图像获取123.1.2 根据深度图像对水稻冠层进行分割153.2 基于Kinect的水果三维尺寸获取163.2.1 获取水果的三维尺寸173.2.2 测试Kinect深度值精度实验183.2.3 Kinect在水果分级系统上的应用构想194 总结与展望214.1 总结214.2 展望22参考文献23附录24致谢30华南农业大学本科生毕业设计成绩评定表1 前言1.1 课题的研究背景随着全球信息
10、化的迅猛发展,数字农业已经发展成为现代农业的新潮流。数字农业是集农业科学、环境科学、计算机技术、通信技术和网络技术等众多科学技术于一体的高新技术系统,也是现代农业发展的新模式。自20世纪90年代以来,农作物遥感监测一直是遥感应用的一个重要课题,但遥感监测使用的是卫星空间监测,一方面,受气候条件影响而导致监测精度不高;另一方面,遥感监测是基于宏观的大面积农作物监测,不适合对单个农作物进行快速、准确和实时的小面积监测研究。伴随着计算机软硬件和图形图像处理技术的飞速发展,计算机视觉技术在农业中的应用越来越广泛,从而使得利用计算机视觉技术对农作物长势形态的监测成为可能。(江晓庆,肖德琴,张波,2012
11、)然而传统对农作物长势形态监测主要是通过繁琐的手工测量或采用安规的图像采集设备获取,比如CCD摄像机、数码相机、光坡扫面亿、双目设备等,这些方法一方面测量过于复杂不易操作,并且无法做到实时监测;另一方面测量过程可能会破坏农作物的生长及环境。本文将采用微软公司开发的Kinect for Windows运用于室外农作物的信息监测。Kinect作为一款廉价的传感器摄像头正被越来越多地应用到现实中,从游戏到商业运用,其应用前景正随着科研和商业开发而变得越来越广阔。本文尝试将Kinect运用到农产品采集方面的应用领域。1.2 Kinect在各领域的应用1.2.1 医疗领域的应用手术室环境对无菌要求非常高
12、,传统鼠标键盘等人机交互方式存在很多限制,例如需要定期消毒、无法在手术过程中进行操作等。Kinect体感操作可摆脱这些束缚,解放手术室外科医生、麻醉医生的双手,可在手术进行的过程中实现调阅病患病灶影像,通过手势放大、缩小图片,以及翻阅病历等操作,大大方便了医生手术,减少了手术室的人员流动。1.2.2 教育领域的应用Kinect“体感操作”这种新颖的交互方式,能够激发学习兴趣。一些设计控件结构的课件制作可结合Kinect进行体感操作,比如用Kinect展示宇宙星云,演示DNA、化学分子结构等,用Kinect蜡笔物理,使用Kinect手势绘图,通过体感控制所绘图形,并使之具有物理特性,比如重力,吸
13、引力等。1.2.3 机器人视觉与控制领域的应用四旋翼飞行器的“导航雷达”;地震搜救机器人控制;深海探测机器人控制;Kinect Robot,使用Kinect作为机器人的头,通过Kinect检测周围环境,并进行3D建模,来指导机器人的行动。1.2.4 体育运动竞技研究目前在很多运动竞技科目中,广泛采用了类似于“好莱坞”动作捕捉的技术,结合计算机视觉技术,对运动目标进行准确跟踪,并计算出肢体运动轨迹、角度、速度和加速度,以及跑位的轨迹和速度。这类运动经济分析的设备和系统同样价值不菲。利用Kinect的骨骼跟踪的技术,无须特制发光点(Marker),结合运动人体科学,用于体育竞技训练的三维动作捕捉,
14、从而提高运动员训练水平。1.2.5 娱乐领域的应用Kinect破解“初音”,将体感控制应用到漫画人物初音未来上;变身奥特曼,捕捉玩家骨架数据,虚拟为奥特曼的形态与之随动,并且附加一些特技效果。在应用Kinect的Xbox360体感游戏机中,“你就是控制器”这句标语得到了最直接的体现,无需其他操作器,仅用身体就能进行球类运动游戏、赛车游戏,从虚拟游戏中真实感得到了前所未有地增强。1.2.6 零售领域的应用Kinect试衣镜,这款基于Kinect体感技术的神奇的试衣镜,让客户可以快速的试穿衣服,提高销售效率和企业形象。2 基于Kinect开发的原理2.1 Kinect for Windows硬件组
15、成及其深度成像原理Kinect for Windows如图1所示,原型是微软公司2010年推出的XBOX360游戏机体感外设,Kinect原本是微软专为Xbox游戏机开发的体感外设,利用即使动态捕捉、影像辨识、麦克风输入、语音辨识、社群互动等功能让玩家摆脱传统游戏手柄的束缚,通过让自己的肢体控制游戏,并且实行与互联网玩家互动,分享图片、影音信息等功能。吉尼斯世界记录组织在其官方网站上宣布,微软 Xbox 360 最新体感外设 Kinect 凭借发布后首两个月800万台,平均每天133,333台的销量,被评为有史以来销售最快的电子消费产品,2012年7月美国科技博客网站BusinessInsid
16、er评选出本世纪10款最重要电子产品,Kinect榜上有名。Kinect 体感游戏在Xbox 360 上获得很好的评价,但是对于 Windows 平台上的开发却一直只能使用非官方的解决方案,例如 NKinect 配合CL NUI SDK ,但是微软终于在 2011 年 6 月推出了 Kinect for Windows SDK Beta,特别是可以使用 C# 与.NET Framework 4.0 来进行开发,这对 .NET 开发人员来说无疑是 2011 年最好的消息了。在2012年初微软正式发布了PC版Kinect体感外设也即Kinect for Windows ,微软授权这一版本的Kine
17、ct,不能用做商业开发,只能用作教学、科研或实验。本次设计使用的正是Kinect for Windows 。图1 Kinect for windows传感器2.1.1 Kinect for Windows 的硬件组成Kinect for Windows传感器关键部件如图2所示,下面列出了各关键部件的说明:(1)麦克风阵列:声音从4 个麦克风采集,同时过滤背景噪声,可定位声源。(2)红外投影机:主动投射近红外光谱。(3)红外摄像头:分析红外光谱,创建可视范围内的人体、物体的深度图像。(4)仰角控制马达:可编程控制仰角的马达,用于获取最佳视角。(5)USB 线缆:支持USB 2.0 接口,用于传输
18、彩色视频流、深度流、音频流等。必须使用外部电源,传感器才能充分发挥其功能。(Kinect 的功率达到了12W,而普通USB 一般是2.5W。)(6)彩色摄像头:用于拍摄视角范围内的彩色视频图像。(Jarrett Webb,James Ashley,2012)图2 Kinect的主要部件2.1.2 Kinect的核心芯片Kinect的核心是PrimeSense的PS1080 系统级芯片(SoC)。PS1080 SoC拥有超强的并行计算逻辑,可控制近红外光源,进行图像编码并主动投射近红外光谱。同时,通过一个标准的CMOS 图像传感器接收投影的Light Coding 红外光谱并且将编码后的反射斑点
19、图像传输给PS1080,PS1080 对此进行处理并生成深度图像。图4所示为PrimeSense的推荐设计。PS1080 SoC 芯片是一个多感应系统,能提供同步深度图像、彩色图像和音频流。PS1080 通过USB 2.0 物理层协议将所有数据传送到主机。PS1080 适用于各种主机CPU,所有深度获取算法均在PS1080 上运行,主机只需运行最低限度的USB 通信层。通过该设计,即使是计算能力有限的主机设备也能具备“深度图像获取力”。图3 PrimeSense推荐的设计2.1.3 Kinect for Windows的核心部件作为一款集成了诸多先进视觉技术的自然交互设备,Kinect for
20、 Windows 主要零部件有近百个,其的核心部件是它前面的三个镜头,包括一个投影机和两个摄像头,如图5所示,从左向右分别是红外投影机和一组光学部件彩色摄像头和红外摄像头, 红外投影机是位于Kinect 最左侧的镜头,它与最右侧的红外摄像头配合使用。PS1080 SoC(系统级芯片)对红外光源进行控制,以便通过红外光编码影像放映场景。红外投影机的光源是一类普通激光光源,经过磨砂玻璃和红外滤光片,投射出近红外光,该光波长为830nm,可持续输出,符合IEC 60825-1 标准中的一级安全要求。红外摄像头是一个标准CMOS 影像传感器,负责接收放出的红外光,并将红外光编码影像传给PS1080。P
21、S1080 负责处理红外影像,然后逐帧生成准确的场景深度影像。Kinect 通过彩色摄像头和红外摄像头来获取外界的信息,为了生成更准确的传感器信息,PS1080 系统级芯片(SoC)会执行“PrimeSense 注册过程”,为了让深度影像和二维标准色彩影像相互对应,必须进行注册。注册就是将色彩影像和深度影像进行对应,产生像素相互对应的影像,即色彩影像中的每个像素分别与深度影像中的一个像素对应。这能让应用程序准确了解收到的色彩影像中每个像素的深度。所有传感器信息(深度影像、色彩影像和音频)通过一个USB 2.0 接口传送给主机,同时保证时序准确对准。通过Kinect SDK 可以获得同步的深度图
22、像和彩色图像数据流。图4 Kinect的核心部件2.1.4 Kinect 相关技术规格Kinect 传感器的有效视距如表1所示,传感器阵列规格规格表2 所示。相较于Kinect for XBOX360 ,Kinect for Windows 增加了近景模式(Near Mode),使得其所能探测的最小深度范围从原来的距离Kinect 0.8米扩大到距离Kinect 0.4米。Kinect 默认的彩色图像格式分辨率为640*480,深度图像则为320*240,帧率均为30帧每秒。表1 Kinect传感器有效视距传感器特性有效视距/m色彩和深度默认模式(0.84.0),近景模式(0.43.5)骨骼跟
23、踪默认模式(0.84.0),近景模式(0.43.5)表2 Kinect 传感器阵列规格传感器特性规格范围可视角度43垂直方向和57水平方向有效视野范围机械化倾斜范围(垂直方向)28帧率(深度和彩色图像数据流)30 帧每秒(FPS)深度图像(默认)QVGA(320240)彩色图像(默认)VGA(640480)音频格式16kHz, 16bit 单声道(PCM)音频输入特性4 个带有24bit 的数字模拟信号(ADC)和消除和处理噪声的麦克风阵列2.1.5 Kinect深度成像原理Kinect的核心技术也是属于计算机视觉技术范畴,只不过它们分析的不是彩色图像,而是目标物体的深度数据。Kinect 获
24、取深度信息主要是通过红外投影机和红外摄像头的组合,投影和接收互为重叠,如图2.1所示。图5 Kinect红外摄像头视角2.1.6 深度测量技术Kinect的芯片采用的深度测量技术为Light Coding技术,属于结构光技术的一种,只是深度计算方式不一样,其测量基于光编码,投射已知的红外模式到场景中, 通过另外一个红外CMOS 成像器所捕获到的该模式的变形,从而最终来确定深度信息的摄像头Light Coding的光源称为激光散斑(Laser Speckles),是激光照射到粗糙物体或穿透毛玻璃后随机形成的衍射斑点。这些散斑具有的明显特点就是具有高度的随机性,而且会随着距离的不同而变换图案。也就
25、是说空间中任意两处的散斑图案都是不同的。只要在空间中打上这样的结构光,整个空间就都被做了标记,把一个物体放进这个空间,只要看看物体上面的散斑图案,就可以知道这个物体在什么位置了,在这之前还要先做一次光源标定。2.1.7 光源标定方法Kinect光源标定方法的官方解释是:每隔一段距离,取一个参考平面,把参考平面上的散斑图案记录下来。假设Kinect 规定的用户空间是距离摄像头14m 的范围,每隔1cm 取一个参考平面,那么标定下来我们就保存了300 幅散斑图像。标定的间距越小,精度越高,如图6所示。需要进行测量的时候,拍摄一幅待测量的散斑图像,将这幅图像和我们保存下来的300 幅参考图依次做互相
26、关运算,进而得到300幅相关度图像。而空间中的物体存在的位置,会在相关图像上会显示出峰值,把这些峰值叠加在一起,再经过插值运算后就会得到整个场景的三维形状了。图6 光源标定2.2 软件开发平台Visual Studio 是微软公司推出的开发环境,Visual Studio 可以用来创建 Windows 平台下的 Windows 应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和 Office 插件,Visual Studio 2012荣获在软件界有奥斯卡奖之称的Jolt奖2013年生产力奖。2002 年,随着 .NET 口号的提出与 Windows XP / Office XP
27、 的发布,微软发布了 Visual Studio .NET(内部版本号为 7.0)。在这个版本的 Visual Studio 中,微软剥离了 Visual FoxPro 作为一个单独的开发环境以 Visual FoxPro 7.0 单独销售,同时取消了 Visual InterDev。与此同时,微软引入了建立在 .NET 框架上(版本1.0)的托管代码机制以及一门新的语言C#。2.2.1 .NET Framework(.NET 框架).NET框架是构建并运行应用程序的平台。它的主要组件包括公共语言运行库和.NET框架类库(FCL)。CLR抽象操作系统服务,并用作托管应用程序(managed a
28、pplication)(其每一个动作都须经过CLR批准)的执行引擎。FCL提供托管应用程序将写入面向对象的API。编写.NET框架应用程序时,不必考虑windows API、MFC、ATL、COM或者其他工具和技术,只需要使用FCL。当然,也可以调用windows API或COM对象,但是这样必须将托管代码(managed code,CLR运行的代码)转换为非托管代码(unmanaged code,不需要CLR帮助的本机代码)。这种转换会降低系统性能,甚至可能被系统管理员否决。Microsoft.NET主要是关于XML,Web服务的,但.NET框架同样支持其他的编程模型。除了Web服务以外,还
29、可以利用它来编写控制台应用程序、GUI应用程序(Windows窗体)、Web应用程序(Web窗体),甚至Windows服务(大家熟知的NT服务)等。.NET框架同样能帮助使用Web服务即编写Web服务客户端。但是,用.NET框架编写的应用程序不一定必须使用Web服务。2.2.2 公共语言运行库.NET Framework的核心是其公共语言运行库(common language runtime,CLR),通常将在CLR控制下运行的代码成为托管代码(managed code)(Christian Nagel等,2010),托管代码执行核心中的引擎。运行库为托管代码提供各种服务,如跨语言集成、代码访
30、问安全性、对象生存期管理、调试和分析支持。当应用程序执行时,公共语言运行库也可用于提供一些服务并对这些服务进行管理,这些服务包括增强安全性、管理内存、进程、线程及语言集成。语言集成允许组件与XML Web服务完全集成,而不管使用的是何种编程语言。Microsoft提供了4种.NET编程语言,还有大量非Microsoft语言也可用于生成.NET应用程序。多数Windows可执行程序(.exe)使用的是非托管代码,这些代码无法提供安全性或内存管理方面的保证。在公共语言运行库下执行的程序代码即是托管代码,因为它依赖于公共语言运行库完成了如内存管理之类的许多低级别任务。使用托管代码能比非托管代码提供更
31、高级别的可靠性与安全性。图7显示了公共语言运行库组件的概念架构。基类库支持线程支持类型检验程序安全引擎调试引擎异常管理器COM封送拆收器类加载程序垃圾回收器代码管理器IL到本机代码编译器图7 公共语言运行库组件为了跨越托管代码与非托管代码的鸿沟,并使开发人员能够利用巨量的传统的Windows代码,公共语言运行库启用了互操作性。例如,公共语言运行库使得托管代码可以调用在非托管代码中定义的函数。除了作为运行库系统外,公共语言运行库还有另外一个重要功能是可以作为一台虚拟机。将托管代码应用程序编译成可执行程序的方式较之传统Windows应用程序有所不同。事实上,它们是以一种被称作Microsoft中间
32、语言或MSIL的中间语言中分布的。在程序安装时或在程序初次运行时,公共语言运行库完成编译。这一操作称作“即时编译”。2.2.3 类库类库提供了一组标准的系统服务。这些代码库将取代并提供与C+或Visual Basic中的Win32 API和Microsoft基础类(MFC)相同种类的函数。图8所示是.NET类库的概念框架。基类提供了诸如输入/输出、字符串操作、安全性管理、网络通信、线程管理、文本管理及其它函数等标准功能。 Data类支持稳定的数据管理,并纳入了SQL类以通过标准SQL接口处理稳定的数据存储。XML类使得XML数据处理、搜索与转换成为可能。XML Web服务类支持轻量级的分布式组
33、件开发,这些组件即便在遇到防火墙和网络地址转换(NAT)软件时也能正常运行。Web窗体包含的类使得用户可以迅速开发Web图形用户界面(GUI)应用程序。Windows窗体支持一组类,通过这些类可以开发基于windows的GUI应用程序,促进了托放式GUI开发,此外还为.NET框架的所有编程语言提供了一个公共的、一致的开发界面。Web窗体包含的类使得用户可以迅速开发Web图形用户界面(GUI)应用程序。Windows窗体支持一组类,通过这些类可以开发基于windows的GUI应用程序,促进了托放式GUI开发,此外还为.NET框架的所有编程语言提供了一个公共的、一致的开发界面。XML Web服务W
34、eb窗体Windows窗体ASPNET数据和XML类基本框架类公共语言运行库Windows操作系统图8 .NET 类库2.2.4 C# 编程语言Microsoft引入了一种新的编程语言C#, C# 是微软开发的一种面向对象的编程语言,是微软.NET开发环境的重要组成部分。它是为生成在 .NET Framework 上运行的多种应用程序而设计的。C# 简单、功能强大、类型安全,而且是面向对象的。C# 凭借它的许多创新,在保持 C 样式语言的表示形式和优美的同时,实现了应用程序的快速开发。Visual Studio 包含 Visual C#,这是通过功能齐全的代码编辑器、项目模板、设计器、代码向导
35、、功能强大且易于使用的调试器以及其他工具实现的。通过 .NET Framework 类库,可以访问多种操作系统服务和其他精心设计的类,这些类可显著加快开发周期。2.3 搭建农业信息监测平台农产品信息实时监测平台是由硬件和软件平台组成,硬件主要包括Kinect摄像头和笔记本电脑以及连接PC和Kinect的USB转换数据线,其中,Kinect对PC的硬件要求是:双核2.66GHz或以上的处理器、2GB以上内存,受实际情况限制,本次设计使用的笔记本内含的是Intel Core i3的处理器,其运行速度为2.27GHz,经过尝试,虽然运行某些程序时会出现影像卡顿或者帧率不足30FPS的现象,但总体运行
36、情况良好,能达到基本输出彩色和深度影像的目的,Kinect对操作系统的要求是Windows 7的任意版本(32位或64位),同时也向上支持Windows 8,而且Kinect应用程序必须在一个原生操作环境下编译、运行,也就是说,暂时Kinect 还无法支持在虚拟机环境下安装。所以本次设计Kinect 是在Windows 7旗舰版(32位)操作系统下安装运行的。其软件要求:微软的Visual Studio 2010或Visual Studio 2012 开发环境、Microsoft .NET Framework 4.0或4.5 工具组件。本次设计安装的是Visual Studio 2010旗舰版
37、以及Microsoft .NET Framework 4.0。除此之外,PC端还需安装Kinect for Windows SDK(Software Development Kit,软件开发工具包,最新版本是v1.7)以及Developer Toolkit(开发者工具包)。Kinect 传感器实时获取农产品信息是通过Kinect传感器提供原始数据流(Raw Sensor Streams)给SDK,这些数据流包括深度数据流、彩色数据流和音频数据流,通过Kinect SDK可以直接获取这些原始传感器数据流,并在此基础上进行较为底层的应用开发,如图9所示。其中NUI Library是自然用户界面库,
38、库里面包含了众多NUI API(Application Programming Interface)即应用程序编程接口,Kinect for Windows SDK Beta包含两个重要的API,分别是NUI API和Audio API,其中NUI API是Kinect SDK的核心,Kinect for Windows SDK的系统架构如图10所示。系统架构各部分内容如下:(1) Kinect硬件接入层:Kinect硬件接入层由Kinect的传感马达、摄像头、麦克风阵列等硬件组件可以通过设备驱动程序进行管理和访问。Kinect传感器通过USB集线器连接到计算机上。(2) Microsoft
39、Kinect设备驱动层:驱动分为内核模式和用户模式:内核模式(Kernel Mode)包括设备驱动程序、数据交互统一使用WinUSB数据栈,其中设备栈主要用于设备的配置和访问,WinUSB camera stack用于彩色图像和深度图像数据流的控制,USBAudio栈用于音频数据流控制;用户模式(User Mode)为SDK API提供了访问和控制接口。包括麦克风阵列、彩色及深度图像数据、设备每句功能、控制传动马达仰角。(3) NUI API:这是Kinect SDK的核心,用来处理彩色图像流、深度图像数据、骨骼跟踪和控制/管理Kinect设备等。Kinect for Windows版本的摄像
40、头支持近景模式。(4) DMO codec for mic array APIs:拓展Windows7上的麦克风阵列,用于波束成形和定位声源位置。(5) Windows Core Audio and Speech APIs: Windows 7上的音频、语音识别、多媒体等API。图9 应用程序与Kinect传感器及驱动程序、SDK之间的交互图10 Kinect for Windows SDK 系统架构3 Kinect在农业信息采集中的应用3.1 基于Kinect的水稻冠层分割水稻是世界上最重要的粮食作物之一,获得水稻的水分含量和营养状况是对其进行精确管理的前提。田间破坏性取样和实验室化学分许虽
41、然具有较高的准确度,但其处理周期长,并且需要消耗大量人力物力(王远等,2012)。利用计算机视觉、图像处理技术对水稻进行实时监测研究,能够对农作物的生长模型三维重建、长势状态分析、病虫害实时监测等研究提供有价值的数据依据。而Kinect与其他视觉设备相比较有着自己独特而且价值非凡的优势。往往在用视觉设备获取水稻图片的时候,包括土壤、水分等背景都是不希望获取到却难以摒弃的,而使用Kinect就可以做到这一点,只要根据深度信息对拍摄物体进行阈值运算,并选择显示水稻冠层,这在很大程度上减少了图片的预处理工作计算量,这点是Kinect在与其他视觉机器对比所具有的核心优势。3.1.1 水稻的彩色图像和深
42、度图像获取为了能够比较直观的观察水稻在深度摄像头中的显示效果,以便后续对水稻冠层图像进行分割,首先通过Kinect传感器的RGB摄像头和红外摄像头获取水稻的彩色图像和深度图像。通过Kinect SDK获取传感器的图像信息的流程如图11所示,下面是对工程主要函数的介绍:(1)建立WPF工程。在工程中添加Microsoft Kinect的引用。(2)初始化、启动Kinect设备。 编写startKinect()方法,选择Kinect设备,把Kinect命名为sensor,启用彩色图像、深度图像数据流,并注册事件:sensor. AllFramesReady +=new EventHandler (
43、sensor_AllFramesReady),该方法将保证彩色图像、深度图像的同步。(3)彩色图像流事件处理。Kinect的彩色图像为BGR32格式,一个像素为4个字节,前3字节分别对应B(Blue),G(Green),R(Red),最后1字节为阿尔法通道,代表其透明度。图像显示在用户界面中的colorImage控件中。(4)深度图像流事件处理。Kinect返回的只是一串深度数据流,而要直观地看到物体轮廓,这里将深度转换为灰度图像,为了深度图像能有更好的显示效果,这里深度图像也采用BGR32格式,使B、G、R的值相等,就会呈现出灰色图像,灰度值的范围是0255,0为黑色,255为白色,在这范围
44、之间根据距离Kinect传感器的距离而呈现不同程度的灰色,在视距之外的统一设为白色。图像显示在用户界面的depthImage控件中。(5)保存图片事件。注册鼠标按键事件,调用takeColorPicture_Click和takeDepthPicture_Click方法可以分别保存彩色和深度图像。(6)窗体启动事件。在Window_Loaded()事件中调用startKinect方法,保证运行程序时能首先打开窗体和启动Kinect传感器数据流。(7)窗体关闭事件。在Window_Closed事件中调用stopKinect方法。运行程序,水稻的彩色和深度图像效果如图12所示,图13是对宿舍进行拍摄
45、,对彩色和深度图像的分析如下:从图中可以发现,彩色图像虽然分辨率为640*480,但是显示效果还是不错的,深度图像是使用原始深度数据形成的图片,并没有经过任何图像处理,虽然由于Kinect的深度图像分辨率只能达到320*240,导致画面比较粗糙,噪声较大,但从图中可以发现,彩色图像上的物体基本都可以在深度图像中找到比较清晰的轮廓,不过会出现一些并非距离原因而导致的白色区域,经过分析,白色区域的出现主要是因为不能在物体表面形成反射散斑,也就不能得到该物体的深度信息,这是一种深度图像噪声。发生这种情况一般有以下几种原因: (1) 特殊材料,如透明玻璃、镜子、吸收红外线材料;(2) 特殊结构,不能反
46、射散斑。(陈晓明等,2013);(3) 距离原因:距离不在Kinect视距范围内,这里是硬编程使得Kinect传感器视距范围之外的都使其灰度值为255,即白色。(4)缝隙:由于红外线无法反射回来导致的盲区。(5)光滑物体的镜面反射:在Kinect以一定角度拍摄比较光滑平整的物体时由于镜面反射作用导致红外线无法被红外摄像头所接收,导致了深度数据的盲区。图11 彩色及深度影像显示流程图对比图12、图13的深度图发现,两者共同的特点是距离Kinect越近,颜色越深,面积大且越平整、密度越大显示的效果也越好,图13中较狭小的叶子部分显示不出来。图12 深度图像和彩色图像图13 彩色图像和深度图像3.1.2 根据深度图像对水稻冠层进行分割为了分割获取水稻冠层图像,需要对深度图像的像素进行一一扫描并通过深度值来选取水稻冠层的像素坐标,然后将水稻冠层的深度坐标映射到RGB图像坐标中,然后将水稻冠层的RGB图像显示在白色幕布上。之所以需要将水稻的深度坐标映射到RGB图像坐标中,是因为RGB图像和深度图像分别是以RGB摄像头和红外摄像头为中心拍摄到的图片。正如人的左眼和右眼看到的景象不同,Kinect红外摄像头和彩色摄像头获取的图像帧也是有差异的。即使深度图像和彩色图像采用同样大小的分辨率,在同步注册事件中获取同一位置的深度图像和彩色图像的像素点也不是一一对应的。因此,如果需要得到包含颜色信息的三