基于机器视觉的害虫种类及计数检测研究-人工智能项目-附代码

本文主要是介绍基于机器视觉的害虫种类及计数检测研究-人工智能项目-附代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概述

  • 农业与民生和经济发展息息相关,对农业发展科学化的关注既是民生需求,

  • 也是经济稳步发展的迫切需求。病虫害是影响农作物生长的重要因素,对农作物的产量和品质都能造成无法估计的损害。
    -在这里插入图片描述

  • 针对目前广大农业产区农业植保人员稀缺、病虫害识难度大等问题,论文在当前已有的研究基础上进行设计,提出了一套基于机器视觉的远程害虫种类识别
    和数量检测系统,该系统能够在农业产区进行害虫捕杀和图像采集,同时将昆虫 图像上传到虫类鉴别服务器进行昆虫识别。

  • 论文以机器视觉为核心,利用 OpenCV 开源视觉库,研究和实现了昆虫识别的完整流程。论文

研究的内容主要包括:

  • (1) 对昆虫图像进行图像预处理的研究。使用了加权平均法对图像进行灰度化
    处理,再使用高斯滤波对图像进行平滑处理,最后使用大津法对灰度化后的图像 进行二值化处理。
  • (2) 对昆虫图像进行特征提取的研究。使用 OpenCV 对二值化后的图像进行轮
    廓查找,同时实现昆虫计数,然后分别针对昆虫轮廓的矩形度、延长度、似圆度、 球状性、叶状性进行数学定义和特征提取。
  • (3) 对昆虫识别进行了分类器的研究。选取了逻辑斯蒂回归模型、线性 SVM 模 型和 K
    临近模型进行分类器的训练和测试,比较了三种分类器在昆虫识别上的性 能。

论文对基于机器视觉的昆虫种类及数量检测机制进行了研究,并在此基础实
现了昆虫的识别和计数。
在这里插入图片描述

识别

PC 上的昆虫分类识别软件为了能够对本次设计进行原理论证和测试,使用 Python 作为编程语言,开发了一款在 Windows10 上运行的软件。具体程序界面如图 2.7 所示:
在这里插入图片描述
界面中包括:一个用以预览摄像头的窗口,一个用来显示处理之后图像的窗口,一个用来显示识别结果的标签和一个用来点击进行拍照的按钮。
图 2.8 介绍了论文设计的分类识别软件的运行过程。
在这里插入图片描述

昆虫图像的预处理

3.2.1 图像的灰度化,高斯滤波和尺度变换

  • 在机器视觉领域中,灰度图像是指将每个像素通过 8 位非线性尺寸保存,共计 256 种灰度

  • 针对论文进行形态特征提取的方式,进行灰度化即抛弃了不需要的颜色特征等信息,又保留了对于形态特征提取有用的信息,同时易于编程,提高了运算速度。
  • 论文使用灰度处理算法中的加权平均法对昆虫图像进行灰度化处理,由于科学研究中人眼对对蓝色敏感度最低,绿色的敏感度最高,因此,论文按照式(3.1)
    对 RGB 图像中的三种分量进行加权平均,最终能得到合理的灰度图像

gray(݅, ݆) = 0.30 ∗ ܴ(݅, ݆) + 0.59 ∙ ܩ(݅, ݆) + 0.11 ∙ ܤ(݅, ݆) (3.1)

图灰度化后的样本图片,如图 3.3 所示。

3.3.1 检测轮廓

  • 在此次毕业设计中,我使用开源计算机视觉库 OpenCV 作为图像处理的工具,
  • OpenCV 的 Imgproc 模块在物体识别方面提供了函数 findContours()用于对物体 轮廓进行检测,该函数的实现算法是由
    S.Suzuki K. Abe 于 1985 年发表在 CVGIP 上的论文“Toplogical Structrual Analysis
    of Digitized Binary Images by Boder
    Following”[8]中提出的,论文中详细叙述了轮廓决定层次结构的规则以
  • 及轮廓检测的方法,设计中使用 findContours()函数对昆虫图像进行处理,为
    获得昆虫图像中昆虫的轮廓,为之后昆虫轮廓特征值的提取打下基础。

3.3.2 昆虫计数

  • OpenCV 中对于轮廓检测提供了函数findContours(),该函数对昆虫图像预 处理后的二值化图像进行检测,返回一个点集列表,其中每一个点集都代表了图像中封闭的轮廓包含的点的集合。后续的昆虫特征提取都是在检测轮廓得到轮廓 点集列表的基础上完成的。
  • 通过对 findContours()函数返回的点集列表进行计数,点集的个数则大概代表了图像中轮廓的个数,应在在实际场景中,则轮廓的个数代表了一张纸上大米的粒数,也代表了设计场景中一张苍蝇粘板上苍蝇等昆虫的个数。
  • 使用大米计数的样本图片进行原理论证,效果图如图 3.5 所示
    在这里插入图片描述

计数

苍蝇粘板数目检测的实际效果图如图 3.6 所示,
在这里插入图片描述

图 4.2 是获取昆虫图像最小外接矩形和计算矩形度的效果图:

在这里插入图片描述

延长度特征的提取效果如图 4.5 所示:

在这里插入图片描述

昆虫轮廓的球状性特征提取效果如图 4.6 所示

在这里插入图片描述

创新点

设计的创新点在于:

  • (1) 针对农业产区广泛存在的农业害虫检测识别问题,提出了一种基于机器 视觉的害虫种类及数量检测方案。

  • (2) 在参考已有的论文的理论基础之上,提出了针对每一个昆虫形态特征的 提取方案。

  • (3) 在进行分类器训练时,引入了多种分类器算法,并进行训练和测试,能 够在比较分析结果后选择较为理想的分类器算法作为实际使用时的算法。

  • (4) 开发了一套基于 PC 机的识别软件,能够使用摄像头拍着昆虫图片的方 式进行昆虫的识别。

代码

# 全部代码  ------> qq1309399183
# 先读图,然后二值化,通过找轮廓来进行计数import cv2
import numpy as np
from matplotlib import pyplot as pltorigin = cv2.imread('picture/ttt.png')
RiceImg = cv2.imread('picture/ttt.png', 0)blur = cv2.GaussianBlur(RiceImg, (5, 5), 0)# 大津法二值化:此处可以用原理代码来巴拉巴拉一大段
ret, otsu = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# 输出阈值
print ret# 找轮廓
contours = cv2.findContours(otsu, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
num = len(contours[1])
print num
# 画轮廓
cv2.drawContours(origin, contours[1], -1, (0, 0, 255), 1)
cv2.putText(origin, 'Insect Num:  ' + str(num), (1, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (50, 50, 50), 2, cv2.LINE_AA)cv2.namedWindow('RiceO', cv2.WINDOW_AUTOSIZE)
cv2.imshow('RiceO', origin)cv2.imwrite('picture/tttresult.jpg',origin)
k = cv2.waitKey(0)# 'ESC'
if k == 27:cv2.destroyAllWindows()

这篇关于基于机器视觉的害虫种类及计数检测研究-人工智能项目-附代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/564518

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni