南京林业大学毕业设计开题报告题目基于OpenCV的树木视觉图像Word格式文档下载.docx
《南京林业大学毕业设计开题报告题目基于OpenCV的树木视觉图像Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《南京林业大学毕业设计开题报告题目基于OpenCV的树木视觉图像Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
目前大多数的图像是以数字形式存储,因而图像处理很多情况下指数字图像处理。
此外,基于光学理论的处理方法依然占有重要的地位。
数字图像处理是信号处理的子类,另外与计算机科学、人工智能等领域也有密切的关系。
传统的一维信号处理的方法和概念很多仍然可以直接应用在图像处理上,比如降噪、量化等。
然而,图像属于二维信号,和一维信号相比,它有自己特殊的一面,处理的方式和角度也有所不同。
大多数用于一维信号处理的概念都有其在二维图像信号领域的延伸,它们中的一部分在二维情形下变得十分复杂。
同时图像处理也具有自身一些新的概念,例如,连通性、旋转不变性,等等。
这些概念仅对二维或更高维的情况下才有非平凡的意义。
图像处理中常用到快速傅立叶变换,因为它可以减小数据处理量和处理时间。
计算机视觉是将来自静止图像或视频的数据转换成一个决策或者一种新的表达方式的过程,所有的这些转换都是为了达到某个目标。
因为人类是视觉动物,所以会误以为可以很容易地实现计算机视觉。
当你凝视图像时,从中找到一辆汽车会很困难么?
你凭直觉会觉得很容易。
人脑将视觉信号划分入很多个通道,将各种不同的信息输入你的大脑。
你的大脑有一个关注系统,会根据任务识别出图像的重要部分,并做重点分析,而其他部分则分析得较少。
在人类视觉流中存在大量的反馈,但是目前我们对之了解甚少。
肌肉控制的传感器以及其他所有传感器的输入信息之间存在广泛的关联,这使得大脑可以依赖从出生以来所学到的信息。
大脑中的反馈在信息处理的各个阶段都存在,在传感器硬件(眼睛)中也存在。
在眼睛中通过反馈来调节通过瞳孔的进光量,以及调节视网膜表面上的接受单元。
在计算机视觉系统中,计算机接收到的是来自摄像机或者磁盘文件的一个数值矩阵。
矩阵中的每个数值都有很大的噪声成分,所以它仅仅给出很少的信息,这个数值矩阵就是计算机“看”到的全部。
我们的任务是将这个具有噪声成分的数值矩阵变成感知。
实际上,计算机视觉问题比前面我们提到的更糟糕,它是不可解的。
给出三维世界的二维视图,是没有固定方法来重建出三维信息的。
在理论上,此类病态问题没有惟一和确定的解。
即使数据很完美,同一张二维图像也可以表示多种三维场景。
然而,如前面提到的,数据会被噪声和形变影响。
这些影响来自真实世界的变化(天气、光线、反射、运动),镜头和机械结构的不完美,传感器上的长时间感应(运动模糊),传感器上和其他电子器件上的电子噪声,以及图像采集后的图像压缩引入的变化。
设计实际系统时,为了克服视觉传感器的限制,我们可以使用机器学习技术对上下文信息进行显式建模。
隐含的变量(例如物体大小、重力方向及其他变量)都可以通过标记好的训练数据里的数值来校正。
或者,也可以通过其他的传感器来测量隐含的变量。
使用激光扫描仪可以精确测量出一个物体的大小。
计算机视觉面临的另一个难题是噪声问题。
我们一般使用统计的方法来克服噪声。
例如,一般来说不可能通过比较一个点和它紧密相邻的点来检测图像里的边缘。
但是如果观察一个局部区域的统计特征,边缘检测会变得容易些。
由局部区域卷积的响应连成的点串,构成边缘。
另外可以通过时间维度上的统计来抑制噪声。
还有一些其他的技术,可以从数据中学习显式模型,来解决噪声和畸变问题。
例如镜头畸变,可以通过学习一个简单多项式模型的参数来描述这种畸变,然后可以几乎完全校正这种畸变。
计算机视觉拟根据摄像机数据来采取行动或者做出决策,这样的行动或决策是在一个指特定目的或任务的环境中来解决。
我们从图像去除噪声和损坏区域,可以让监控系统在有人爬过栅栏时给出报警,或者在一个游乐园里监控系统能够数出总共有多少人通过了某个区域。
在办公室巡游的机器人的视觉软件所采用的方法与固定摄像机的不同,因为这两个系统有不同的应用环境和目标。
通用的规律是:
对计算机视觉应用环境的约束越多,则越能够使用这些约束来简化问题,从而使最终的解决方案越可靠。
OpenCV的目标是为解决计算机视觉问题提供基本工具。
在有些情况下,它提供的高层函数可以高效地解决计算机视觉中的一些很复杂的问题。
当没有高层函数时,它提供的基本函数足够为大多数计算机视觉问题创建一个完整的解决方案。
对于后者,有几个经过检验且可靠的使用OpenCV的方法;
所有这些方法都是首先大量使用OpenCV函数来解决问题。
一旦设计出解决方案的第一个版本,便会了解它的不足,然后可以使用自己的代码和知识来解决(更为广知的一点是“解决实际遇到的问题,而不是你想像出来的问题”)。
你可以使用第一个版本的解决方案作为一个基准,用之评价解决方案的改进程度。
解决方案所存在的不足可以通过系统所用的环境限制来解决。
2.本课题的国内外的研究现状
OpenCV的全称是:
OpenSourceComputerVisionLibrary。
它包含了Open和ComputerVision两个部分,Open是指OpenSource(开源,即开放源代码),ComputerVision则指计算机视觉。
OpenCV于1999年由Intel建立,现在由WillowGarage提供支持。
OpenCV是一个基于BSD许可证授权(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上。
它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
开放源代码(OpenSource)是信息技术界从20世纪80年代开始兴起的名词。
源代码是由软件命令电脑执行指定动作的程序语句,是一个软件的核心。
开放源代码之所以能够风靡世界,首先是其开源的免费特性;
此外由于有全球众多编程者的参与,开源软件一般具有简约精炼、资源占用少、功能集中和安全性好的特点。
从长远来讲。
开放源代码或许是一种效率最高、效果更好的软件商业模式。
计算机视觉(ComputerVision)是在数字图像处理的基础上发展起来的新兴学科,它从信息处理的层次研究信息的认知过程,研究视觉信息处理的计算理论和表达与计算方法,包括图像特征提取,摄像机定标,立体视觉,运动视觉(或称序列图像分析),由图像灰度恢复三维物体形状的方法,物体建模与识别方法以及距离图像分析方法等方面组成。
计算机视觉市场巨大而且持续增长,且这方面没有标准API,目前的计算机视觉软件大概有以下三种:
1.研究代码(慢,不稳定,独立并与其他库不兼容)
2.耗费很高的商业化工具(比如Halcon,MATLAB+Simulink)
3.依赖硬件的一些特别的解决方案(比如视频监控,制造控制系统,医疗设备)
这就是目前的现状。
而标准的API将简化计算机视觉程序和解决方案的开发。
OpenCV拥有包括500多个C函数的跨平台的中、高层API。
它不依赖于其它的外部库——尽管也可以使用某些外部库。
OpenCV对非商业应用和商业应用都是免费的。
OpenCV为IntelIntegratedPerformancePrimitives(IPP)提供了透明接口。
这意味着如果有为特定处理器优化的IPP库,OpenCV将在运行时自动加载这些库。
OpenCV作为开放的数字图像处理和计算机视觉软件平台,有以下优点:
(1)开放C源码;
(2)基于Intel处理器指令集开发的优化代码;
(3)统一的结构和功能定义;
(4)强大的图像和矩阵运算能力;
(5)方便灵活的用户接口;
(6)同时支持MS.Windows和Linux平台
OpenCV致力于真实世界的实时应用,通过优化的C代码的编写对其执行速度带来了可观的提升,并且可以通过购买Intel的IPP高性能多媒体函数库(IntegratedPerformancePrimitives)得到更快的处理速度。
OpenCV拥有包括500多个C函数的跨平台的中、高层API。
OpenCV使用类BSDlisence,所以对非商业应用和商业应用都是免费(FREE)的。
OpenCV为IntelIntegratedPerformancePrimitives(IPP)提供了透明接口。
这意味着如果有为特定处理器优化的的IPP库,OpenCV将在运行时自动加载这些库。
OpenCV显著的优点是其源代码完全开放,能够从Intel公司的网站免费下载得到,同时提供了针对多种格式的图像文件的处理函数。
OpenCV运行速度快,有通用的图像/视频载入、保存、获取和处理模块。
目前的1.0版本库中包含CxCore基本算法模块、Cv图像处理和计算机视觉模块、CvAux附加函数模块、HiguGui用户交互模块、CvCam视频模块、ml机器学习模块,能够实现包括图像数据操作、视频输入输出、结构分析、摄像头标定以及基本的图形用户界面等功能,并且通过大量的补充,其功能在不断扩展。
OpenCV提供的视觉处理算法非常丰富,并且它部分以C语言编写,加上其开源的特性,处理得当,不需要添加新的外部支持也可以完整的编译链接生成执行程序,所以很多人用它来做算法的移植,OpenCV的代码经过适当改写可以正常的运行在DSP系统和单片机系统中。
OpenCV的设计目标是执行速度尽量快,主要关注实时应用。
它采用优化的C代码编写,能够充分利用多核处理器的优势。
如果是希望在Intel平台上得到更快的处理速度,可以购买Intel的高性能多媒体函数库IPP(IntegratedPerformancePrimitives)。
IPP库包含许多从底层优化的函数,这些函数涵盖多个应用领域。
如果系统已经安装了IPP库,OpenCV会在运行时自动使用相应的IPP库。
OpenCV的一个目标是构建一个简单易用的计算机视觉框架,以帮助开发人员更便捷地设计更复杂的计算机视觉相关应用程序。
OpenCV包含的函数有500多个,覆盖了计算机视觉的许多应用领域,如工厂产品检测、医学成像、信息安全、用户界面、摄像机标定、立体视觉和机器人等。
因为计算机视觉和机器学习密切相关,所以OpenCV还提供了MLL(MachineLearningLibrary)机器学习库。
该机器学习库侧重于统计方面的模式识别和聚类(clustering)。
MLL除了用在视觉相关的任务中,还可以方便地应用于其他的机器学习场合。
国内的一些研究院也利用opencv对涂树白机的视觉图像背景去除从而识别树木,计算出树干的直径后进行后续操作。
将一种自动涂树白机应用于该领域等。
国外也有相关opencv教程相关书籍,大多数计算机科学家和程序员已经意识到计算机视觉的重要作用。
但是很少有人知道计算机视觉的所有应用。
例如,大多数人或多或少地知道计算机视觉可用在监控方面,也知道视觉被越来越多地用在网络图像和视频方面。
少数人也了解计算机视觉在游戏界面方面的应用。
但是很少有人了解大多数航空和街道地图图像(如Google的StreetView)也大量使用计算机定标和图像拼接技术。
一些人知道安全监控、无人飞行器或生物医学分析等方面的应用,但是很少人知道机器视觉是多么广泛地被用在工厂中:
差不多所有的大规模制造的产品都在流水线上的某个环节上自动使用视觉检测。
近年来,以图形图像视频等大容量为特征的图像数据处理广泛应用于医疗,交通,工业自动化等领域。
opencv作为开放的计算机视觉资源代码提供提供丰富的图像及计算机视觉处理函数,是计算机视觉,图像处理和模式识别等方面进行二次开发的理想工具。
3.本课题的研究内容和计划
1、本课题研究的主要内容
去除背景图像是图像处理技术中的一个重要分支。
这项技术涉及到自动控制、计算机视觉、模式识别和人工智能等众多领域。
OpenCV是用来实现计算机视觉相关技术的开放源码工作库,是计算机视觉、图像处理、模式识别、计算机图形学、信号处理、视频监控、科学可视化等相关从业人员的好工具。
本课题所研究的图像背景去除是针对树木的,通过对图像处理的基本理论的研究和实践,提出了一种基于OpenCV的图像处理算法的方法,此算法可大致分为基于彩色图像的去除树木视觉图像背景的算法研究和基于灰度图像的去除树木视觉图像背景的算法研究,根据实际需要,通过图像预处理与检测算法的组合对某些算法进行了优化。
然后在此基础上开发了一款基于OpenCV的树木视觉图像背景去除及测量的软件。
该软件实现了帧差法、背景估计法、混合高斯建模法这三种检测算法,以及Kalman、Camshift两种跟踪算法。
为了详细说明该软件,本文还介绍了其总体结构和各项功能。
最后,对软件的运行过程和结果进行了分析,并对检测算法从主观和客观两个方面进行了评价。
这对于背景检测与去除的实际应用是很有意义的,通过大量试验,我也相信算法一定能够最终达到预期结果和广阔的应用前景。
2、可能需要到的模型和检测算法
为了有效地检测树木的背景,我查阅了一些可能需要用的检测算法。
因为树木主要为静止目标检测,下面有一些较常用的检测算法,对于本课题也许会有些帮助。
2.1颜色模型
颜色模型是用来表示颜色的数学模型,又被称为彩色空间或彩色模型。
目前常用的颜色模型可以分为两类,一类面向诸如彩色显示器或打印机之类的硬件设备,另一类面向以彩色处理为目的的应用,如动画中的彩色图形。
面向硬件设备的最常用彩色模型是RGB模型,而面向彩色处理的最常用模型是HSV模型。
下面分别就这两种模型和他们之间的转换进行介绍。
2.2RGB模型
根据三基色原理,自然界中的各种颜色都可以由红、绿、蓝三种颜色的光按照不同比例混合而成,红、绿、蓝三种颜色即为三基色。
RGB模型就是根据这一原理的基础上建立起来的,在笛卡尔坐标系的三个轴分别为红(R)、绿(G)、蓝(B)。
原点对应的是黑色,离原点最远的顶点对应白r10色。
在此模型中,从黑到白的狄度值分布在原p点到离原点最远顶点的连线上(即对角线),而RGB模型各种不同的颜色就对应着立方体内的各点,可以用从原点到该点的矢量表示。
为方便起见,将立方体归一化,这样所有的R,G,B的分量值都在区问[0,1]中。
2.3HSV模型
另外一种较常见的彩色模型是HSV(Hue/Saturation/Value,色调/饱和度/明度)模型1291。
这种模型与人的视觉系统相对应,反映了人类观察色彩的方式,多用在图像处理或计算机视觉的算法研究中。
本文中将在Camshift跟踪算法中用到这种彩色模型。
色调表征的是颜色,颜色与彩色光的波长有关,把颜色按红橙黄绿青蓝紫的顺序排列定义为色调值,并且用角度值(00~3600)来表示。
例如,红、黄、绿、青、蓝、洋红的角度值分别为00,600,1200,1800,2400和3000。
饱和度表征的是颜色的纯度,即彩色光中掺杂白光的程度。
白光越多,饱和度就越低;
白光越少饱和度越高,颜色越纯。
饱和度的取值采用百分数(0%.--100%),0%表示灰色光或白光,100%表示纯色光。
明度是由物体的反射系数决定的,反射系数越大,明度越大。
表征了色彩的明亮程度,其范围从0到1。
HSV颜色模型对应于圆柱坐标系中的一个圆锥形子集,如图2.2.3(a)所示。
圆锥型空间的竖直轴表示明度以圆锥的顶面对应于y=1,底部y=0,H和S无定义,代表黑色,中间是在最亮和最暗之间过渡的灰度。
圆锥型空问中部的水平面圆周是表示色调H的角度坐标
2.4从RGB转换到HSV
对任何3个R,G,B值,其对应HSV模型中的V,S,H分量可由公式计算:
式中,R,G,B的值都在[0,255]区间内,转换后的H,S,V的值也一样。
2.5目标图像预处理
基于OpenCV的树木背景检测与跟踪算法研究及实现图像预处理主要是指对比度增强和图像滤波等方法。
利用目标和背景的固有特性,充分地抑制背景、增强目标、提高信噪比是有效进行目标检测与跟踪的关键。
(1)图像增强:
在图像场景中由于目标和背景的温差较小,从而导致图像的对比度很低,为了提高图像的对比度,人们研究了各种图像增强方法。
虽然图像增强并不能增加图像数据中的信息量,但是它却能够增加所选择特征的动态范围,从而使这些特征更容易地被检测和识别。
目前,图像增强方法从其增强的作用域出发,可分为空间域增强、频率域增强和小波域增强1371。
本文主要是在空间域进行增强,所谓空间域增强,就是直接对图像像素进行操作。
由于目标没有确定的尺寸大小和轮廓,故在增强算法中主要是对其进行对比度增强。
对比度增强是图像增强技术中一种比较简单但又十分重要的方法。
这种方法是按一定的规则修改输入图像的每一个象素的灰度,从而改变图像灰度的动态范围。
它可以使灰度动态范围扩展,也可以使其压缩,或者对狄度进行分段处理,根据图像特点和要求在某段区间中进行压缩,而在另外区间进行扩展。
实际中由于成像系统非线性的影响,造成图像对比度不高,使用对比度增强可以有效改善图像的质量。
(2)图像滤波:
利用探测系统获取的目标图像,背景除了具有在空间不相关的噪声外,主要是大面积缓慢变化的低频部分。
例如飞机在云层中飞行,作为背景的云
层本身不仅缓慢变化,而且具有一定的相关性。
而目标亮度通常比背景高,且与背景不相关,是图像中的孤立亮斑。
因此,采用背景抑制的方法处理单帧图像,能将目标与具有相关性的背景分离开,可以达到检测目标的目的。
目前的背景抑制方法主要有以下几种实现方式:
考虑到淹没在复杂背景中的红外目标近似为高频噪声,可以通过对图像的空域、频域进行高通滤波的方法将目标与背景加以分离;
又由于考虑到运算量的问题,所以主要是通过图像的空域进行高通滤波;
又考虑到中值滤波的去噪功能比较好,所以在后续的序列处理中,可以使用中值滤波来滤除孤立噪声;
近年来,由于形态学分析和处理算法可以并行地实现,大大提高了图像分析和处理的速度,因此,在图像分析和处理中形态学的研究和应用在国外得到不断地发展,也产生了一些结合形态学检测算子进行背景抑制、目标检测的方法。
2.6目标图像分割
图像分割是一种重要的图像技术,分割的目的是把图像空间分成一些有意义的区域。
这罩“有意义”的内涵随着解决的问题不同而不同,例如可以按幅度不同来分割各个区域、按边缘不同来分割各个区域和按形状不同来分割各个区域等等,不过通常是指将目标图像从背景图像中分割出来。
选用哪些量作为“有意义”的属性,依赖于待分割图像的具体情况,主要取自各种图像特性。
图像分割的方法和种类有很多,有些分割运算可直接应用于任何图像,而另一些只能适用于特殊类别的图像。
有些算法需要先对图像进行粗分割,因为他们需要从图像中提取出来的信息。
例如,可以通过对图像的灰度级设置门限的方法进行分割。
值得提出的是,没有唯一的标准的分割方法。
许多不同种类的图像或景物都可作为待分割的图像数据,不同类型的图像,已经有相对应的分割方法对其分割,同时,某些分割方法也只是适合于某些特殊类型的图像分割。
分割结果的好坏需要根据具体的场合及要求衡量。
图像分割是从图像处理到图像分析的关键步骤,可以说,图像分割结果的好坏直接影响对图像的理解。
3、OpenCV的安装
这里我用到的平台是MicrosoftVisualStudio2008和OpenCV2.0。
OpenCV2.0下载地址
CMake下载地址
http:
//www.cmake.org/cmake/resources/software.html
安装目录为:
D:
/ProgramFilesOpenCV2.0
3.1用CMake导出VC++项目文件
(1)运行cmake-gui,设置路径为OpenCV安装路径(例如:
\ProgramFiles\OpenCV2.0),并创建子目录D:
\ProgramFiles\OpenCV2.0\vc2008,用于存放编译结果。
(2)然后点configure,在弹出的对话框内选择VisualStudio92008。
(3)MicrosoftVisualStudio2008正式版支持OpenMP,所以ENABLE_OPENMP这个选项要勾上;
如果是Express版本,则不支持OpenMP,所以需要取消ENABLE_OPENMP选项。
(4)最后再点击Generate。
3.2编译OpenCVDebug和Release版本库
完成上一步骤后,将在D:
\ProgramFiles\OpenCV2.0\vc2008目录下生成OpenCV.sln的VCSolutionFile,请用VC++2008Express打开OpenCV.sln,然后执行如下操作:
(1)在Debug下,选择SolutionExplorer里的SolutionOpenCV,点右键,运行"
RebuildSolution"
;
如编译无错误,再选择INSTALL项目,运行"
Build"
。
(2)在Release下,选择SolutionExplorer里的SolutionOpenCV,点右键,运行"
此时,OpenCV的*d.dll文件(fordebug)和*.dll文件(forrelease)将出现在D:
\ProgramFiles\OpenCV2.0\vc2008\bin目录中;
OpenCV的*d.lib文件(fordebug)和*.lib文件(forrelease)将出现在D:
\ProgramFiles\OpenCV2.0\vc2008\lib目录;
头文件*.h出现在D:
\ProgramFiles\OpenCV2.0\vc2008\include\opencv中。
至此MicrosoftVisualStudio2008调用的OpenCV动态库生成完毕。
3.3配置Windows环境变量Path
在OpenCV安装完成后,需要在“我的电脑”属性的高级设置中将OpenCV的动态链接库文件加入系统的环境变量,将D:
\ProgramFiles\OpenCV2.0\vc2008\bin加入Windows系统环境变量Path中。
加入后,必须注销当前用户或者重新启动才能生效。
3.4为MicrosoftVisualStudio2008配置OpenCV环境
之后在VC的Options设置中将OpenCV的库路径和头文件路径加入到路径文件Directories中。
打开MicrosoftVisualStudio2008,菜单